[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

四、仿真图

在这里插入图片描述


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部