ecp5: Add DSP blackboxes
authorDavid Shah <davey1576@gmail.com>
Sun, 21 Oct 2018 18:27:02 +0000 (19:27 +0100)
committerDavid Shah <davey1576@gmail.com>
Sun, 21 Oct 2018 18:27:02 +0000 (19:27 +0100)
Signed-off-by: David Shah <davey1576@gmail.com>
techlibs/ecp5/Makefile.inc
techlibs/ecp5/cells_bb.v [new file with mode: 0644]
techlibs/ecp5/synth_ecp5.cc

index 9b6f061bd3b3acf10aad404cf2a2ffb0b5b7744b..b23d5c70e807a6f8d1081749321f043a7584a774 100644 (file)
@@ -3,6 +3,7 @@ OBJS += techlibs/ecp5/synth_ecp5.o
 
 $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/cells_map.v))
 $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/cells_sim.v))
+$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/cells_bb.v))
 $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/drams_map.v))
 $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/dram.txt))
 $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/brams_map.v))
diff --git a/techlibs/ecp5/cells_bb.v b/techlibs/ecp5/cells_bb.v
new file mode 100644 (file)
index 0000000..7ef02ef
--- /dev/null
@@ -0,0 +1,116 @@
+// ECP5 Blackbox cells
+// FIXME: Create sim models
+
+(* blackbox *)
+module MULT18X18D(
+       input A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17,
+       input B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17,
+       input C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17,
+       input SIGNEDA, SIGNEDB, SOURCEA, SOURCEB,
+       input CLK0, CLK1, CLK2, CLK3,
+       input CE0, CE1, CE2, CE3,
+       input RST0, RST1, RST2, RST3,
+       input SRIA0, SRIA1, SRIA2, SRIA3, SRIA4, SRIA5, SRIA6, SRIA7, SRIA8, SRIA9, SRIA10, SRIA11, SRIA12, SRIA13, SRIA14, SRIA15, SRIA16, SRIA17,
+       input SRIB0, SRIB1, SRIB2, SRIB3, SRIB4, SRIB5, SRIB6, SRIB7, SRIB8, SRIB9, SRIB10, SRIB11, SRIB12, SRIB13, SRIB14, SRIB15, SRIB16, SRIB17,
+       output SROA0, SROA1, SROA2, SROA3, SROA4, SROA5, SROA6, SROA7, SROA8, SROA9, SROA10, SROA11, SROA12, SROA13, SROA14, SROA15, SROA16, SROA17,
+       output SROB0, SROB1, SROB2, SROB3, SROB4, SROB5, SROB6, SROB7, SROB8, SROB9, SROB10, SROB11, SROB12, SROB13, SROB14, SROB15, SROB16, SROB17,
+       output ROA0, ROA1, ROA2, ROA3, ROA4, ROA5, ROA6, ROA7, ROA8, ROA9, ROA10, ROA11, ROA12, ROA13, ROA14, ROA15, ROA16, ROA17,
+       output ROB0, ROB1, ROB2, ROB3, ROB4, ROB5, ROB6, ROB7, ROB8, ROB9, ROB10, ROB11, ROB12, ROB13, ROB14, ROB15, ROB16, ROB17,
+       output ROC0, ROC1, ROC2, ROC3, ROC4, ROC5, ROC6, ROC7, ROC8, ROC9, ROC10, ROC11, ROC12, ROC13, ROC14, ROC15, ROC16, ROC17,
+       output P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35,
+       output SIGNEDP
+);
+       parameter REG_INPUTA_CLK = "NONE";
+       parameter REG_INPUTA_CE = "CE0";
+       parameter REG_INPUTA_RST = "RST0";
+       parameter REG_INPUTB_CLK = "NONE";
+       parameter REG_INPUTB_CE = "CE0";
+       parameter REG_INPUTB_RST = "RST0";
+       parameter REG_INPUTC_CLK = "NONE";
+       parameter REG_INPUTC_CE = "CE0";
+       parameter REG_INPUTC_RST = "RST0";
+       parameter REG_PIPELINE_CLK = "NONE";
+       parameter REG_PIPELINE_CE = "CE0";
+       parameter REG_PIPELINE_RST = "RST0";
+       parameter REG_OUTPUT_CLK = "NONE";
+       parameter REG_OUTPUT_CE = "CE0";
+       parameter REG_OUTPUT_RST = "RST0";
+       parameter [127:0] CLK0_DIV = "ENABLED";
+       parameter [127:0] CLK1_DIV = "ENABLED";
+       parameter [127:0] CLK2_DIV = "ENABLED";
+       parameter [127:0] CLK3_DIV = "ENABLED";
+       parameter HIGHSPEED_CLK = "NONE";
+       parameter [127:0] GSR = "ENABLED";
+       parameter CAS_MATCH_REG = "FALSE";
+       parameter [127:0] SOURCEB_MODE = "B_SHIFT";
+       parameter [127:0] MULT_BYPASS = "DISABLED";
+       parameter [127:0] RESETMODE = "SYNC";
+endmodule
+
+(* blackbox *)
+module ALU54B(
+       input CLK0, CLK1, CLK2, CLK3,
+       input CE0, CE1, CE2, CE3,
+       input RST0, RST1, RST2, RST3,
+       input SIGNEDIA, SIGNEDIB, SIGNEDCIN,
+       input A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35,
+       input B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35,
+       input C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29, C30, C31, C32, C33, C34, C35, C36, C37, C38, C39, C40, C41, C42, C43, C44, C45, C46, C47, C48, C49, C50, C51, C52, C53,
+       input CFB0, CFB1, CFB2, CFB3, CFB4, CFB5, CFB6, CFB7, CFB8, CFB9, CFB10, CFB11, CFB12, CFB13, CFB14, CFB15, CFB16, CFB17, CFB18, CFB19, CFB20, CFB21, CFB22, CFB23, CFB24, CFB25, CFB26, CFB27, CFB28, CFB29, CFB30, CFB31, CFB32, CFB33, CFB34, CFB35, CFB36, CFB37, CFB38, CFB39, CFB40, CFB41, CFB42, CFB43, CFB44, CFB45, CFB46, CFB47, CFB48, CFB49, CFB50, CFB51, CFB52, CFB53,
+       input MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, MA10, MA11, MA12, MA13, MA14, MA15, MA16, MA17, MA18, MA19, MA20, MA21, MA22, MA23, MA24, MA25, MA26, MA27, MA28, MA29, MA30, MA31, MA32, MA33, MA34, MA35,
+       input MB0, MB1, MB2, MB3, MB4, MB5, MB6, MB7, MB8, MB9, MB10, MB11, MB12, MB13, MB14, MB15, MB16, MB17, MB18, MB19, MB20, MB21, MB22, MB23, MB24, MB25, MB26, MB27, MB28, MB29, MB30, MB31, MB32, MB33, MB34, MB35,
+       input CIN0, CIN1, CIN2, CIN3, CIN4, CIN5, CIN6, CIN7, CIN8, CIN9, CIN10, CIN11, CIN12, CIN13, CIN14, CIN15, CIN16, CIN17, CIN18, CIN19, CIN20, CIN21, CIN22, CIN23, CIN24, CIN25, CIN26, CIN27, CIN28, CIN29, CIN30, CIN31, CIN32, CIN33, CIN34, CIN35, CIN36, CIN37, CIN38, CIN39, CIN40, CIN41, CIN42, CIN43, CIN44, CIN45, CIN46, CIN47, CIN48, CIN49, CIN50, CIN51, CIN52, CIN53,
+       input OP0, OP1, OP2, OP3, OP4, OP5, OP6, OP7, OP8, OP9, OP10,
+       output R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31, R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46, R47, R48, R49, R50, R51, R52, R53,
+       output CO0, CO1, CO2, CO3, CO4, CO5, CO6, CO7, CO8, CO9, CO10, CO11, CO12, CO13, CO14, CO15, CO16, CO17, CO18, CO19, CO20, CO21, CO22, CO23, CO24, CO25, CO26, CO27, CO28, CO29, CO30, CO31, CO32, CO33, CO34, CO35, CO36, CO37, CO38, CO39, CO40, CO41, CO42, CO43, CO44, CO45, CO46, CO47, CO48, CO49, CO50, CO51, CO52, CO53,
+       output EQZ, EQZM, EQOM, EQPAT, EQPATB,
+       output OVER, UNDER, OVERUNDER,
+       output SIGNEDR
+);
+       parameter REG_INPUTC0_CLK = "NONE";
+       parameter REG_INPUTC0_CE = "CE0";
+       parameter REG_INPUTC0_RST = "RST0";
+       parameter REG_INPUTC1_CLK = "NONE";
+       parameter REG_INPUTC1_CE = "CE0";
+       parameter REG_INPUTC1_RST = "RST0";
+       parameter REG_OPCODEOP0_0_CLK = "NONE";
+       parameter REG_OPCODEOP0_0_CE = "CE0";
+       parameter REG_OPCODEOP0_0_RST = "RST0";
+       parameter REG_OPCODEOP1_0_CLK = "NONE";
+       parameter REG_OPCODEOP0_1_CLK = "NONE";
+       parameter REG_OPCODEOP0_1_CE = "CE0";
+       parameter REG_OPCODEOP0_1_RST = "RST0";
+       parameter REG_OPCODEIN_0_CLK = "NONE";
+       parameter REG_OPCODEIN_0_CE = "CE0";
+       parameter REG_OPCODEIN_0_RST = "RST0";
+       parameter REG_OPCODEIN_1_CLK = "NONE";
+       parameter REG_OPCODEIN_1_CE = "CE0";
+       parameter REG_OPCODEIN_1_RST = "RST0";
+       parameter REG_OUTPUT0_CLK = "NONE";
+       parameter REG_OUTPUT0_CE = "CE0";
+       parameter REG_OUTPUT0_RST = "RST0";
+       parameter REG_OUTPUT1_CLK = "NONE";
+       parameter REG_OUTPUT1_CE = "CE0";
+       parameter REG_OUTPUT1_RST = "RST0";
+       parameter REG_FLAG_CLK = "NONE";
+       parameter REG_FLAG_CE = "CE0";
+       parameter REG_FLAG_RST = "RST0";
+       parameter [127:0] MCPAT_SOURCE = "STATIC";
+       parameter [127:0] MASKPAT_SOURCE = "STATIC";
+       parameter MASK01 = "0x00000000000000";
+       parameter REG_INPUTCFB_CLK = "NONE";
+       parameter REG_INPUTCFB_CE = "CE0";
+       parameter REG_INPUTCFB_RST = "RST0";
+       parameter [127:0] CLK0_DIV = "ENABLED";
+       parameter [127:0] CLK1_DIV = "ENABLED";
+       parameter [127:0] CLK2_DIV = "ENABLED";
+       parameter [127:0] CLK3_DIV = "ENABLED";
+       parameter MCPAT = "0x00000000000000";
+       parameter MASKPAT = "0x00000000000000";
+       parameter RNDPAT = "0x00000000000000";
+       parameter [127:0] GSR = "ENABLED";
+       parameter [127:0] RESETMODE = "SYNC";
+       parameter MULT9_MODE = "DISABLED";
+       parameter FORCE_ZERO_BARREL_SHIFT = "DISABLED";
+       parameter LEGACY = "DISABLED";
+endmodule
index cb6a4c3d8c2a5f67bd3114f82622c2227ad90ab3..825e131c4bb466c546c54c3405f48876eec789f6 100644 (file)
@@ -203,7 +203,7 @@ struct SynthEcp5Pass : public ScriptPass
        {
                if (check_label("begin"))
                {
-                       run("read_verilog -lib +/ecp5/cells_sim.v");
+                       run("read_verilog -lib +/ecp5/cells_sim.v +/ecp5/cells_bb.v");
                        run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
                }