Closed jotego closed 2 years ago
Thanks for suggesting this be handled commercially; please contact the folks here https://www.veripool.org/verilator_commercial_support/ if they haven't contacted you already.
Note that usually the conversion to packed arrays is sufficient, are you getting an error message?
Also the ordering warnings can be turned off and generally a design will work (and is likely fixed in v5-devel).
By pure coincidence I took a look today at https://chipsalliance.github.io/sv-tests-results/?v=verilator+fx68k+fx68k and couldn't help noticing that fx68k is reported to be building fine under Verilator, with only warnings. Since I remembered this issue, I couldn't help peeking into the report.
Looking into the warnings, I see this:
%Warning-UNPACKED: [third_party/cores/fx68k/fx68k.sv:48:9](https://chipsalliance.github.io/sv-tests-results/third_party/cores/fx68k/fx68k.sv.html#l-48): Unsupported: Unpacked struct/union
: ... In instance fx68k
%Warning-UNPACKED: [third_party/cores/fx68k/fx68k.sv:73:9](https://chipsalliance.github.io/sv-tests-results/third_party/cores/fx68k/fx68k.sv.html#l-73): Unsupported: Unpacked struct/union
: ... In instance fx68k
%Warning-UNPACKED: [third_party/cores/fx68k/fx68k.sv:56:9](https://chipsalliance.github.io/sv-tests-results/third_party/cores/fx68k/fx68k.sv.html#l-56): Unsupported: Unpacked struct/union
: ... In instance fx68k
If this is unsupported, and the simulation will not run, why is this reported as a Warning and not an Error?
Besides, after reading IEEE1800-2017, I came to the conclusion that the only difference between packed and unpacked structs are:
So:
I took a look at the the other warnings out of curiosity, and noticed a few things:
// synopsys translate on
and // synopsys translate off
which should really be avoided, and replaced with something along the lines of `ifdef SYNTHESIS
... `endif
// synopsys translate on
on purpose. See https://github.com/verilator/verilator/issues/24Given these 2 minor fx68k <> Verilator incompatibilities, I would simply fork a branch of fx68k and fix it if for my needs:
// synopsys translate on
/ // synopsys translate off
into `ifdef SYNTHESIS
... `endif
packed
keyword.Thank you for looking into this.
Verilator does not support mixed blocked and non-blocking assignemnts to a variable. This becomes a problem for the struct types because each signal within the struct is given a different treatment by the code, thus it is unpacked. There seem to be like 33 such errors. See the report below. I have no idea how they got the report you linked to.
I did try to remove the structs and use plain signals in my fx68k branch, but although a formal tool seemed to be happy with the changes, Verilator still didn't simulate the result correctly so I guess my code wasn't really equivalent.
The author of fx68k is highly reluctant to making any changes to the code, particularly for something he argus is a simulator tool problem. My take at this is that it's better to design open source modules to work with FOSS tools, but well, open source comes with no warranties, so what can you do about it.
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:468:40: Operator COND expects 9 bits on the Conditional True, but Conditional True's CONST '4'h6' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
468 | htemp = { 1'b0, binResult} + (lowC ? 4'h6 : 4'h0);
| ^
... For warning description see https://verilator.org/warn/WIDTH?v=4.224
... Use "/* verilator lint_off WIDTH */" and lint_on around source to disable this message.
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:468:40: Operator COND expects 9 bits on the Conditional False, but Conditional False's CONST '4'h0' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
468 | htemp = { 1'b0, binResult} + (lowC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:469:32: Operator COND expects 5 bits on the Conditional True, but Conditional True's CONST '4'h6' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
469 | hNib = htemp[8:4] + (highC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:469:32: Operator COND expects 5 bits on the Conditional False, but Conditional False's CONST '4'h0' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
469 | hNib = htemp[8:4] + (highC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:473:40: Operator COND expects 9 bits on the Conditional True, but Conditional True's CONST '4'h6' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
473 | htemp = { 1'b0, binResult} - (lowC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:473:40: Operator COND expects 9 bits on the Conditional False, but Conditional False's CONST '4'h0' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
473 | htemp = { 1'b0, binResult} - (lowC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:474:32: Operator COND expects 5 bits on the Conditional True, but Conditional True's CONST '4'h6' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
474 | hNib = htemp[8:4] - (highC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:474:32: Operator COND expects 5 bits on the Conditional False, but Conditional False's CONST '4'h0' generates 4 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu.aluCorf
474 | hNib = htemp[8:4] - (highC ? 4'h6 : 4'h0);
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1930:19: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's VARREF 'i' generates 32 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.rmPren
1930 | hbit = i;
| ^
%Warning-UNPACKED: ../../../../modules/fx68k/fx68k.sv:48:9: Unsupported: Unpacked struct/union
: ... In instance game_test.u_game
48 | typedef struct {
| ^~~~~~
%Warning-UNPACKED: ../../../../modules/fx68k/fx68k.sv:73:9: Unsupported: Unpacked struct/union
: ... In instance game_test.u_game
73 | typedef struct {
| ^~~~~~
%Warning-UNPACKED: ../../../../modules/fx68k/fx68k.sv:56:9: Unsupported: Unpacked struct/union
: ... In instance game_test.u_game
56 | typedef struct {
| ^~~~~~
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:278:39: Operator ADD expects 17 bits on the LHS, but LHS's REPLICATE generates 9 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
278 | rtemp = bAdd ? { 1'b0, inpb[7:0]} + { 1'b0, inpa[7:0]} + cin:
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:278:39: Operator ADD expects 17 bits on the RHS, but RHS's REPLICATE generates 9 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
278 | rtemp = bAdd ? { 1'b0, inpb[7:0]} + { 1'b0, inpa[7:0]} + cin:
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:278:60: Operator ADD expects 17 bits on the RHS, but RHS's VARREF 'cin' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
278 | rtemp = bAdd ? { 1'b0, inpb[7:0]} + { 1'b0, inpa[7:0]} + cin:
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:279:29: Operator SUB expects 17 bits on the LHS, but LHS's REPLICATE generates 9 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
279 | { 1'b0, inpb[7:0] } - { 1'b0, inpa[7:0]} - cin;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:279:29: Operator SUB expects 17 bits on the RHS, but RHS's REPLICATE generates 9 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
279 | { 1'b0, inpb[7:0] } - { 1'b0, inpa[7:0]} - cin;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:279:50: Operator SUB expects 17 bits on the RHS, but RHS's VARREF 'cin' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
279 | { 1'b0, inpb[7:0] } - { 1'b0, inpa[7:0]} - cin;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:284:51: Operator ADD expects 17 bits on the RHS, but RHS's VARREF 'cin' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
284 | rtemp = bAdd ? { 1'b0, inpb } + { 1'b0, inpa} + cin:
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68kAlu.sv:285:40: Operator SUB expects 17 bits on the RHS, but RHS's VARREF 'cin' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit.alu
285 | { 1'b0, inpb } - { 1'b0, inpa} - cin;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:2397:25: Operator AND expects 32 bits on the LHS, but LHS's SEL generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.busControl
2397 | else if( Clks.enPhi2 & bcComplete & ~SRMC_RES)
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:2397:25: Operator AND expects 32 bits on the RHS, but RHS's VARREF 'bcComplete' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.busControl
2397 | else if( Clks.enPhi2 & bcComplete & ~SRMC_RES)
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:2397:9: Logical operator IF expects 1 bit on the If, but If's AND generates 32 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.busControl
2397 | else if( Clks.enPhi2 & bcComplete & ~SRMC_RES)
| ^~
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:2142:8: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's REPLICATE generates 2 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.sequencer
2142 | tvn = { 1'b1, rExcAdrErr};
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1841:22: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's SEL generates 3 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.uaddrDecode
1841 | default: eaDecode = eaBits[5:3];
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1250:10: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's CONST '1'bx' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit
1250 | rxReg = 1'bX;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1255:10: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's CONST '1'bx' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit
1255 | rxReg = 1'bX;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1260:10: Operator ASSIGN expects 4 bits on the Assign RHS, but Assign RHS's CONST '1'bx' generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit
1260 | rxReg = 1'bX;
| ^
%Warning-WIDTH: ../../../../modules/fx68k/fx68k.sv:1504:48: Operator ADD expects 16 bits on the RHS, but RHS's SEL generates 1 bits.
: ... In instance game_test.u_game.u_sub.u_cpu.u_cpu.excUnit
1504 | wire [31:0] auResult = {Dbh + auInpMux[31:16] + aulow[16], aulow[15:0]};
| ^
%Warning-UNDRIVEN: ../../hdl/jtoutrun_game.v:152:13: Signal is not driven: 'sndmap_din'
: ... In instance game_test.u_game
152 | wire [ 7:0] sndmap_din, sndmap_dout;
| ^~~~~~~~~~
%Warning-UNDRIVEN: ../../../../modules/jtframe/hdl/sdram/jtframe_dwnld.v:42:26: Signal is not driven: 'prog_ba'
: ... In instance game_test.u_game.u_sdram.u_dwnld
42 | output reg [ 1:0] prog_ba,
| ^~~~~~~
%Warning-CASEINCOMPLETE: ../../../../modules/jtframe/hdl/cpu/jtframe_68kdma.v:38:9: Case values incompletely covered (example pattern 0x3)
38 | casez( {cpu_BRn, cpu_BGn, cpu_BGACKn} )
| ^~~~~
%Warning-INITIALDLY: ../../../../modules/fx68k/fx68k.sv:1189:11: Non-blocking assignment '<=' in initial/final block
: ... In instance game_test.u_game.u_main.u_cpu
: ... This will be executed as a blocking assignment '='!
1189 | regs68L[i] <= '0;
| ^
%Warning-INITIALDLY: ../../../../modules/fx68k/fx68k.sv:1190:11: Non-blocking assignment '<=' in initial/final block
: ... In instance game_test.u_game.u_main.u_cpu
: ... This will be executed as a blocking assignment '='!
1190 | regs68H[i] <= '0;
| ^
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:743:4: ... Location of nonblocking assignment
743 | Nanod.auClkEn <= !nanoLatch[ NANO_AUCLKEN];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:744:4: ... Location of nonblocking assignment
744 | Nanod.auCntrl <= nanoLatch[ NANO_AUCTRL+2 : NANO_AUCTRL+0];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:746:4: ... Location of nonblocking assignment
746 | Nanod.extDbh <= nanoLatch[ NANO_EXT_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:748:4: ... Location of nonblocking assignment
748 | Nanod.todbin <= nanoLatch[ NANO_TODBIN];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:754:4: ... Location of nonblocking assignment
754 | Nanod.ablAbd <= nanoLatch[ NANO_ABLABD];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:757:4: ... Location of nonblocking assignment
757 | Nanod.dblDbh <= nanoLatch[ NANO_DBLDBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:759:4: ... Location of nonblocking assignment
759 | Nanod.dbl2Atl <= (atlCtrl == 3'b010);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:760:4: ... Location of nonblocking assignment
760 | Nanod.atl2Dbl <= (atlCtrl == 3'b011);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:764:4: ... Location of nonblocking assignment
764 | Nanod.aob2Ab <= (athCtrl == 3'b101);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:766:4: ... Location of nonblocking assignment
766 | Nanod.abh2Ath <= (athCtrl == 3'b001) | (athCtrl == 3'b101);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:768:4: ... Location of nonblocking assignment
768 | Nanod.ath2Dbh <= (athCtrl == 3'b110);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:771:4: ... Location of nonblocking assignment
771 | Nanod.alu2Dbd <= nanoLatch[ NANO_ALU2DBD];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:774:4: ... Location of nonblocking assignment
774 | Nanod.abd2Dcr <= (nanoLatch[ NANO_DCR+1:NANO_DCR] == 2'b11);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:776:4: ... Location of nonblocking assignment
776 | Nanod.dbd2Alue <= (nanoLatch[ NANO_ALUE+2:NANO_ALUE+1] == 2'b10);
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:779:4: ... Location of nonblocking assignment
779 | Nanod.dbd2Alub <= nanoLatch[ NANO_DBD2ALUB];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:783:4: ... Location of nonblocking assignment
783 | Nanod.dobCtrl <= dobCtrl;
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:898:4: ... Location of nonblocking assignment
898 | Nanod.rxl2db <= Nanod.reg2dbl & !dblSpecial & nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Warning-MULTIDRIVEN: ../../../../modules/fx68k/fx68k.sv:293:10: Signal has multiple driving blocks with different clocking: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_sub.u_cpu
../../../../modules/fx68k/fx68k.sv:898:4: ... Location of first driving block
898 | Nanod.rxl2db <= Nanod.reg2dbl & !dblSpecial & nanoLatch[ NANO_RXL_DBL];
| ^~~~~
../../../../modules/fx68k/fx68k.sv:743:4: ... Location of other driving block
743 | Nanod.auClkEn <= !nanoLatch[ NANO_AUCLKEN];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:899:4: ... Location of nonblocking assignment
899 | Nanod.rxl2ab <= Nanod.reg2abl & !ablSpecial & !nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:901:4: ... Location of nonblocking assignment
901 | Nanod.dbl2rxl <= Nanod.dbl2reg & !dblSpecial & nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:902:4: ... Location of nonblocking assignment
902 | Nanod.abl2rxl <= Nanod.abl2reg & !ablSpecial & !nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:904:4: ... Location of nonblocking assignment
904 | Nanod.rxh2dbh <= Nanod.reg2dbh & !dbhSpecial & nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:905:4: ... Location of nonblocking assignment
905 | Nanod.rxh2abh <= Nanod.reg2abh & !abhSpecial & !nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:907:4: ... Location of nonblocking assignment
907 | Nanod.dbh2rxh <= Nanod.dbh2reg & !dbhSpecial & nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:908:4: ... Location of nonblocking assignment
908 | Nanod.abh2rxh <= Nanod.abh2reg & !abhSpecial & !nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:910:4: ... Location of nonblocking assignment
910 | Nanod.dbh2ryh <= Nanod.dbh2reg & !dbhSpecial & !nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:911:4: ... Location of nonblocking assignment
911 | Nanod.abh2ryh <= Nanod.abh2reg & !abhSpecial & nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:913:4: ... Location of nonblocking assignment
913 | Nanod.dbl2ryl <= Nanod.dbl2reg & !dblSpecial & !nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:914:4: ... Location of nonblocking assignment
914 | Nanod.abl2ryl <= Nanod.abl2reg & !ablSpecial & nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:916:4: ... Location of nonblocking assignment
916 | Nanod.ryl2db <= Nanod.reg2dbl & !dblSpecial & !nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:917:4: ... Location of nonblocking assignment
917 | Nanod.ryl2ab <= Nanod.reg2abl & !ablSpecial & nanoLatch[ NANO_RXL_DBL];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:919:4: ... Location of nonblocking assignment
919 | Nanod.ryh2dbh <= Nanod.reg2dbh & !dbhSpecial & !nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:920:4: ... Location of nonblocking assignment
920 | Nanod.ryh2abh <= Nanod.reg2abh & !abhSpecial & nanoLatch[ NANO_RXH_DBH];
| ^~~~~
%Error-BLKANDNBLK: ../../../../modules/fx68k/fx68k.sv:293:10: Unsupported: Blocked and non-blocking assignments to same variable: 'u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:790:9: ... Location of blocking assignment
790 | assign Nanod.updSsw = Nanod.aob2Ab;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:926:4: ... Location of nonblocking assignment
926 | Nanod.isRmc <= Irdecod.isTas & nanoLatch[ NANO_BUSBYTE];
| ^~~~~
%Warning-UNOPTFLAT: ../../hdl/jtoutrun_road.v:58:17: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_video.u_road.rrc'
58 | reg [ 4:0] rrc;
| ^~~
../../hdl/jtoutrun_road.v:58:17: Example path: game_test.u_game.u_video.u_road.rrc
../../hdl/jtoutrun_road.v:147:5: Example path: ALWAYS
../../hdl/jtoutrun_road.v:58:17: Example path: game_test.u_game.u_video.u_road.rrc
%Warning-UNOPTFLAT: ../../../../modules/fx68k/fx68kAlu.sv:460:12: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_main.u_cpu.u_cpu.excUnit.alu.aluCorf.htemp'
: ... In instance game_test.u_game.u_main.u_cpu
460 | reg [8:0] htemp;
| ^~~~~
../../../../modules/fx68k/fx68kAlu.sv:460:12: Example path: game_test.u_game.u_main.u_cpu.u_cpu.excUnit.alu.aluCorf.htemp
../../../../modules/fx68k/fx68kAlu.sv:464:13: Example path: ALWAYS
../../../../modules/fx68k/fx68kAlu.sv:464:7: Example path: game_test.u_game.u_main.u_cpu.u_cpu.excUnit.alu.aluCorf.highC
../../../../modules/fx68k/fx68kAlu.sv:466:2: Example path: ALWAYS
../../../../modules/fx68k/fx68kAlu.sv:460:12: Example path: game_test.u_game.u_main.u_cpu.u_cpu.excUnit.alu.aluCorf.htemp
%Warning-UNOPTFLAT: ../../../../modules/fx68k/fx68k.sv:881:7: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_main.u_cpu.u_cpu.nDecoder.isPcRel'
: ... In instance game_test.u_game.u_main.u_cpu
881 | wire isPcRel = Irdecod.isPcRel & !Nanod.rz;
| ^~~~~~~
../../../../modules/fx68k/fx68k.sv:881:7: Example path: game_test.u_game.u_main.u_cpu.u_cpu.nDecoder.isPcRel
../../../../modules/fx68k/fx68k.sv:887:22: Example path: ASSIGNW
../../../../modules/fx68k/fx68k.sv:293:10: Example path: game_test.u_game.u_main.u_cpu.u_cpu.Nanod
../../../../modules/fx68k/fx68k.sv:881:15: Example path: ASSIGNW
../../../../modules/fx68k/fx68k.sv:881:7: Example path: game_test.u_game.u_main.u_cpu.u_cpu.nDecoder.isPcRel
%Warning-UNOPTFLAT: ../../../../modules/fx68k/fx68k.sv:166:9: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_sub.u_cpu.u_cpu.Clks'
: ... In instance game_test.u_game.u_sub.u_cpu
166 | s_clks Clks;
| ^~~~
../../../../modules/fx68k/fx68k.sv:166:9: Example path: game_test.u_game.u_sub.u_cpu.u_cpu.Clks
../../../../modules/fx68k/fx68k.sv:257:20: Example path: ASSIGNW
../../../../modules/fx68k/fx68k.sv:2482:23: Example path: game_test.u_game.u_sub.u_cpu.u_cpu.__Vcellinp__nanoRom__clk
../../../../modules/fx68k/fx68k.sv:216:4: Example path: ACTIVE
../../../../modules/fx68k/fx68k.sv:216:4: Example path: ASSIGNPRE
../../../../modules/fx68k/fx68k.sv:208:14: Example path: game_test.u_game.u_sub.u_cpu.__Vdly__u_cpu.rBerr
../../../../modules/fx68k/fx68k.sv:214:2: Example path: ALWAYS
../../../../modules/fx68k/fx68k.sv:166:9: Example path: game_test.u_game.u_sub.u_cpu.u_cpu.Clks
../../../../modules/fx68k/fx68k.sv:168:18: Example path: ASSIGNW
../../../../modules/fx68k/fx68k.sv:166:9: Example path: game_test.u_game.u_sub.u_cpu.u_cpu.Clks
%Warning-UNOPTFLAT: ../../../../modules/fx68k/fx68k.sv:295:12: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_main.u_cpu.u_cpu.Irdecod'
: ... In instance game_test.u_game.u_main.u_cpu
295 | s_irdecod Irdecod;
| ^~~~~~~
../../../../modules/fx68k/fx68k.sv:295:12: Example path: game_test.u_game.u_main.u_cpu.u_cpu.Irdecod
../../../../modules/fx68k/fx68k.sv:961:2: Example path: ALWAYS
../../../../modules/fx68k/fx68k.sv:295:12: Example path: game_test.u_game.u_main.u_cpu.u_cpu.Irdecod
%Warning-UNOPTFLAT: ../../../../modules/fx68k/fx68k.sv:293:10: Signal unoptimizable: Feedback to clock or circular logic: 'game_test.u_game.u_main.u_cpu.u_cpu.Nanod'
: ... In instance game_test.u_game.u_main.u_cpu
293 | s_nanod Nanod;
| ^~~~~
../../../../modules/fx68k/fx68k.sv:293:10: Example path: game_test.u_game.u_main.u_cpu.u_cpu.Nanod
../../../../modules/fx68k/fx68k.sv:790:22: Example path: ASSIGNW
../../../../modules/fx68k/fx68k.sv:293:10: Example path: game_test.u_game.u_main.u_cpu.u_cpu.Nanod
%Error: Exiting due to 33 error(s)
The open source M68000 module FX68K does not work on Verilator. The problem seems to be the packed/unpacked structures (plus a couple of combinational optimization loops). The module author does not want to modify it to remove the structures. Commercial simulators and synthesis tools work correctly with his code. The open source simulators Verilator and Icarus verilog don't.
How much would it cost to pay a Verilator developer to add support to this module?
Thank you