Rerunning the Verilator build without warnings disabled on the new command file now yields 49 warnings:
%Warning-COMBDLY: ../local/rtl/verilog/dbg_interface/dbg_top-2.v:1162: Delayed a ssignments (<=) in non-clocked (non flop or latch) blocks should be non-delay ed assignments (=). %Warning-COMBDLY: Use "/* verilator lint_off COMBDLY */" and lint_on around sour ce to disable this message. %Warning-COMBDLY: *** See the manual before disabling this, %Warning-COMBDLY: else you may end up with different sim results. %Warning-COMBDLY: ../orp_soc/rtl/verilog/ethernet/eth_registers.v:880: Delayed a ssignments (<=) in non-clocked (non flop or latch) blocks should be non-delay ed assignments (=). ...
This is one of the more complex warnings. Good design practice is to use non-blocking assignments in sequential logic and blocking assignments in combinatorial logic. Cliff Cummings 2000 SNUG paper gives a good explanation of why this is important [3].
This can cause errors when moving to cycle accurate simulation, but it is not necessarily trivial to fix with existing code. However by following this guideline, the potential for Verilator optimization is maximized.
The warning occurs 46 times in ORPSoC, but 41 of those are in a
single file, ps2_keyboard.v
, in a combinatorial
state machine.
The command file cf-optimized-6.scr
has all
these problems fixed. A performance run need not now turn off
warnings about COMBDLY
.
make clean verilate COMMAND_FILE=cf-optimized-6.scr \ VFLAGS="-Wno-UNOPTFLAT -language 1364-2001" NUM_RUNS=1000
This run gives a performance of 43.20 kHz, once again not significantly different to earlier figures.