问题描述
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)
解决方法
if
必须位于always
块内;否则,模拟器会认为您正在使用generate
,它期望state_check_dgo
是一个常数(例如parameter
)。
在这种情况下,您不会在assign
块中包含always
,并且需要将out_limit
从wire
更改为reg
。 / p>
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