synth_gatemate: Apply review remarks
authorPatrick Urban <patrick.urban@web.de>
Fri, 24 Sep 2021 14:00:59 +0000 (16:00 +0200)
committerMarcelina Koƛcielnicka <mwk@0x04.net>
Sat, 13 Nov 2021 20:53:25 +0000 (21:53 +0100)
* remove unused techmap models in `map_regs.v`
* replace RAM initilization loops with 320-bit-writes
* add script to test targets in top-level Makefile
* remove `MAXWIDTH` parameter and treat both vector widths individually in `mult_map.v`
* iterate over all modules in `gatemate_bramopt` pass

Makefile
techlibs/gatemate/cells_sim.v
techlibs/gatemate/gatemate_bramopt.cc
techlibs/gatemate/mul_map.v
techlibs/gatemate/reg_map.v
techlibs/gatemate/synth_gatemate.cc

index dce2886837bf0597d3a9c1e91eab3ba045c41c20..a471f331bed25ec2f745d60bfb7a4436d60c4eb2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -814,6 +814,7 @@ test: $(TARGETS) $(EXTRA_TARGETS)
        +cd tests/arch/intel_alm && bash run-test.sh $(SEEDOPT)
        +cd tests/arch/nexus && bash run-test.sh $(SEEDOPT)
        +cd tests/arch/quicklogic && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/gatemate && bash run-test.sh $(SEEDOPT)
        +cd tests/rpc && bash run-test.sh
        +cd tests/memfile && bash run-test.sh
        +cd tests/verilog && bash run-test.sh
index 1f6d9d5efe04a7a55b5d864b91332d519fb295c5..0c9287b8176d379a784d2386cef340fb9d2bcb99 100644 (file)
@@ -294,7 +294,7 @@ module CC_DFF #(
        assign en  = (EN_INV)  ?  ~EN :  EN;\r
        assign sr  = (SR_INV)  ?  ~SR :  SR;\r
 \r
-       initial Q = 1'bX;\r
+       initial Q = 1'b0;\r
 \r
        always @(posedge clk or posedge sr)\r
        begin\r
@@ -323,7 +323,7 @@ module CC_DLT #(
        assign en  = (G_INV) ? ~G : G;\r
        assign sr  = (SR_INV) ? ~SR : SR;\r
 \r
-       initial Q = 1'bX;\r
+       initial Q = 1'b0;\r
 \r
        always @(*)\r
        begin\r
