SystemVerilog数据类型、运算、以及运算优先级总结
一、SystemVerilog数据类型和运算符
二、SystemVerilog运算优先级
三、错误案例分析
- 在下面的例子中,我们发现在gain_sync为0时,总是进入else分支,没有实现预期的功能
- 原因就是运算“==”的优先级高于运算“&&”的优先级
- 解决方法就是给“&&”表达式加上括号:((gain_sync && sync_function_on) == 'h0) && (mrx_ant_on == 'h0)
if((gain_sync && sync_function_on == 'h0) && (mrx_ant_on == 'h0)) begin
`uvm_info("PORT_SEL_TRACE", $sformatf(), UVM_LOW)
end
else if((gain_sync && sync_function_on == 'h0) && (mrx_ant_on == 'h1)) begin
`uvm_info("PORT_SEL_TRACE", $sformatf(), UVM_LOW)
end
else if((gain_sync && sync_function_on == 'h1) && (mrx_ant_on == 'h0)) begin
`uvm_info("PORT_SEL_TRACE", $sformatf(), UVM_LOW)
end
else if((gain_sync && sync_function_on == 'h1) && (mrx_ant_on == 'h1)) begin
`uvm_info("PORT_SEL_TRACE", $sformatf(), UVM_LOW)
end
else begin
`uvm_info("PORT_SEL_TRACE", $sformatf(), UVM_NONE)
end