[Synth 8-196] conditional expression could not be resolved to a constant
[Synth 8-196] conditional expression could not be resolved to a constant [Synth 8-196]条件表达式不能解析为常量
- 一、循环加功能代码
- 二、4位加法器代码
- 三、仿真代码
- 四、仿真图
一、循环加功能代码
做一个循环加的实验的时候,实现a的低4位,分别加上b寄存器按照4位划分的数据,在仿真顶层模块的时候出错,错误就如下所示:
[Synth 8-196] conditional expression could not be resolved to a constant
//[Synth 8-196]条件表达式不能解析为常量
它说我这个信号不能用作输出端口,检查了很久,我才发现我犯了一个非常低级的错误,即在顶层定义的时候,我将s(出问题的信号)的变量类型设为reg了,也就是我是s这个信号的,这样做是错误的,虽然需要存储值,但是组合逻辑中应该用wire,然后再我改过来之后,就可以仿真成功啦!
错误代码
module fortest(a,b,s);input [15:0]a;input [15:0]b;output reg [15:0]s;wire [3:0]d;REDADD_4BIT REDADD_4BIT_inst (.o_s(s[3:0]),.o_c(),.i_a(a[3:0]),.i_b(b[3:0]),.i_cin(1'b0));genvar i_var;generate for(i_var=0;i_var<3;i_var=i_var+1)begin// $display ("Current loop#%0d",i);REDADD_4BIT REDADD_4BIT_inst (.o_s(s[(i_var+1)*4+3:(i_var+1)*4]),.o_c(),.i_a(a[(i_var+1)*4+3:(i_var+1)*4]),.i_b(s[i_var*4+3:i_var*4]),.i_cin(1'b0));assign d=s[15:12];end
endgenerate
endmodule
正确代码
module fortest(a,b,s);input [15:0]a;input [15:0]b;output [15:0]s;wire [3:0]d;REDADD_4BIT REDADD_4BIT_inst (.o_s(s[3:0]),.o_c(),.i_a(a[3:0]),.i_b(b[3:0]),.i_cin(1'b0));genvar i_var;generate for(i_var=0;i_var<3;i_var=i_var+1)begin// $display ("Current loop#%0d",i);REDADD_4BIT REDADD_4BIT_inst (.o_s(s[(i_var+1)*4+3:(i_var+1)*4]),.o_c(),.i_a(a[(i_var+1)*4+3:(i_var+1)*4]),.i_b(s[i_var*4+3:i_var*4]),.i_cin(1'b0));assign d=s[15:12];end
endgenerate
endmodule
二、4位加法器代码
module REDADD_4BIT (o_s,o_c,i_a,i_b,i_cin);output[3:0] o_s;output o_c;input[3:0] i_a;input[3:0] i_b;input i_cin;wire[3:0] c_p;wire[3:0] c_g;reg [3:0] c_ci;assign c_p =i_a^i_b;assign c_g =i_a&i_b;always @*beginc_ci[0]=i_cin;c_ci[1]=c_g[0] | c_p[0]&i_cin;c_ci[2]=c_g[1] | c_p[1]&c_g[0] | c_p[1]&c_p[0]&i_cin;c_ci[3]=c_g[2] | c_p[2]&c_g[1] | c_p[2]&c_p[1]&c_g[0] | c_p[2]&c_p[1]&c_p[0]&i_cin;endassign o_s =c_p^c_ci;assign o_c =c_g[3] | c_p[3]&c_ci[3];endmodule
三、仿真代码
module fortest_tb( );reg [15:0]a;reg [15:0]b;wire [15:0]s;fortest fortest_inst(.a(a),.b(b),.s(s));initial begina = 16'b0;b = 16'b0;#100 a = 16'b0101_0001_0001_0111;b = 16'b0101_0001_0001_0111; end
endmodule
四、仿真图

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