@@ -675,72 +675,70 @@ module CC_BRAM_20K (
                        $finish();\r
                end\r
                // RAM initialization\r
-               for (i=0; i < 320; i=i+1) begin\r
-                       memory[320*0+i]  = INIT_00[i];\r
-                       memory[320*1+i]  = INIT_01[i];\r
-                       memory[320*2+i]  = INIT_02[i];\r
-                       memory[320*3+i]  = INIT_03[i];\r
-                       memory[320*4+i]  = INIT_04[i];\r
-                       memory[320*5+i]  = INIT_05[i];\r
-                       memory[320*6+i]  = INIT_06[i];\r
-                       memory[320*7+i]  = INIT_07[i];\r
-                       memory[320*8+i]  = INIT_08[i];\r
-                       memory[320*9+i]  = INIT_09[i];\r
-                       memory[320*10+i] = INIT_0A[i];\r
-                       memory[320*11+i] = INIT_0B[i];\r
-                       memory[320*12+i] = INIT_0C[i];\r
-                       memory[320*13+i] = INIT_0D[i];\r
-                       memory[320*14+i] = INIT_0E[i];\r
-                       memory[320*15+i] = INIT_0F[i];\r
-                       memory[320*16+i] = INIT_10[i];\r
-                       memory[320*17+i] = INIT_11[i];\r
-                       memory[320*18+i] = INIT_12[i];\r
-                       memory[320*19+i] = INIT_13[i];\r
-                       memory[320*20+i] = INIT_14[i];\r
-                       memory[320*21+i] = INIT_15[i];\r
-                       memory[320*22+i] = INIT_16[i];\r
-                       memory[320*23+i] = INIT_17[i];\r
-                       memory[320*24+i] = INIT_18[i];\r
-                       memory[320*25+i] = INIT_19[i];\r
-                       memory[320*26+i] = INIT_1A[i];\r
-                       memory[320*27+i] = INIT_1B[i];\r
-                       memory[320*28+i] = INIT_1C[i];\r
-                       memory[320*29+i] = INIT_1D[i];\r
-                       memory[320*30+i] = INIT_1E[i];\r
-                       memory[320*31+i] = INIT_1F[i];\r
-                       memory[320*32+i] = INIT_20[i];\r
-                       memory[320*33+i] = INIT_21[i];\r
-                       memory[320*34+i] = INIT_22[i];\r
-                       memory[320*35+i] = INIT_23[i];\r
-                       memory[320*36+i] = INIT_24[i];\r
-                       memory[320*37+i] = INIT_25[i];\r
-                       memory[320*38+i] = INIT_26[i];\r
-                       memory[320*39+i] = INIT_27[i];\r
-                       memory[320*30+i] = INIT_28[i];\r
-                       memory[320*41+i] = INIT_29[i];\r
-                       memory[320*42+i] = INIT_2A[i];\r
-                       memory[320*43+i] = INIT_2B[i];\r
-                       memory[320*44+i] = INIT_2C[i];\r
-                       memory[320*45+i] = INIT_2D[i];\r
-                       memory[320*46+i] = INIT_2E[i];\r
-                       memory[320*47+i] = INIT_2F[i];\r
-                       memory[320*48+i] = INIT_30[i];\r
-                       memory[320*49+i] = INIT_31[i];\r
-                       memory[320*50+i] = INIT_32[i];\r
-                       memory[320*51+i] = INIT_33[i];\r
-                       memory[320*52+i] = INIT_34[i];\r
-                       memory[320*53+i] = INIT_35[i];\r
-                       memory[320*54+i] = INIT_36[i];\r
-                       memory[320*55+i] = INIT_37[i];\r
-                       memory[320*56+i] = INIT_38[i];\r
-                       memory[320*57+i] = INIT_39[i];\r
-                       memory[320*58+i] = INIT_3A[i];\r
-                       memory[320*59+i] = INIT_3B[i];\r
-                       memory[320*60+i] = INIT_3C[i];\r
-                       memory[320*61+i] = INIT_3D[i];\r
-                       memory[320*62+i] = INIT_3E[i];\r
-                       memory[320*63+i] = INIT_3F[i];\r
-               end\r
+               memory[320*0+319:320*0]   = INIT_00;\r
+               memory[320*1+319:320*1]   = INIT_01;\r
+               memory[320*2+319:320*2]   = INIT_02;\r
+               memory[320*3+319:320*3]   = INIT_03;\r
+               memory[320*4+319:320*4]   = INIT_04;\r
+               memory[320*5+319:320*5]   = INIT_05;\r
+               memory[320*6+319:320*6]   = INIT_06;\r
+               memory[320*7+319:320*7]   = INIT_07;\r
+               memory[320*8+319:320*8]   = INIT_08;\r
+               memory[320*9+319:320*9]   = INIT_09;\r
+               memory[320*10+319:320*10] = INIT_0A;\r
+               memory[320*11+319:320*11] = INIT_0B;\r
+               memory[320*12+319:320*12] = INIT_0C;\r
+               memory[320*13+319:320*13] = INIT_0D;\r
+               memory[320*14+319:320*14] = INIT_0E;\r
+               memory[320*15+319:320*15] = INIT_0F;\r
+               memory[320*16+319:320*16] = INIT_10;\r
+               memory[320*17+319:320*17] = INIT_11;\r
+               memory[320*18+319:320*18] = INIT_12;\r
+               memory[320*19+319:320*19] = INIT_13;\r
+               memory[320*20+319:320*20] = INIT_14;\r
+               memory[320*21+319:320*21] = INIT_15;\r
+               memory[320*22+319:320*22] = INIT_16;\r
+               memory[320*23+319:320*23] = INIT_17;\r
+               memory[320*24+319:320*24] = INIT_18;\r
+               memory[320*25+319:320*25] = INIT_19;\r
+               memory[320*26+319:320*26] = INIT_1A;\r
+               memory[320*27+319:320*27] = INIT_1B;\r
+               memory[320*28+319:320*28] = INIT_1C;\r
+               memory[320*29+319:320*29] = INIT_1D;\r
+               memory[320*30+319:320*30] = INIT_1E;\r
+               memory[320*31+319:320*31] = INIT_1F;\r
+               memory[320*32+319:320*32] = INIT_20;\r
+               memory[320*33+319:320*33] = INIT_21;\r
+               memory[320*34+319:320*34] = INIT_22;\r
+               memory[320*35+319:320*35] = INIT_23;\r
+               memory[320*36+319:320*36] = INIT_24;\r
+               memory[320*37+319:320*37] = INIT_25;\r
+               memory[320*38+319:320*38] = INIT_26;\r
+               memory[320*39+319:320*39] = INIT_27;\r
+               memory[320*40+319:320*40] = INIT_28;\r
+               memory[320*41+319:320*41] = INIT_29;\r
+               memory[320*42+319:320*42] = INIT_2A;\r
+               memory[320*43+319:320*43] = INIT_2B;\r
+               memory[320*44+319:320*44] = INIT_2C;\r
+               memory[320*45+319:320*45] = INIT_2D;\r
+               memory[320*46+319:320*46] = INIT_2E;\r
+               memory[320*47+319:320*47] = INIT_2F;\r
+               memory[320*48+319:320*48] = INIT_30;\r
+               memory[320*49+319:320*49] = INIT_31;\r
+               memory[320*50+319:320*50] = INIT_32;\r
+               memory[320*51+319:320*51] = INIT_33;\r
+               memory[320*52+319:320*52] = INIT_34;\r
+               memory[320*53+319:320*53] = INIT_35;\r
+               memory[320*54+319:320*54] = INIT_36;\r
+               memory[320*55+319:320*55] = INIT_37;\r
+               memory[320*56+319:320*56] = INIT_38;\r
+               memory[320*57+319:320*57] = INIT_39;\r
+               memory[320*58+319:320*58] = INIT_3A;\r
+               memory[320*59+319:320*59] = INIT_3B;\r
+               memory[320*60+319:320*60] = INIT_3C;\r
+               memory[320*61+319:320*61] = INIT_3D;\r
+               memory[320*62+319:320*62] = INIT_3E;\r
+               memory[320*63+319:320*63] = INIT_3F;\r
        end\r
 \r
        // Signal inversion\r
@@ -1163,136 +1161,134 @@ module CC_BRAM_40K (
                        $finish();\r
                end\r
                // RAM initialization\r
-               for (i=0; i < 320; i=i+1) begin\r
-                       memory[320*0+i]   = INIT_00[i];\r
-                       memory[320*1+i]   = INIT_01[i];\r
-                       memory[320*2+i]   = INIT_02[i];\r
-                       memory[320*3+i]   = INIT_03[i];\r
-                       memory[320*4+i]   = INIT_04[i];\r
-                       memory[320*5+i]   = INIT_05[i];\r
-                       memory[320*6+i]   = INIT_06[i];\r
-                       memory[320*7+i]   = INIT_07[i];\r
-                       memory[320*8+i]   = INIT_08[i];\r
-                       memory[320*9+i]   = INIT_09[i];\r
-                       memory[320*10+i]  = INIT_0A[i];\r
-                       memory[320*11+i]  = INIT_0B[i];\r
-                       memory[320*12+i]  = INIT_0C[i];\r
-                       memory[320*13+i]  = INIT_0D[i];\r
-                       memory[320*14+i]  = INIT_0E[i];\r
-                       memory[320*15+i]  = INIT_0F[i];\r
-                       memory[320*16+i]  = INIT_10[i];\r
-                       memory[320*17+i]  = INIT_11[i];\r
-                       memory[320*18+i]  = INIT_12[i];\r
-                       memory[320*19+i]  = INIT_13[i];\r
-                       memory[320*20+i]  = INIT_14[i];\r
-                       memory[320*21+i]  = INIT_15[i];\r
-                       memory[320*22+i]  = INIT_16[i];\r
-                       memory[320*23+i]  = INIT_17[i];\r
-                       memory[320*24+i]  = INIT_18[i];\r
-                       memory[320*25+i]  = INIT_19[i];\r
-                       memory[320*26+i]  = INIT_1A[i];\r
-                       memory[320*27+i]  = INIT_1B[i];\r
-                       memory[320*28+i]  = INIT_1C[i];\r
-                       memory[320*29+i]  = INIT_1D[i];\r
-                       memory[320*30+i]  = INIT_1E[i];\r
-                       memory[320*31+i]  = INIT_1F[i];\r
-                       memory[320*32+i]  = INIT_20[i];\r
-                       memory[320*33+i]  = INIT_21[i];\r
-                       memory[320*34+i]  = INIT_22[i];\r
-                       memory[320*35+i]  = INIT_23[i];\r
-                       memory[320*36+i]  = INIT_24[i];\r
-                       memory[320*37+i]  = INIT_25[i];\r
-                       memory[320*38+i]  = INIT_26[i];\r
-                       memory[320*39+i]  = INIT_27[i];\r
-                       memory[320*30+i]  = INIT_28[i];\r
-                       memory[320*41+i]  = INIT_29[i];\r
-                       memory[320*42+i]  = INIT_2A[i];\r
-                       memory[320*43+i]  = INIT_2B[i];\r
-                       memory[320*44+i]  = INIT_2C[i];\r
-                       memory[320*45+i]  = INIT_2D[i];\r
-                       memory[320*46+i]  = INIT_2E[i];\r
-                       memory[320*47+i]  = INIT_2F[i];\r
-                       memory[320*48+i]  = INIT_30[i];\r
-                       memory[320*49+i]  = INIT_31[i];\r
-                       memory[320*50+i]  = INIT_32[i];\r
-                       memory[320*51+i]  = INIT_33[i];\r
-                       memory[320*52+i]  = INIT_34[i];\r
-                       memory[320*53+i]  = INIT_35[i];\r
-                       memory[320*54+i]  = INIT_36[i];\r
-                       memory[320*55+i]  = INIT_37[i];\r
-                       memory[320*56+i]  = INIT_38[i];\r
-                       memory[320*57+i]  = INIT_39[i];\r
-                       memory[320*58+i]  = INIT_3A[i];\r
-                       memory[320*59+i]  = INIT_3B[i];\r
-                       memory[320*60+i]  = INIT_3C[i];\r
-                       memory[320*61+i]  = INIT_3D[i];\r
-                       memory[320*62+i]  = INIT_3E[i];\r
-                       memory[320*63+i]  = INIT_3F[i];\r
-                       memory[320*64+i]  = INIT_40[i];\r
-                       memory[320*65+i]  = INIT_41[i];\r
-                       memory[320*66+i]  = INIT_42[i];\r
-                       memory[320*67+i]  = INIT_43[i];\r
-                       memory[320*68+i]  = INIT_44[i];\r
-                       memory[320*69+i]  = INIT_45[i];\r
-                       memory[320*70+i]  = INIT_46[i];\r
-                       memory[320*71+i]  = INIT_47[i];\r
-                       memory[320*72+i]  = INIT_48[i];\r
-                       memory[320*73+i]  = INIT_49[i];\r
-                       memory[320*74+i]  = INIT_4A[i];\r
-                       memory[320*75+i]  = INIT_4B[i];\r
-                       memory[320*76+i]  = INIT_4C[i];\r
-                       memory[320*77+i]  = INIT_4D[i];\r
-                       memory[320*78+i]  = INIT_4E[i];\r
-                       memory[320*79+i]  = INIT_4F[i];\r
-                       memory[320*80+i]  = INIT_50[i];\r
-                       memory[320*81+i]  = INIT_51[i];\r
-                       memory[320*82+i]  = INIT_52[i];\r
-                       memory[320*83+i]  = INIT_53[i];\r
-                       memory[320*84+i]  = INIT_54[i];\r
-                       memory[320*85+i]  = INIT_55[i];\r
-                       memory[320*86+i]  = INIT_56[i];\r
-                       memory[320*87+i]  = INIT_57[i];\r
-                       memory[320*88+i]  = INIT_58[i];\r
-                       memory[320*89+i]  = INIT_59[i];\r
-                       memory[320*90+i]  = INIT_5A[i];\r
-                       memory[320*91+i]  = INIT_5B[i];\r
-                       memory[320*92+i]  = INIT_5C[i];\r
-                       memory[320*93+i]  = INIT_5D[i];\r
-                       memory[320*94+i]  = INIT_5E[i];\r
-                       memory[320*95+i]  = INIT_5F[i];\r
-                       memory[320*96+i]  = INIT_60[i];\r
-                       memory[320*97+i]  = INIT_61[i];\r
-                       memory[320*98+i]  = INIT_62[i];\r
-                       memory[320*99+i]  = INIT_63[i];\r
-                       memory[320*100+i] = INIT_64[i];\r
-                       memory[320*101+i] = INIT_65[i];\r
-                       memory[320*102+i] = INIT_66[i];\r
-                       memory[320*103+i] = INIT_67[i];\r
-                       memory[320*104+i] = INIT_68[i];\r
-                       memory[320*105+i] = INIT_69[i];\r
-                       memory[320*106+i] = INIT_6A[i];\r
-                       memory[320*107+i] = INIT_6B[i];\r
-                       memory[320*108+i] = INIT_6C[i];\r
-                       memory[320*109+i] = INIT_6D[i];\r
-                       memory[320*110+i] = INIT_6E[i];\r
-                       memory[320*111+i] = INIT_6F[i];\r
-                       memory[320*112+i] = INIT_70[i];\r
-                       memory[320*113+i] = INIT_71[i];\r
-                       memory[320*114+i] = INIT_72[i];\r
-                       memory[320*115+i] = INIT_73[i];\r
-                       memory[320*116+i] = INIT_74[i];\r
-                       memory[320*117+i] = INIT_75[i];\r
-                       memory[320*118+i] = INIT_76[i];\r
-                       memory[320*119+i] = INIT_77[i];\r
-                       memory[320*120+i] = INIT_78[i];\r
-                       memory[320*121+i] = INIT_79[i];\r
-                       memory[320*122+i] = INIT_7A[i];\r
-                       memory[320*123+i] = INIT_7B[i];\r
-                       memory[320*124+i] = INIT_7C[i];\r
-                       memory[320*125+i] = INIT_7D[i];\r
-                       memory[320*126+i] = INIT_7E[i];\r
-                       memory[320*127+i] = INIT_7F[i];\r
-               end\r
+               memory[320*0+319:320*0]     = INIT_00;\r
+               memory[320*1+319:320*1]     = INIT_01;\r
+               memory[320*2+319:320*2]     = INIT_02;\r
+               memory[320*3+319:320*3]     = INIT_03;\r
+               memory[320*4+319:320*4]     = INIT_04;\r
+               memory[320*5+319:320*5]     = INIT_05;\r
+               memory[320*6+319:320*6]     = INIT_06;\r
+               memory[320*7+319:320*7]     = INIT_07;\r
+               memory[320*8+319:320*8]     = INIT_08;\r
+               memory[320*9+319:320*9]     = INIT_09;\r
+               memory[320*10+319:320*10]   = INIT_0A;\r
+               memory[320*11+319:320*11]   = INIT_0B;\r
+               memory[320*12+319:320*12]   = INIT_0C;\r
+               memory[320*13+319:320*13]   = INIT_0D;\r
+               memory[320*14+319:320*14]   = INIT_0E;\r
+               memory[320*15+319:320*15]   = INIT_0F;\r
+               memory[320*16+319:320*16]   = INIT_10;\r
+               memory[320*17+319:320*17]   = INIT_11;\r
+               memory[320*18+319:320*18]   = INIT_12;\r
+               memory[320*19+319:320*19]   = INIT_13;\r
+               memory[320*20+319:320*20]   = INIT_14;\r
+               memory[320*21+319:320*21]   = INIT_15;\r
+               memory[320*22+319:320*22]   = INIT_16;\r
+               memory[320*23+319:320*23]   = INIT_17;\r
+               memory[320*24+319:320*24]   = INIT_18;\r
+               memory[320*25+319:320*25]   = INIT_19;\r
+               memory[320*26+319:320*26]   = INIT_1A;\r
+               memory[320*27+319:320*27]   = INIT_1B;\r
+               memory[320*28+319:320*28]   = INIT_1C;\r
+               memory[320*29+319:320*29]   = INIT_1D;\r
+               memory[320*30+319:320*30]   = INIT_1E;\r
+               memory[320*31+319:320*31]   = INIT_1F;\r
+               memory[320*32+319:320*32]   = INIT_20;\r
+               memory[320*33+319:320*33]   = INIT_21;\r
+               memory[320*34+319:320*34]   = INIT_22;\r
+               memory[320*35+319:320*35]   = INIT_23;\r
+               memory[320*36+319:320*36]   = INIT_24;\r
+               memory[320*37+319:320*37]   = INIT_25;\r
+               memory[320*38+319:320*38]   = INIT_26;\r
+               memory[320*39+319:320*39]   = INIT_27;\r
+               memory[320*40+319:320*40]   = INIT_28;\r
+               memory[320*41+319:320*41]   = INIT_29;\r
+               memory[320*42+319:320*42]   = INIT_2A;\r
+               memory[320*43+319:320*43]   = INIT_2B;\r
+               memory[320*44+319:320*44]   = INIT_2C;\r
+               memory[320*45+319:320*45]   = INIT_2D;\r
+               memory[320*46+319:320*46]   = INIT_2E;\r
+               memory[320*47+319:320*47]   = INIT_2F;\r
+               memory[320*48+319:320*48]   = INIT_30;\r
+               memory[320*49+319:320*49]   = INIT_31;\r
+               memory[320*50+319:320*50]   = INIT_32;\r
+               memory[320*51+319:320*51]   = INIT_33;\r
+               memory[320*52+319:320*52]   = INIT_34;\r
+               memory[320*53+319:320*53]   = INIT_35;\r
+               memory[320*54+319:320*54]   = INIT_36;\r
+               memory[320*55+319:320*55]   = INIT_37;\r
+               memory[320*56+319:320*56]   = INIT_38;\r
+               memory[320*57+319:320*57]   = INIT_39;\r
+               memory[320*58+319:320*58]   = INIT_3A;\r
+               memory[320*59+319:320*59]   = INIT_3B;\r
+               memory[320*60+319:320*60]   = INIT_3C;\r
+               memory[320*61+319:320*61]   = INIT_3D;\r
+               memory[320*62+319:320*62]   = INIT_3E;\r
+               memory[320*63+319:320*63]   = INIT_3F;\r
+               memory[320*64+319:320*64]   = INIT_40;\r
+               memory[320*65+319:320*65]   = INIT_41;\r
+               memory[320*66+319:320*66]   = INIT_42;\r
+               memory[320*67+319:320*67]   = INIT_43;\r
+               memory[320*68+319:320*68]   = INIT_44;\r
+               memory[320*69+319:320*69]   = INIT_45;\r
+               memory[320*70+319:320*70]   = INIT_46;\r
+               memory[320*71+319:320*71]   = INIT_47;\r
+               memory[320*72+319:320*72]   = INIT_48;\r
+               memory[320*73+319:320*73]   = INIT_49;\r
+               memory[320*74+319:320*74]   = INIT_4A;\r
+               memory[320*75+319:320*75]   = INIT_4B;\r
+               memory[320*76+319:320*76]   = INIT_4C;\r
+               memory[320*77+319:320*77]   = INIT_4D;\r
+               memory[320*78+319:320*78]   = INIT_4E;\r
+               memory[320*79+319:320*79]   = INIT_4F;\r
+               memory[320*80+319:320*80]   = INIT_50;\r
+               memory[320*81+319:320*81]   = INIT_51;\r
+               memory[320*82+319:320*82]   = INIT_52;\r
+               memory[320*83+319:320*83]   = INIT_53;\r
+               memory[320*84+319:320*84]   = INIT_54;\r
+               memory[320*85+319:320*85]   = INIT_55;\r
+               memory[320*86+319:320*86]   = INIT_56;\r
+               memory[320*87+319:320*87]   = INIT_57;\r
+               memory[320*88+319:320*88]   = INIT_58;\r
+               memory[320*89+319:320*89]   = INIT_59;\r
+               memory[320*90+319:320*90]   = INIT_5A;\r
+               memory[320*91+319:320*91]   = INIT_5B;\r
+               memory[320*92+319:320*92]   = INIT_5C;\r
+               memory[320*93+319:320*93]   = INIT_5D;\r
+               memory[320*94+319:320*94]   = INIT_5E;\r
+               memory[320*95+319:320*95]   = INIT_5F;\r
+               memory[320*96+319:320*96]   = INIT_60;\r
+               memory[320*97+319:320*97]   = INIT_61;\r
+               memory[320*98+319:320*98]   = INIT_62;\r
+               memory[320*99+319:320*99]   = INIT_63;\r
+               memory[320*100+319:320*100] = INIT_64;\r
+               memory[320*101+319:320*101] = INIT_65;\r
+               memory[320*102+319:320*102] = INIT_66;\r
+               memory[320*103+319:320*103] = INIT_67;\r
+               memory[320*104+319:320*104] = INIT_68;\r
+               memory[320*105+319:320*105] = INIT_69;\r
+               memory[320*106+319:320*106] = INIT_6A;\r
+               memory[320*107+319:320*107] = INIT_6B;\r
+               memory[320*108+319:320*108] = INIT_6C;\r
+               memory[320*109+319:320*109] = INIT_6D;\r
+               memory[320*110+319:320*110] = INIT_6E;\r
+               memory[320*111+319:320*111] = INIT_6F;\r
+               memory[320*112+319:320*112] = INIT_70;\r
+               memory[320*113+319:320*113] = INIT_71;\r
+               memory[320*114+319:320*114] = INIT_72;\r
+               memory[320*115+319:320*115] = INIT_73;\r
+               memory[320*116+319:320*116] = INIT_74;\r
+               memory[320*117+319:320*117] = INIT_75;\r
+               memory[320*118+319:320*118] = INIT_76;\r
+               memory[320*119+319:320*119] = INIT_77;\r
+               memory[320*120+319:320*120] = INIT_78;\r
+               memory[320*121+319:320*121] = INIT_79;\r
+               memory[320*122+319:320*122] = INIT_7A;\r
+               memory[320*123+319:320*123] = INIT_7B;\r
+               memory[320*124+319:320*124] = INIT_7C;\r
+               memory[320*125+319:320*125] = INIT_7D;\r
+               memory[320*126+319:320*126] = INIT_7E;\r
+               memory[320*127+319:320*127] = INIT_7F;\r
        end\r
 \r
        // Signal inversion\r
index 9454f471bd4fbe6a41d7adf617b66b9428ef14f9..bd16ba4c91a8350adba1b50d9e9722a104d8263c 100644 (file)
@@ -134,15 +134,11 @@ struct GateMateBramOptPass : public Pass {
                }
                extra_args(args, argidx, design);
 
-               Module *module = design->top_module();
-
-               if (module == nullptr)
+               for (auto module : design->selected_modules())
                {
-                       log_cmd_error("No top module found.\n");
-               }
-
-               if (!noglwren) {
-                       proc_glwren(module);
+                       if (!noglwren) {
+                               proc_glwren(module);
+                       }
                }
        }
 } GateMateBramOptPass;
