【问题标题】:I'm getting this error for my verilog code, “Illegal operation for constant expression”我的 verilog 代码出现此错误,“Illegal operation for constant expression”
【发布时间】:2020-10-11 11:08:36
【问题描述】:

我收到以下代码的错误:

state_check_core 也会出现同样的错误

assign state_check_core = (post_vinout_force0_1p5.v_eq >=0.675 & post_vinout_force0_1p5.v_eq <= 0.825) ? 1'b1 : 1'b0;
assign state_check_dgo = (post_vinout_force0_1p5.v_eq >=1.35 & post_vinout_force0_1p5.v_eq <= 1.65) ? 1'b1 : 1'b0;
//setting the outputs
wire out_limit;
if(state_check_dgo==1'b1) begin
assign out_limit = ((vdd_1p5.v_eq>=1.35 & vdd_1p5.v_eq<=1.65) & (vdd_main>=0.675 & vdd_main<=0.825) & (vss==0.00)  & ((post_vinout_sense0_1p5.v_eq>= 1.35 & post_vinout_sense0_1p5.v_eq<= 1.65 ) & (post_vinout_sense1_1p5.v_eq>= 1.35 & post_vinout_sense1_1p5.v_eq<= 1.65)) & (i_force0 >= 1.35e-03 & i_force0 <= 1.65e-03) & (i_force1 >= 1.35e-03 & i_force1 <= 1.65e-03) & (i_1p5 >= 3.5e-03 & i_1p5 <= 4e-03)) ;
end

错误:

if(state_check_dgo==1'b1) begin
                 |
xmvlog: *E,NOTPAR (../a_ip_post_imx_ts_cln5p.v,184|17): Illegal operand for constant expression [4(IEEE)].
    if(state_check_core==1'b1)

【问题讨论】:

标签: verilog system-verilog


【解决方案1】:

if 需要在 always 块内;否则,模拟器会认为您使用的是generate,它认为state_check_dgo 是一个常量(如parameter)。

在这种情况下,always 块内不会有 assign,您需要将 out_limit 从 wire 更改为 reg。

reg out_limit;
always @* begin
    if (state_check_dgo==1'b1) begin
        out_limit = ((vdd_1p5.v_eq>=1.35 & vdd_1p5.v_eq<=1.65) & (vdd_main>=0.675 & vdd_main<=0.825) & (vss==0.00)  & ((post_vinout_sense0_1p5.v_eq>= 1.35 & post_vinout_sense0_1p5.v_eq<= 1.65 ) & (post_vinout_sense1_1p5.v_eq>= 1.35 & post_vinout_sense1_1p5.v_eq<= 1.65)) & (i_force0 >= 1.35e-03 & i_force0 <= 1.65e-03) & (i_force1 >= 1.35e-03 & i_force1 <= 1.65e-03) & (i_1p5 >= 3.5e-03 & i_1p5 <= 4e-03)) ;
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2016-02-06
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多