Verilog 在生成块中使用模块时加载设计时出错
我在单独的文件中有以下模块。当我尝试运行我的RC_ADD_SUB_32模块时,我发现错误实例化'inst'失败。区域:/RC_ADD_SUB_32_TB/obj/RC_gen_loop[0]/FULL_ADDER未找到设计单元。加载设计时出错。 实例化全加器在生成块内不起作用。在rc_add_sub_32.v文件中实例化全加器时遇到问题。有什么想法吗 全加器Verilog 在生成块中使用模块时加载设计时出错,verilog,hdl,modelsim,Verilog,Hdl,Modelsim,我在单独的文件中有以下模块。当我尝试运行我的RC_ADD_SUB_32模块时,我发现错误实例化'inst'失败。区域:/RC_ADD_SUB_32_TB/obj/RC_gen_loop[0]/FULL_ADDER未找到设计单元。加载设计时出错。 实例化全加器在生成块内不起作用。在rc_add_sub_32.v文件中实例化全加器时遇到问题。有什么想法吗 全加器 module FULL_ADDER(S,CO,A,B, CI); output S,CO; input A,B, CI;
module FULL_ADDER(S,CO,A,B, CI);
output S,CO;
input A,B, CI;
wire HF_1_Y, HF_1_C, HF_2_C; //Half Adder 1 Y, Half Adder 1 C and Half Adder 2 C
HALF_ADDER inst_01 (.A(A), .B(B), .Y(HF_1_Y), .C(HF_1_C));
HALF_ADDER inst_02 (.A(HF_1_Y), .B(CI), .Y(S), .C(HF_2_C));
or inst_03(CO, HF_2_C, HF_1_C);
endmodule;
rc_add_sub_32.v
module RC_ADD_SUB_32(Y, CO, A, B, SnA);
// output list
//output [63:0] Y;
output [`DATA_INDEX_LIMIT:0] Y; //Our result
output CO;
// input list
//input [63:0] A;
//input [63:0] B;
input [`DATA_INDEX_LIMIT:0] A;
input [`DATA_INDEX_LIMIT:0] B;
input SnA;
//full adder -> full adder connection
wire [`DATA_INDEX_LIMIT:0] CO_TO_CI;
wire [`DATA_INDEX_LIMIT:0] XOR_OUT;
genvar i;
generate
for(i=0; i<32; i=i+1)
begin: rc_gen_loop
/*
Cases:
Index 0: CI is SnA CO -> CI[1]
Index 31: CI is CO from index 30, CO is output CO,
Index 1-30: CI is from previous CO, CO points to next CI
*/
xor xors(XOR_OUT[i], SnA, B[i]);
if(i==0)
begin:
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(SnA));
end
else if(i==31)
begin:
FULL_ADDER inst(.S(Y[i]), .CO(CO), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
else if(i!=31 && i!=0)
begin:
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
end
endgenerate
endmodule
条件语句有
begin:
,没有标签。照样,模拟器要么将其视为空白标签,要么将其换行,并将全加器作为标签名。两者都是非法的。添加标签(首选)或去掉冒号
仅供参考,如果(i!=31&&i!=0)是不必要的,因为这些条件是在先前的条件中捕获的
标签示例:
if(i==0)
begin: gen_first
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(SnA));
end
else if(i==31)
begin: gen_last
FULL_ADDER inst(.S(Y[i]), .CO(CO), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
else
begin: gen_middle
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
或无标签:
if(i==0)
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(SnA));
end
else if(i==31)
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
else
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
条件语句有
begin:
,没有标签。照样,模拟器要么将其视为空白标签,要么将其换行,并将全加器作为标签名。两者都是非法的。添加标签(首选)或去掉冒号
仅供参考,如果(i!=31&&i!=0)是不必要的,因为这些条件是在先前的条件中捕获的
标签示例:
if(i==0)
begin: gen_first
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(SnA));
end
else if(i==31)
begin: gen_last
FULL_ADDER inst(.S(Y[i]), .CO(CO), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
else
begin: gen_middle
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
或无标签:
if(i==0)
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(SnA));
end
else if(i==31)
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
else
begin
FULL_ADDER inst(.S(Y[i]), .CO(CO_TO_CI[i]), .A(A[i]), .B(XOR_OUT[i]), .CI(CO_TO_CI[i-1]));
end
它是否在生成块外加载模块?您确定
全加器模块在您的解析层次结构中吗?它是否在生成块之外加载模块?您确定解析层次结构中有FULL_ADDER
模块吗?