index 123a1e6314f4777f03ce5c5a5a16223adeeff266..026509c7576eadcd960532e9ec72cc0aca599708 100644 (file)
@@ -36,27 +36,28 @@ module \$__MULMXN (A, B, Y);
        (* force_downto *)
        output [Y_WIDTH-1:0] Y;
 
-       localparam MAXWIDTH = `MAX(A_WIDTH, B_WIDTH) + ((A_SIGNED || B_SIGNED) ? 0 : 1);
+       localparam A_MAXWIDTH = A_WIDTH + (A_SIGNED ? 0 : 1);
+       localparam B_MAXWIDTH = B_WIDTH + (B_SIGNED ? 0 : 1);
 
        generate
                if (A_SIGNED) begin: blkA
-                       wire signed [MAXWIDTH-1:0] Aext = $signed(A);
+                       wire signed [A_MAXWIDTH-1:0] Aext = $signed(A);
                end
                else begin: blkA
-                       wire [MAXWIDTH-1:0] Aext = A;
+                       wire [A_MAXWIDTH-1:0] Aext = A;
                end
                if (B_SIGNED) begin: blkB
-                       wire signed [MAXWIDTH-1:0] Bext = $signed(B);
+                       wire signed [B_MAXWIDTH-1:0] Bext = $signed(B);
                end
                else begin: blkB
-                       wire [MAXWIDTH-1:0] Bext = B;
+                       wire [B_MAXWIDTH-1:0] Bext = B;
                end
 
                if (A_WIDTH >= B_WIDTH) begin
                        CC_MULT #(
-                               .A_WIDTH(MAXWIDTH),
-                               .B_WIDTH(MAXWIDTH),
-                               .P_WIDTH(`MIN(Y_WIDTH,MAXWIDTH+MAXWIDTH)),
+                               .A_WIDTH(A_MAXWIDTH),
+                               .B_WIDTH(B_MAXWIDTH),
+                               .P_WIDTH(Y_WIDTH),
                        ) _TECHMAP_REPLACE_ (
                                .A(blkA.Aext),
                                .B(blkB.Bext),
@@ -65,9 +66,9 @@ module \$__MULMXN (A, B, Y);
                end
                else begin // swap A,B
                        CC_MULT #(
-                               .A_WIDTH(MAXWIDTH),
-                               .B_WIDTH(MAXWIDTH),
-                               .P_WIDTH(`MIN(Y_WIDTH,MAXWIDTH+MAXWIDTH)),
+                               .A_WIDTH(A_MAXWIDTH),
+                               .B_WIDTH(B_MAXWIDTH),
+                               .P_WIDTH(Y_WIDTH),
                        ) _TECHMAP_REPLACE_ (
                                .A(blkB.Bext),
                                .B(blkA.Aext),
index 5075adf03c4358bab8a66f736cd5eb60992e8e5e..8dc4f672f68d6b5318f8a88dc12de11c070013da 100644 (file)
  *\r
  */\r
 \r
-(* techmap_celltype = "$_DFF_[NP]_" *)\r
-module \$_DFF_x_ (input D, C, output Q);\r
-\r
-       parameter _TECHMAP_CELLTYPE_ = "";\r
-\r
-       CC_DFF #(\r
-               .CLK_INV((_TECHMAP_CELLTYPE_[15:8] == "N")),\r
-               .EN_INV(1'b0),\r
-               .SR_INV(1'b0),\r
-               .SR_VAL(1'b0)\r
-       ) _TECHMAP_REPLACE_ (.D(D), .EN(1'b1), .CLK(C), .SR(1'b0), .Q(Q));\r
-\r
-       wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;\r
-\r
-endmodule\r
-\r
-(* techmap_celltype = "$_DFF_[NP][NP][01]_" *)\r
-module \$_DFF_xxx_ (input D, C, R, output Q);\r
-\r
-       parameter _TECHMAP_CELLTYPE_ = "";\r
-\r
-       CC_DFF #(\r
-               .CLK_INV(_TECHMAP_CELLTYPE_[31:24] == "N"),\r
-               .EN_INV(1'b0),\r
-               .SR_INV(_TECHMAP_CELLTYPE_[23:16] == "N"),\r
-               .SR_VAL(_TECHMAP_CELLTYPE_[15:8] == "1")\r
-       ) _TECHMAP_REPLACE_ (.D(D), .EN(1'b1), .CLK(C), .SR(R), .Q(Q));\r
-\r
-       wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;\r
-\r
-endmodule\r
-\r
-(* techmap_celltype = "$_DFFE_[NP][NP]_" *)\r
-module \$_DFFE_xx_ (input D, C, E, output Q);\r
-\r
-       parameter _TECHMAP_CELLTYPE_ = "";\r
-\r
-       CC_DFF #(\r
-               .CLK_INV(_TECHMAP_CELLTYPE_[23:16] == "N"),\r
-               .EN_INV(_TECHMAP_CELLTYPE_[15:8] == "N"),\r
-               .SR_INV(1'b0),\r
-               .SR_VAL(1'b0)\r
-       ) _TECHMAP_REPLACE_ (.D(D), .EN(E), .CLK(C), .SR(1'b0), .Q(Q));\r
-\r
-       wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;\r
-\r
-endmodule\r
-\r
 (* techmap_celltype = "$_DFFE_[NP][NP][01][NP]_" *)\r
 module \$_DFFE_xxxx_ (input D, C, R, E, output Q);\r
 \r
@@ -81,19 +33,6 @@ module \$_DFFE_xxxx_ (input D, C, R, E, output Q);
 \r
 endmodule\r
 \r
-(* techmap_celltype = "$_DLATCH_[NP]_" *)\r
-module \$_DLATCH_x_ (input E, D, output Q);\r
-\r
-       parameter _TECHMAP_CELLTYPE_ = "";\r
-\r
-       CC_DLT #(\r
-               .G_INV(_TECHMAP_CELLTYPE_[15:8] == "N"),\r
-               .SR_INV(1'b0),\r
-               .SR_VAL(1'b0)\r
-       ) _TECHMAP_REPLACE_ (.D(D), .G(E), .SR(1'b0), .Q(Q));\r
-\r
-endmodule\r
-\r
 (* techmap_celltype = "$_DLATCH_[NP][NP][01]_" *)\r
 module \$_DLATCH_xxx_ (input E, R, D, output Q);\r
 \r
index b570e1e2a317d384ded71becf810d85779199df7..27a2b5bfa885a4e63d92beef49aa8330bca6b330 100644 (file)
@@ -305,7 +305,7 @@ struct SynthGateMatePass : public ScriptPass
                if (check_label("map_regs"))\r
                {\r
                        run("opt_clean");\r
-                       run("dfflegalize -cell $_DFFE_????_ x -cell $_DLATCH_???_ x");\r
+                       run("dfflegalize -cell $_DFFE_????_ 0 -cell $_DLATCH_???_ 0");\r
                        run("techmap -map +/gatemate/reg_map.v");\r
                        run("opt_expr -mux_undef");\r
                        run("simplemap");\r