mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-24 01:25:33 +00:00
Merge https://github.com/YosysHQ/yosys into bram_xilinx
This commit is contained in:
commit
ab6ac8327f
43 changed files with 2106 additions and 1051 deletions
|
@ -1,12 +1,12 @@
|
|||
// Diamond flip-flops
|
||||
module FD1P3AX(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(0), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3AY(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(0), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3AX(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3AY(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3BX(input PD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3DX(input CD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3IX(input CD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1P3JX(input PD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3AX(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(0), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3AY(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(0), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3AX(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3AY(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3BX(input PD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3DX(input CD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .DI(D), .Q(Q)); endmodule
|
||||
module FD1S3IX(input CD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .DI(D), .Q(Q)); endmodule
|
||||
|
|
|
@ -1,133 +1,282 @@
|
|||
`default_nettype none
|
||||
//All DFF* have INIT, but the hardware is always initialised to the reset
|
||||
//value regardless. The parameter is ignored.
|
||||
|
||||
// DFFN D Flip-Flop with Negative-Edge Clock
|
||||
module \$_DFF_N_ (input D, C, output Q); DFFN _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C)); endmodule
|
||||
// DFF D Flip-Flop
|
||||
module \$_DFF_P_ (input D, C, output Q); DFF _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C)); endmodule
|
||||
// DFFN D Flip-Flop with Negative-Edge Clock
|
||||
module \$_DFF_N_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(1'b0));
|
||||
else
|
||||
DFFN _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFE D Flip-Flop with Clock Enable
|
||||
module \$_DFFE_PP_ (input D, C, E, output Q); DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E)); endmodule
|
||||
module \$_DFFE_PN_ (input D, C, E, output Q); DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E)); endmodule
|
||||
// DFF D Flip-Flop
|
||||
module \$_DFF_P_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(1'b0));
|
||||
else
|
||||
DFF _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFNE D Flip-Flop with Negative-Edge Clock and Clock Enable
|
||||
module \$_DFFE_NP_ (input D, C, E, output Q); DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E)); endmodule
|
||||
module \$_DFFE_NN_ (input D, C, E, output Q); DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E)); endmodule
|
||||
// DFFE D Flip-Flop with Clock Enable
|
||||
module \$_DFFE_PP_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, E, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E), .SET(1'b0));
|
||||
else
|
||||
DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFR D Flip-Flop with Synchronous Reset
|
||||
module \$__DFFS_PN0_ (input D, C, R, output Q); DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R)); endmodule
|
||||
module \$__DFFS_PP0_ (input D, C, R, output Q); DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); endmodule
|
||||
module \$_DFFE_PN_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, E, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E), .SET(1'b0));
|
||||
else
|
||||
DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFNR D Flip-Flop with Negative-Edge Clock and Synchronous Reset
|
||||
module \$__DFFS_NN0_ (input D, C, R, output Q); DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R)); endmodule
|
||||
module \$__DFFS_NP0_ (input D, C, R, output Q); DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); endmodule
|
||||
// DFFNE D Flip-Flop with Negative-Edge Clock and Clock Enable
|
||||
module \$_DFFE_NP_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, E, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E), .SET(1'b0));
|
||||
else
|
||||
DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFRE D Flip-Flop with Clock Enable and Synchronous Reset
|
||||
module \$__DFFSE_PN0 (input D, C, R, E, output Q); DFFRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R), .CE(E)); endmodule
|
||||
module \$__DFFSE_PP0 (input D, C, R, E, output Q); DFFRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E)); endmodule
|
||||
module \$_DFFE_NN_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, E, output Q);
|
||||
generate
|
||||
if (_TECHMAP_WIREINIT_Q_ === 1'b1)
|
||||
DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E), .SET(1'b0));
|
||||
else
|
||||
DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(!E));
|
||||
endgenerate
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = 1;
|
||||
endmodule
|
||||
|
||||
// DFFNRE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Synchronous Reset
|
||||
module \$__DFFNSE_PN0 (input D, C, R, E, output Q); DFFNRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R), .CE(E)); endmodule
|
||||
module \$__DFFNSE_PP0 (input D, C, R, E, output Q); DFFNRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E)); endmodule
|
||||
// DFFR D Flip-Flop with Synchronous Reset
|
||||
module \$__DFFS_PN0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFS D Flip-Flop with Synchronous Set
|
||||
module \$__DFFS_PN1_ (input D, C, R, output Q); DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R)); endmodule
|
||||
module \$__DFFS_PP1_ (input D, C, R, output Q); DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R)); endmodule
|
||||
module \$__DFFS_PP0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFNS D Flip-Flop with Negative-Edge Clock and Synchronous Set
|
||||
module \$__DFFS_NN1_ (input D, C, R, output Q); DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R)); endmodule
|
||||
module \$__DFFS_NP1_ (input D, C, R, output Q); DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R)); endmodule
|
||||
// DFFNR D Flip-Flop with Negative-Edge Clock and Synchronous Reset
|
||||
module \$__DFFS_NN0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$__DFFS_NP0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFSE D Flip-Flop with Clock Enable and Synchronous Set
|
||||
module \$__DFFSE_PN1 (input D, C, R, E, output Q); DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R), .CE(E)); endmodule
|
||||
module \$__DFFSE_PP1 (input D, C, R, E, output Q); DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E)); endmodule
|
||||
// DFFRE D Flip-Flop with Clock Enable and Synchronous Reset
|
||||
module \$__DFFSE_PN0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$__DFFSE_PP0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFNSE D Flip-Flop with Negative-Edge Clock,Clock Enable,and Synchronous Set
|
||||
module \$__DFFSE_NN1 (input D, C, R, E, output Q); DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R), .CE(E)); endmodule
|
||||
module \$__DFFSE_NP1 (input D, C, R, E, output Q); DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E)); endmodule
|
||||
// DFFNRE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Synchronous Reset
|
||||
module \$__DFFSE_NN0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$__DFFSE_NP0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFP D Flip-Flop with Asynchronous Preset
|
||||
module \$_DFF_PP1_ (input D, C, R, output Q); DFFP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R)); endmodule
|
||||
module \$_DFF_PN1_ (input D, C, R, output Q); DFFP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R)); endmodule
|
||||
// DFFS D Flip-Flop with Synchronous Set
|
||||
module \$__DFFS_PN1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFS_PP1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFNP D Flip-Flop with Negative-Edge Clock and Asynchronous Preset
|
||||
module \$_DFF_NP1_ (input D, C, R, output Q); DFFNP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R)); endmodule
|
||||
module \$_DFF_NN1_ (input D, C, R, output Q); DFFNP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R)); endmodule
|
||||
// DFFNS D Flip-Flop with Negative-Edge Clock and Synchronous Set
|
||||
module \$__DFFS_NN1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFS_NP1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFC D Flip-Flop with Asynchronous Clear
|
||||
module \$_DFF_PP0_ (input D, C, R, output Q); DFFC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R)); endmodule
|
||||
module \$_DFF_PN0_ (input D, C, R, output Q); DFFC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R)); endmodule
|
||||
// DFFSE D Flip-Flop with Clock Enable and Synchronous Set
|
||||
module \$__DFFSE_PN1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFSE_PP1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFNC D Flip-Flop with Negative-Edge Clock and Asynchronous Clear
|
||||
module \$_DFF_NP0_ (input D, C, R, output Q); DFFNC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R)); endmodule
|
||||
module \$_DFF_NN0_ (input D, C, R, output Q); DFFNC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R)); endmodule
|
||||
// DFFNSE D Flip-Flop with Negative-Edge Clock,Clock Enable,and Synchronous Set
|
||||
module \$__DFFSE_NN1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFSE_NP1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFPE D Flip-Flop with Clock Enable and Asynchronous Preset
|
||||
module \$__DFFE_PP1 (input D, C, R, E, output Q); DFFPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E)); endmodule
|
||||
module \$__DFFE_PN1 (input D, C, R, E, output Q); DFFPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R), .CE(E)); endmodule
|
||||
// DFFP D Flip-Flop with Asynchronous Preset
|
||||
module \$_DFF_PP1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$_DFF_PN1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFNPE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Asynchronous Preset
|
||||
module \$__DFFE_NP1 (input D, C, R, E, output Q); DFFNPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E)); endmodule
|
||||
module \$__DFFE_NN1 (input D, C, R, E, output Q); DFFNPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R), .CE(E)); endmodule
|
||||
// DFFNP D Flip-Flop with Negative-Edge Clock and Asynchronous Preset
|
||||
module \$_DFF_NP1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$_DFF_NN1_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFCE D Flip-Flop with Clock Enable and Asynchronous Clear
|
||||
module \$__DFFE_PP0 (input D, C, R, E, output Q); DFFCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E)); endmodule
|
||||
module \$__DFFE_PN0 (input D, C, R, E, output Q); DFFCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R), .CE(E)); endmodule
|
||||
// DFFC D Flip-Flop with Asynchronous Clear
|
||||
module \$_DFF_PP0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$_DFF_PN0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFNCE D Flip-Flop with Negative-Edge Clock,Clock Enable and Asynchronous Clear
|
||||
module \$__DFFE_NP0 (input D, C, R, E, output Q); DFFNCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E)); endmodule
|
||||
module \$__DFFE_NN0 (input D, C, R, E, output Q); DFFNCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R), .CE(E)); endmodule
|
||||
// DFFNC D Flip-Flop with Negative-Edge Clock and Asynchronous Clear
|
||||
module \$_DFF_NP0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$_DFF_NN0_ #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, output Q);
|
||||
DFFNC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFPE D Flip-Flop with Clock Enable and Asynchronous Preset
|
||||
module \$__DFFE_PP1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFE_PN1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFNPE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Asynchronous Preset
|
||||
module \$__DFFE_NP1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
module \$__DFFE_NN1 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b0;
|
||||
endmodule
|
||||
|
||||
// DFFCE D Flip-Flop with Clock Enable and Asynchronous Clear
|
||||
module \$__DFFE_PP0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$__DFFE_PN0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
// DFFNCE D Flip-Flop with Negative-Edge Clock,Clock Enable and Asynchronous Clear
|
||||
module \$__DFFE_NP0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
module \$__DFFE_NN0 #(parameter _TECHMAP_WIREINIT_Q_ = 1'bx) (input D, C, R, E, output Q);
|
||||
DFFNCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(!R), .CE(E));
|
||||
wire _TECHMAP_REMOVEINIT_Q_ = _TECHMAP_WIREINIT_Q_ !== 1'b1;
|
||||
endmodule
|
||||
|
||||
|
||||
module \$lut (A, Y);
|
||||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
LUT1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]));
|
||||
end else
|
||||
if (WIDTH == 2) begin
|
||||
LUT2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]));
|
||||
end else
|
||||
if (WIDTH == 3) begin
|
||||
LUT3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]), .I2(A[2]));
|
||||
end else
|
||||
if (WIDTH == 4) begin
|
||||
LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3]));
|
||||
end else
|
||||
if (WIDTH == 5) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[15: 0]), .WIDTH(4)) lut0 (.A(A[3:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[31:16]), .WIDTH(4)) lut1 (.A(A[3:0]), .Y(f1));
|
||||
MUX2_LUT5 mux5(.I0(f0), .I1(f1), .S0(A[4]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 6) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[31: 0]), .WIDTH(5)) lut0 (.A(A[4:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[63:32]), .WIDTH(5)) lut1 (.A(A[4:0]), .Y(f1));
|
||||
MUX2_LUT6 mux6(.I0(f0), .I1(f1), .S0(A[5]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 7) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[63: 0]), .WIDTH(6)) lut0 (.A(A[5:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[127:64]), .WIDTH(6)) lut1 (.A(A[5:0]), .Y(f1));
|
||||
MUX2_LUT7 mux7(.I0(f0), .I1(f1), .S0(A[6]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 8) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[127: 0]), .WIDTH(7)) lut0 (.A(A[6:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[255:128]), .WIDTH(7)) lut1 (.A(A[6:0]), .Y(f1));
|
||||
MUX2_LUT8 mux8(.I0(f0), .I1(f1), .S0(A[7]), .O(Y));
|
||||
end else begin
|
||||
wire _TECHMAP_FAIL_ = 1;
|
||||
end
|
||||
endgenerate
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
LUT1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]));
|
||||
end else
|
||||
if (WIDTH == 2) begin
|
||||
LUT2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]));
|
||||
end else
|
||||
if (WIDTH == 3) begin
|
||||
LUT3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]), .I2(A[2]));
|
||||
end else
|
||||
if (WIDTH == 4) begin
|
||||
LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y),
|
||||
.I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3]));
|
||||
end else
|
||||
if (WIDTH == 5) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[15: 0]), .WIDTH(4)) lut0 (.A(A[3:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[31:16]), .WIDTH(4)) lut1 (.A(A[3:0]), .Y(f1));
|
||||
MUX2_LUT5 mux5(.I0(f0), .I1(f1), .S0(A[4]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 6) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[31: 0]), .WIDTH(5)) lut0 (.A(A[4:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[63:32]), .WIDTH(5)) lut1 (.A(A[4:0]), .Y(f1));
|
||||
MUX2_LUT6 mux6(.I0(f0), .I1(f1), .S0(A[5]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 7) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[63: 0]), .WIDTH(6)) lut0 (.A(A[5:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[127:64]), .WIDTH(6)) lut1 (.A(A[5:0]), .Y(f1));
|
||||
MUX2_LUT7 mux7(.I0(f0), .I1(f1), .S0(A[6]), .O(Y));
|
||||
end else
|
||||
if (WIDTH == 8) begin
|
||||
wire f0, f1;
|
||||
\$lut #(.LUT(LUT[127: 0]), .WIDTH(7)) lut0 (.A(A[6:0]), .Y(f0));
|
||||
\$lut #(.LUT(LUT[255:128]), .WIDTH(7)) lut1 (.A(A[6:0]), .Y(f1));
|
||||
MUX2_LUT8 mux8(.I0(f0), .I1(f1), .S0(A[7]), .O(Y));
|
||||
end else begin
|
||||
wire _TECHMAP_FAIL_ = 1;
|
||||
end
|
||||
endgenerate
|
||||
endmodule
|
||||
|
|
|
@ -67,6 +67,9 @@ struct SynthGowinPass : public ScriptPass
|
|||
log(" -nowidelut\n");
|
||||
log(" do not use muxes to implement LUTs larger than LUT4s\n");
|
||||
log("\n");
|
||||
log(" -noiopads\n");
|
||||
log(" do not emit IOB at top level ports\n");
|
||||
log("\n");
|
||||
log(" -abc9\n");
|
||||
log(" use new ABC9 flow (EXPERIMENTAL)\n");
|
||||
log("\n");
|
||||
|
@ -77,7 +80,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
}
|
||||
|
||||
string top_opt, vout_file;
|
||||
bool retime, nobram, nodram, flatten, nodffe, nowidelut, abc9;
|
||||
bool retime, nobram, nodram, flatten, nodffe, nowidelut, abc9, noiopads;
|
||||
|
||||
void clear_flags() YS_OVERRIDE
|
||||
{
|
||||
|
@ -90,6 +93,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
nodram = false;
|
||||
nowidelut = false;
|
||||
abc9 = false;
|
||||
noiopads = false;
|
||||
}
|
||||
|
||||
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
||||
|
@ -144,6 +148,10 @@ struct SynthGowinPass : public ScriptPass
|
|||
abc9 = true;
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-noiopads") {
|
||||
noiopads = true;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
extra_args(args, argidx, design);
|
||||
|
@ -208,7 +216,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
if (check_label("map_ffs"))
|
||||
{
|
||||
run("dffsr2dff");
|
||||
run("dff2dffs");
|
||||
run("dff2dffs -match-init");
|
||||
run("opt_clean");
|
||||
if (!nodffe)
|
||||
run("dff2dffe -direct-match $_DFF_* -direct-match $__DFFS_*");
|
||||
|
@ -236,8 +244,9 @@ struct SynthGowinPass : public ScriptPass
|
|||
run("techmap -map +/gowin/cells_map.v");
|
||||
run("setundef -undriven -params -zero");
|
||||
run("hilomap -singleton -hicell VCC V -locell GND G");
|
||||
run("iopadmap -bits -inpad IBUF O:I -outpad OBUF I:O "
|
||||
"-toutpad TBUF OEN:I:O -tinoutpad IOBUF OEN:O:I:IO", "(unless -noiopads)");
|
||||
if (!noiopads || help_mode)
|
||||
run("iopadmap -bits -inpad IBUF O:I -outpad OBUF I:O "
|
||||
"-toutpad TBUF OEN:I:O -tinoutpad IOBUF OEN:O:I:IO", "(unless -noiopads)");
|
||||
run("clean");
|
||||
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ module _80_ice40_alu (A, B, CI, BI, X, Y, CO);
|
|||
// A[2]: 1111 0000 1111 0000
|
||||
// A[3]: 1111 1111 0000 0000
|
||||
.LUT(16'b 0110_1001_1001_0110)
|
||||
) fadd (
|
||||
) carry (
|
||||
.A(AA[i]),
|
||||
.B(BB[i]),
|
||||
.CI(C[i]),
|
||||
|
|
|
@ -61,22 +61,3 @@ module \$lut (A, Y);
|
|||
endgenerate
|
||||
endmodule
|
||||
`endif
|
||||
|
||||
`ifndef NO_ADDER
|
||||
module \$__ICE40_CARRY_WRAPPER (output CO, O, input A, B, CI, I0, I3);
|
||||
parameter LUT = 0;
|
||||
SB_CARRY carry (
|
||||
.I0(A),
|
||||
.I1(B),
|
||||
.CI(CI),
|
||||
.CO(CO)
|
||||
);
|
||||
\$lut #(
|
||||
.WIDTH(4),
|
||||
.LUT(LUT)
|
||||
) lut (
|
||||
.A({I0,A,B,I3}),
|
||||
.Y(O)
|
||||
);
|
||||
endmodule
|
||||
`endif
|
||||
|
|
|
@ -41,6 +41,11 @@ static void run_ice40_opts(Module *module)
|
|||
|
||||
for (auto cell : module->selected_cells())
|
||||
{
|
||||
if (!cell->type.in("\\SB_LUT4", "\\SB_CARRY", "$__ICE40_CARRY_WRAPPER"))
|
||||
continue;
|
||||
if (cell->has_keep_attr())
|
||||
continue;
|
||||
|
||||
if (cell->type == "\\SB_LUT4")
|
||||
{
|
||||
sb_lut_cells.push_back(cell);
|
||||
|
@ -112,6 +117,21 @@ static void run_ice40_opts(Module *module)
|
|||
|
||||
if (GetSize(replacement_output)) {
|
||||
optimized_co.insert(sigmap(cell->getPort("\\CO")[0]));
|
||||
auto it = cell->attributes.find(ID(SB_LUT4.name));
|
||||
if (it != cell->attributes.end()) {
|
||||
module->rename(cell, it->second.decode_string());
|
||||
decltype(Cell::attributes) new_attr;
|
||||
for (const auto &a : cell->attributes)
|
||||
if (a.first.begins_with("\\SB_LUT4.\\"))
|
||||
new_attr[a.first.c_str() + strlen("\\SB_LUT4.")] = a.second;
|
||||
else if (a.first == ID(src))
|
||||
new_attr.insert(std::make_pair(a.first, a.second));
|
||||
else if (a.first.in(ID(SB_LUT4.name), ID::keep, ID(module_not_derived)))
|
||||
continue;
|
||||
else
|
||||
log_abort();
|
||||
cell->attributes = std::move(new_attr);
|
||||
}
|
||||
module->connect(cell->getPort("\\CO")[0], replacement_output);
|
||||
module->design->scratchpad_set_bool("opt.did_something", true);
|
||||
log("Optimized $__ICE40_CARRY_WRAPPER cell back to logic (without SB_CARRY) %s.%s: CO=%s\n",
|
||||
|
|
|
@ -363,6 +363,7 @@ struct SynthIce40Pass : public ScriptPass
|
|||
else
|
||||
run(abc + " -dress -lut 4", "(skip if -noabc)");
|
||||
}
|
||||
run("ice40_wrapcarry -unwrap");
|
||||
run("techmap -D NO_LUT -map +/ice40/cells_map.v");
|
||||
run("clean");
|
||||
run("opt_lut -dlogic SB_CARRY:I0=2:I1=1:CI=0");
|
||||
|
|
|
@ -7,7 +7,7 @@ $(eval $(call add_share_file,share/intel/common,techlibs/intel/common/brams_m9k.
|
|||
$(eval $(call add_share_file,share/intel/common,techlibs/intel/common/brams_map_m9k.v))
|
||||
|
||||
# Add the cell models and mappings for the VQM backend
|
||||
families := max10 a10gx cyclonev cyclone10 cycloneiv cycloneive
|
||||
families := max10 arria10gx cyclonev cyclone10lp cycloneiv cycloneive
|
||||
$(foreach family,$(families), $(eval $(call add_share_file,share/intel/$(family),techlibs/intel/$(family)/cells_sim.v)))
|
||||
$(foreach family,$(families), $(eval $(call add_share_file,share/intel/$(family),techlibs/intel/$(family)/cells_map.v)))
|
||||
#$(eval $(call add_share_file,share/intel/cycloneive,techlibs/intel/cycloneive/arith_map.v))
|
||||
|
|
|
@ -36,10 +36,10 @@ struct SynthIntelPass : public ScriptPass {
|
|||
log("\n");
|
||||
log("This command runs synthesis for Intel FPGAs.\n");
|
||||
log("\n");
|
||||
log(" -family < max10 | a10gx | cyclone10 | cyclonev | cycloneiv | cycloneive>\n");
|
||||
log(" -family <max10 | arria10gx | cyclone10lp | cyclonev | cycloneiv | cycloneive>\n");
|
||||
log(" generate the synthesis netlist for the specified family.\n");
|
||||
log(" MAX10 is the default target if no family argument specified.\n");
|
||||
log(" For Cyclone GX devices, use cycloneiv argument; For Cyclone E, use cycloneive.\n");
|
||||
log(" For Cyclone IV GX devices, use cycloneiv argument; for Cyclone IV E, use cycloneive.\n");
|
||||
log(" Cyclone V and Arria 10 GX devices are experimental.\n");
|
||||
log("\n");
|
||||
log(" -top <module>\n");
|
||||
|
@ -148,11 +148,11 @@ struct SynthIntelPass : public ScriptPass {
|
|||
if (!design->full_selection())
|
||||
log_cmd_error("This command only operates on fully selected designs!\n");
|
||||
if (family_opt != "max10" &&
|
||||
family_opt != "a10gx" &&
|
||||
family_opt != "arria10gx" &&
|
||||
family_opt != "cyclonev" &&
|
||||
family_opt != "cycloneiv" &&
|
||||
family_opt != "cycloneive" &&
|
||||
family_opt != "cyclone10")
|
||||
family_opt != "cyclone10lp")
|
||||
log_cmd_error("Invalid or no family specified: '%s'\n", family_opt.c_str());
|
||||
|
||||
log_header(design, "Executing SYNTH_INTEL pass.\n");
|
||||
|
@ -214,7 +214,7 @@ struct SynthIntelPass : public ScriptPass {
|
|||
}
|
||||
|
||||
if (check_label("map_luts")) {
|
||||
if (family_opt == "a10gx" || family_opt == "cyclonev")
|
||||
if (family_opt == "arria10gx" || family_opt == "cyclonev")
|
||||
run("abc -luts 2:2,3,6:5" + string(retime ? " -dff" : ""));
|
||||
else
|
||||
run("abc -lut 4" + string(retime ? " -dff" : ""));
|
||||
|
|
|
@ -363,3 +363,11 @@ module \$__XILINX_MUXF78 (O, I0, I1, I2, I3, S0, S1);
|
|||
else
|
||||
MUXF8 mux8 (.I0(T0), .I1(T1), .S(S1), .O(O));
|
||||
endmodule
|
||||
|
||||
module \$__XILINX_TINOUTPAD (input I, OE, output O, inout IO);
|
||||
IOBUF _TECHMAP_REPLACE_ (.I(I), .O(O), .T(~OE), .IO(IO));
|
||||
endmodule
|
||||
|
||||
module \$__XILINX_TOUTPAD (input I, OE, output O);
|
||||
OBUFT _TECHMAP_REPLACE_ (.I(I), .O(O), .T(~OE));
|
||||
endmodule
|
||||
|
|
|
@ -471,6 +471,473 @@ module LDPE (
|
|||
else if (GE && g) Q = D;
|
||||
endmodule
|
||||
|
||||
// LUTRAM.
|
||||
|
||||
// Single port.
|
||||
|
||||
module RAM16X1S (
|
||||
output O,
|
||||
input A0, A1, A2, A3,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
reg [15:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM16X1S_1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
reg [15:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM32X1S (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
reg [31:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM32X1S_1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
reg [31:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM64X1S (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [5:0] a = {A5, A4, A3, A2, A1, A0};
|
||||
reg [63:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM64X1S_1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [5:0] a = {A5, A4, A3, A2, A1, A0};
|
||||
reg [63:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM128X1S (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5, A6,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [127:0] INIT = 128'h00000000000000000000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [6:0] a = {A6, A5, A4, A3, A2, A1, A0};
|
||||
reg [127:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM128X1S_1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5, A6,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [127:0] INIT = 128'h00000000000000000000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [6:0] a = {A6, A5, A4, A3, A2, A1, A0};
|
||||
reg [127:0] mem = INIT;
|
||||
assign O = mem[a];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM256X1S (
|
||||
output O,
|
||||
input [7:0] A,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [255:0] INIT = 256'h0;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [255:0] mem = INIT;
|
||||
assign O = mem[A];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[A] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM512X1S (
|
||||
output O,
|
||||
input [8:0] A,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [511:0] INIT = 512'h0;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [511:0] mem = INIT;
|
||||
assign O = mem[A];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[A] <= D;
|
||||
endmodule
|
||||
|
||||
// Single port, wide.
|
||||
|
||||
module RAM16X2S (
|
||||
output O0, O1,
|
||||
input A0, A1, A2, A3,
|
||||
input D0, D1,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [15:0] mem0 = INIT_00;
|
||||
reg [15:0] mem1 = INIT_01;
|
||||
assign O0 = mem0[a];
|
||||
assign O1 = mem1[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D0;
|
||||
mem1[a] <= D1;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM32X2S (
|
||||
output O0, O1,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input D0, D1,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [31:0] mem0 = INIT_00;
|
||||
reg [31:0] mem1 = INIT_01;
|
||||
assign O0 = mem0[a];
|
||||
assign O1 = mem1[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D0;
|
||||
mem1[a] <= D1;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM64X2S (
|
||||
output O0, O1,
|
||||
input A0, A1, A2, A3, A4, A5,
|
||||
input D0, D1,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT_00 = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_01 = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [5:0] a = {A5, A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [63:0] mem0 = INIT_00;
|
||||
reg [63:0] mem1 = INIT_01;
|
||||
assign O0 = mem0[a];
|
||||
assign O1 = mem1[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D0;
|
||||
mem1[a] <= D1;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM16X4S (
|
||||
output O0, O1, O2, O3,
|
||||
input A0, A1, A2, A3,
|
||||
input D0, D1, D2, D3,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [15:0] INIT_02 = 16'h0000;
|
||||
parameter [15:0] INIT_03 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [15:0] mem0 = INIT_00;
|
||||
reg [15:0] mem1 = INIT_01;
|
||||
reg [15:0] mem2 = INIT_02;
|
||||
reg [15:0] mem3 = INIT_03;
|
||||
assign O0 = mem0[a];
|
||||
assign O1 = mem1[a];
|
||||
assign O2 = mem2[a];
|
||||
assign O3 = mem3[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D0;
|
||||
mem1[a] <= D1;
|
||||
mem2[a] <= D2;
|
||||
mem3[a] <= D3;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM32X4S (
|
||||
output O0, O1, O2, O3,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input D0, D1, D2, D3,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [31:0] INIT_02 = 32'h00000000;
|
||||
parameter [31:0] INIT_03 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [31:0] mem0 = INIT_00;
|
||||
reg [31:0] mem1 = INIT_01;
|
||||
reg [31:0] mem2 = INIT_02;
|
||||
reg [31:0] mem3 = INIT_03;
|
||||
assign O0 = mem0[a];
|
||||
assign O1 = mem1[a];
|
||||
assign O2 = mem2[a];
|
||||
assign O3 = mem3[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D0;
|
||||
mem1[a] <= D1;
|
||||
mem2[a] <= D2;
|
||||
mem3[a] <= D3;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM16X8S (
|
||||
output [7:0] O,
|
||||
input A0, A1, A2, A3,
|
||||
input [7:0] D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [15:0] INIT_02 = 16'h0000;
|
||||
parameter [15:0] INIT_03 = 16'h0000;
|
||||
parameter [15:0] INIT_04 = 16'h0000;
|
||||
parameter [15:0] INIT_05 = 16'h0000;
|
||||
parameter [15:0] INIT_06 = 16'h0000;
|
||||
parameter [15:0] INIT_07 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [15:0] mem0 = INIT_00;
|
||||
reg [15:0] mem1 = INIT_01;
|
||||
reg [15:0] mem2 = INIT_02;
|
||||
reg [15:0] mem3 = INIT_03;
|
||||
reg [15:0] mem4 = INIT_04;
|
||||
reg [15:0] mem5 = INIT_05;
|
||||
reg [15:0] mem6 = INIT_06;
|
||||
reg [15:0] mem7 = INIT_07;
|
||||
assign O[0] = mem0[a];
|
||||
assign O[1] = mem1[a];
|
||||
assign O[2] = mem2[a];
|
||||
assign O[3] = mem3[a];
|
||||
assign O[4] = mem4[a];
|
||||
assign O[5] = mem5[a];
|
||||
assign O[6] = mem6[a];
|
||||
assign O[7] = mem7[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D[0];
|
||||
mem1[a] <= D[1];
|
||||
mem2[a] <= D[2];
|
||||
mem3[a] <= D[3];
|
||||
mem4[a] <= D[4];
|
||||
mem5[a] <= D[5];
|
||||
mem6[a] <= D[6];
|
||||
mem7[a] <= D[7];
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM32X8S (
|
||||
output [7:0] O,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input [7:0] D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [31:0] INIT_02 = 32'h00000000;
|
||||
parameter [31:0] INIT_03 = 32'h00000000;
|
||||
parameter [31:0] INIT_04 = 32'h00000000;
|
||||
parameter [31:0] INIT_05 = 32'h00000000;
|
||||
parameter [31:0] INIT_06 = 32'h00000000;
|
||||
parameter [31:0] INIT_07 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
reg [31:0] mem0 = INIT_00;
|
||||
reg [31:0] mem1 = INIT_01;
|
||||
reg [31:0] mem2 = INIT_02;
|
||||
reg [31:0] mem3 = INIT_03;
|
||||
reg [31:0] mem4 = INIT_04;
|
||||
reg [31:0] mem5 = INIT_05;
|
||||
reg [31:0] mem6 = INIT_06;
|
||||
reg [31:0] mem7 = INIT_07;
|
||||
assign O[0] = mem0[a];
|
||||
assign O[1] = mem1[a];
|
||||
assign O[2] = mem2[a];
|
||||
assign O[3] = mem3[a];
|
||||
assign O[4] = mem4[a];
|
||||
assign O[5] = mem5[a];
|
||||
assign O[6] = mem6[a];
|
||||
assign O[7] = mem7[a];
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem0[a] <= D[0];
|
||||
mem1[a] <= D[1];
|
||||
mem2[a] <= D[2];
|
||||
mem3[a] <= D[3];
|
||||
mem4[a] <= D[4];
|
||||
mem5[a] <= D[5];
|
||||
mem6[a] <= D[6];
|
||||
mem7[a] <= D[7];
|
||||
end
|
||||
endmodule
|
||||
|
||||
// Dual port.
|
||||
|
||||
module RAM16X1D (
|
||||
output DPO, SPO,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE,
|
||||
input A0, A1, A2, A3,
|
||||
input DPRA0, DPRA1, DPRA2, DPRA3
|
||||
);
|
||||
parameter INIT = 16'h0;
|
||||
parameter IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
wire [3:0] dpra = {DPRA3, DPRA2, DPRA1, DPRA0};
|
||||
reg [15:0] mem = INIT;
|
||||
assign SPO = mem[a];
|
||||
assign DPO = mem[dpra];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM16X1D_1 (
|
||||
output DPO, SPO,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE,
|
||||
input A0, A1, A2, A3,
|
||||
input DPRA0, DPRA1, DPRA2, DPRA3
|
||||
);
|
||||
parameter INIT = 16'h0;
|
||||
parameter IS_WCLK_INVERTED = 1'b0;
|
||||
wire [3:0] a = {A3, A2, A1, A0};
|
||||
wire [3:0] dpra = {DPRA3, DPRA2, DPRA1, DPRA0};
|
||||
reg [15:0] mem = INIT;
|
||||
assign SPO = mem[a];
|
||||
assign DPO = mem[dpra];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM32X1D (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
|
||||
(* abc9_arrival=1153 *)
|
||||
|
@ -494,6 +961,29 @@ module RAM32X1D (
|
|||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM32X1D_1 (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
|
||||
(* abc9_arrival=1153 *)
|
||||
output DPO, SPO,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE,
|
||||
input A0, A1, A2, A3, A4,
|
||||
input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4
|
||||
);
|
||||
parameter INIT = 32'h0;
|
||||
parameter IS_WCLK_INVERTED = 1'b0;
|
||||
wire [4:0] a = {A4, A3, A2, A1, A0};
|
||||
wire [4:0] dpra = {DPRA4, DPRA3, DPRA2, DPRA1, DPRA0};
|
||||
reg [31:0] mem = INIT;
|
||||
assign SPO = mem[a];
|
||||
assign DPO = mem[dpra];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM64X1D (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
|
||||
(* abc9_arrival=1153 *)
|
||||
|
@ -517,6 +1007,29 @@ module RAM64X1D (
|
|||
always @(posedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM64X1D_1 (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
|
||||
(* abc9_arrival=1153 *)
|
||||
output DPO, SPO,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE,
|
||||
input A0, A1, A2, A3, A4, A5,
|
||||
input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5
|
||||
);
|
||||
parameter INIT = 64'h0;
|
||||
parameter IS_WCLK_INVERTED = 1'b0;
|
||||
wire [5:0] a = {A5, A4, A3, A2, A1, A0};
|
||||
wire [5:0] dpra = {DPRA5, DPRA4, DPRA3, DPRA2, DPRA1, DPRA0};
|
||||
reg [63:0] mem = INIT;
|
||||
assign SPO = mem[a];
|
||||
assign DPO = mem[dpra];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(negedge clk) if (WE) mem[a] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM128X1D (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
|
||||
(* abc9_arrival=1153 *)
|
||||
|
@ -537,6 +1050,290 @@ module RAM128X1D (
|
|||
always @(posedge clk) if (WE) mem[A] <= D;
|
||||
endmodule
|
||||
|
||||
module RAM256X1D (
|
||||
output DPO, SPO,
|
||||
input D,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE,
|
||||
input [7:0] A, DPRA
|
||||
);
|
||||
parameter INIT = 256'h0;
|
||||
parameter IS_WCLK_INVERTED = 1'b0;
|
||||
reg [255:0] mem = INIT;
|
||||
assign SPO = mem[A];
|
||||
assign DPO = mem[DPRA];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk) if (WE) mem[A] <= D;
|
||||
endmodule
|
||||
|
||||
// Multi port.
|
||||
|
||||
module RAM32M (
|
||||
output [1:0] DOA,
|
||||
output [1:0] DOB,
|
||||
output [1:0] DOC,
|
||||
output [1:0] DOD,
|
||||
input [4:0] ADDRA,
|
||||
input [4:0] ADDRB,
|
||||
input [4:0] ADDRC,
|
||||
input [4:0] ADDRD,
|
||||
input [1:0] DIA,
|
||||
input [1:0] DIB,
|
||||
input [1:0] DIC,
|
||||
input [1:0] DID,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [63:0] mem_a = INIT_A;
|
||||
reg [63:0] mem_b = INIT_B;
|
||||
reg [63:0] mem_c = INIT_C;
|
||||
reg [63:0] mem_d = INIT_D;
|
||||
assign DOA = mem_a[2*ADDRA+:2];
|
||||
assign DOB = mem_b[2*ADDRB+:2];
|
||||
assign DOC = mem_c[2*ADDRC+:2];
|
||||
assign DOD = mem_d[2*ADDRD+:2];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem_a[2*ADDRD+:2] <= DIA;
|
||||
mem_b[2*ADDRD+:2] <= DIB;
|
||||
mem_c[2*ADDRD+:2] <= DIC;
|
||||
mem_d[2*ADDRD+:2] <= DID;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM32M16 (
|
||||
output [1:0] DOA,
|
||||
output [1:0] DOB,
|
||||
output [1:0] DOC,
|
||||
output [1:0] DOD,
|
||||
output [1:0] DOE,
|
||||
output [1:0] DOF,
|
||||
output [1:0] DOG,
|
||||
output [1:0] DOH,
|
||||
input [4:0] ADDRA,
|
||||
input [4:0] ADDRB,
|
||||
input [4:0] ADDRC,
|
||||
input [4:0] ADDRD,
|
||||
input [4:0] ADDRE,
|
||||
input [4:0] ADDRF,
|
||||
input [4:0] ADDRG,
|
||||
input [4:0] ADDRH,
|
||||
input [1:0] DIA,
|
||||
input [1:0] DIB,
|
||||
input [1:0] DIC,
|
||||
input [1:0] DID,
|
||||
input [1:0] DIE,
|
||||
input [1:0] DIF,
|
||||
input [1:0] DIG,
|
||||
input [1:0] DIH,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_E = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_F = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_G = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_H = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [63:0] mem_a = INIT_A;
|
||||
reg [63:0] mem_b = INIT_B;
|
||||
reg [63:0] mem_c = INIT_C;
|
||||
reg [63:0] mem_d = INIT_D;
|
||||
reg [63:0] mem_e = INIT_E;
|
||||
reg [63:0] mem_f = INIT_F;
|
||||
reg [63:0] mem_g = INIT_G;
|
||||
reg [63:0] mem_h = INIT_H;
|
||||
assign DOA = mem_a[2*ADDRA+:2];
|
||||
assign DOB = mem_b[2*ADDRB+:2];
|
||||
assign DOC = mem_c[2*ADDRC+:2];
|
||||
assign DOD = mem_d[2*ADDRD+:2];
|
||||
assign DOE = mem_e[2*ADDRE+:2];
|
||||
assign DOF = mem_f[2*ADDRF+:2];
|
||||
assign DOG = mem_g[2*ADDRG+:2];
|
||||
assign DOH = mem_h[2*ADDRH+:2];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem_a[2*ADDRH+:2] <= DIA;
|
||||
mem_b[2*ADDRH+:2] <= DIB;
|
||||
mem_c[2*ADDRH+:2] <= DIC;
|
||||
mem_d[2*ADDRH+:2] <= DID;
|
||||
mem_e[2*ADDRH+:2] <= DIE;
|
||||
mem_f[2*ADDRH+:2] <= DIF;
|
||||
mem_g[2*ADDRH+:2] <= DIG;
|
||||
mem_h[2*ADDRH+:2] <= DIH;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM64M (
|
||||
output DOA,
|
||||
output DOB,
|
||||
output DOC,
|
||||
output DOD,
|
||||
input [4:0] ADDRA,
|
||||
input [4:0] ADDRB,
|
||||
input [4:0] ADDRC,
|
||||
input [4:0] ADDRD,
|
||||
input DIA,
|
||||
input DIB,
|
||||
input DIC,
|
||||
input DID,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [63:0] mem_a = INIT_A;
|
||||
reg [63:0] mem_b = INIT_B;
|
||||
reg [63:0] mem_c = INIT_C;
|
||||
reg [63:0] mem_d = INIT_D;
|
||||
assign DOA = mem_a[ADDRA];
|
||||
assign DOB = mem_b[ADDRB];
|
||||
assign DOC = mem_c[ADDRC];
|
||||
assign DOD = mem_d[ADDRD];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem_a[ADDRD] <= DIA;
|
||||
mem_b[ADDRD] <= DIB;
|
||||
mem_c[ADDRD] <= DIC;
|
||||
mem_d[ADDRD] <= DID;
|
||||
end
|
||||
endmodule
|
||||
|
||||
module RAM64M8 (
|
||||
output DOA,
|
||||
output DOB,
|
||||
output DOC,
|
||||
output DOD,
|
||||
output DOE,
|
||||
output DOF,
|
||||
output DOG,
|
||||
output DOH,
|
||||
input [4:0] ADDRA,
|
||||
input [4:0] ADDRB,
|
||||
input [4:0] ADDRC,
|
||||
input [4:0] ADDRD,
|
||||
input [4:0] ADDRE,
|
||||
input [4:0] ADDRF,
|
||||
input [4:0] ADDRG,
|
||||
input [4:0] ADDRH,
|
||||
input DIA,
|
||||
input DIB,
|
||||
input DIC,
|
||||
input DID,
|
||||
input DIE,
|
||||
input DIF,
|
||||
input DIG,
|
||||
input DIH,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK,
|
||||
input WE
|
||||
);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_E = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_F = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_G = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_H = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
reg [63:0] mem_a = INIT_A;
|
||||
reg [63:0] mem_b = INIT_B;
|
||||
reg [63:0] mem_c = INIT_C;
|
||||
reg [63:0] mem_d = INIT_D;
|
||||
reg [63:0] mem_e = INIT_E;
|
||||
reg [63:0] mem_f = INIT_F;
|
||||
reg [63:0] mem_g = INIT_G;
|
||||
reg [63:0] mem_h = INIT_H;
|
||||
assign DOA = mem_a[ADDRA];
|
||||
assign DOB = mem_b[ADDRB];
|
||||
assign DOC = mem_c[ADDRC];
|
||||
assign DOD = mem_d[ADDRD];
|
||||
assign DOE = mem_e[ADDRE];
|
||||
assign DOF = mem_f[ADDRF];
|
||||
assign DOG = mem_g[ADDRG];
|
||||
assign DOH = mem_h[ADDRH];
|
||||
wire clk = WCLK ^ IS_WCLK_INVERTED;
|
||||
always @(posedge clk)
|
||||
if (WE) begin
|
||||
mem_a[ADDRH] <= DIA;
|
||||
mem_b[ADDRH] <= DIB;
|
||||
mem_c[ADDRH] <= DIC;
|
||||
mem_d[ADDRH] <= DID;
|
||||
mem_e[ADDRH] <= DIE;
|
||||
mem_f[ADDRH] <= DIF;
|
||||
mem_g[ADDRH] <= DIG;
|
||||
mem_h[ADDRH] <= DIH;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// ROM.
|
||||
|
||||
module ROM16X1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3
|
||||
);
|
||||
parameter [15:0] INIT = 16'h0;
|
||||
assign O = INIT[{A3, A2, A1, A0}];
|
||||
endmodule
|
||||
|
||||
module ROM32X1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4
|
||||
);
|
||||
parameter [31:0] INIT = 32'h0;
|
||||
assign O = INIT[{A4, A3, A2, A1, A0}];
|
||||
endmodule
|
||||
|
||||
module ROM64X1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5
|
||||
);
|
||||
parameter [63:0] INIT = 64'h0;
|
||||
assign O = INIT[{A5, A4, A3, A2, A1, A0}];
|
||||
endmodule
|
||||
|
||||
module ROM128X1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5, A6
|
||||
);
|
||||
parameter [127:0] INIT = 128'h0;
|
||||
assign O = INIT[{A6, A5, A4, A3, A2, A1, A0}];
|
||||
endmodule
|
||||
|
||||
module ROM256X1 (
|
||||
output O,
|
||||
input A0, A1, A2, A3, A4, A5, A6, A7
|
||||
);
|
||||
parameter [255:0] INIT = 256'h0;
|
||||
assign O = INIT[{A7, A6, A5, A4, A3, A2, A1, A0}];
|
||||
endmodule
|
||||
|
||||
// Shift registers.
|
||||
|
||||
module SRL16E (
|
||||
// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904-L905
|
||||
(* abc9_arrival=1472 *)
|
||||
|
|
|
@ -28,40 +28,40 @@ CELLS = [
|
|||
# - UG974 (Ultrascale)
|
||||
|
||||
# CLB -- RAM/ROM.
|
||||
Cell('RAM16X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM128X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM512X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X4S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X4S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X8S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X8S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM16X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
#Cell('RAM32X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
#Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
#Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM256X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32M', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM32M16', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64M', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('RAM64M8', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
Cell('ROM16X1'),
|
||||
Cell('ROM32X1'),
|
||||
Cell('ROM64X1'),
|
||||
Cell('ROM128X1'),
|
||||
Cell('ROM256X1'),
|
||||
# Cell('RAM16X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM128X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM512X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X4S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X4S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X8S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X8S', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM16X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64X1D_1', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM256X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32M', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM32M16', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64M', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('RAM64M8', port_attrs={'WCLK': ['clkbuf_sink']}),
|
||||
# Cell('ROM16X1'),
|
||||
# Cell('ROM32X1'),
|
||||
# Cell('ROM64X1'),
|
||||
# Cell('ROM128X1'),
|
||||
# Cell('ROM256X1'),
|
||||
|
||||
# CLB -- registers/latches.
|
||||
# Virtex 1/2/4/5, Spartan 3.
|
||||
|
@ -372,6 +372,7 @@ CELLS = [
|
|||
Cell('BUFIO2', port_attrs={'IOCLK': ['clkbuf_driver'], 'DIVCLK': ['clkbuf_driver']}),
|
||||
Cell('BUFIO2_2CLK', port_attrs={'IOCLK': ['clkbuf_driver'], 'DIVCLK': ['clkbuf_driver']}),
|
||||
Cell('BUFIO2FB', port_attrs={'O': ['clkbuf_driver']}),
|
||||
Cell('BUFPLL', port_attrs={'IOCLK': ['clkbuf_driver']}),
|
||||
Cell('BUFPLL_MCB', port_attrs={'IOCLK0': ['clkbuf_driver'], 'IOCLK1': ['clkbuf_driver']}),
|
||||
|
||||
# Clock buffers (IO and regional) -- Virtex.
|
||||
|
|
|
@ -1,595 +1,5 @@
|
|||
// Created by cells_xtra.py from Xilinx models
|
||||
|
||||
module RAM16X1S (...);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM16X1S_1 (...);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32X1S (...);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32X1S_1 (...);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64X1S (...);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64X1S_1 (...);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM128X1S (...);
|
||||
parameter [127:0] INIT = 128'h00000000000000000000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input A6;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM128X1S_1 (...);
|
||||
parameter [127:0] INIT = 128'h00000000000000000000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input A6;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM256X1S (...);
|
||||
parameter [255:0] INIT = 256'h0;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input [7:0] A;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM512X1S (...);
|
||||
parameter [511:0] INIT = 512'h0;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O;
|
||||
input [8:0] A;
|
||||
input D;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM16X2S (...);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O0;
|
||||
output O1;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D0;
|
||||
input D1;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32X2S (...);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O0;
|
||||
output O1;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input D0;
|
||||
input D1;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64X2S (...);
|
||||
parameter [63:0] INIT_00 = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_01 = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O0;
|
||||
output O1;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input D0;
|
||||
input D1;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM16X4S (...);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [15:0] INIT_02 = 16'h0000;
|
||||
parameter [15:0] INIT_03 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O0;
|
||||
output O1;
|
||||
output O2;
|
||||
output O3;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D0;
|
||||
input D1;
|
||||
input D2;
|
||||
input D3;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32X4S (...);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [31:0] INIT_02 = 32'h00000000;
|
||||
parameter [31:0] INIT_03 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output O0;
|
||||
output O1;
|
||||
output O2;
|
||||
output O3;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input D0;
|
||||
input D1;
|
||||
input D2;
|
||||
input D3;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM16X8S (...);
|
||||
parameter [15:0] INIT_00 = 16'h0000;
|
||||
parameter [15:0] INIT_01 = 16'h0000;
|
||||
parameter [15:0] INIT_02 = 16'h0000;
|
||||
parameter [15:0] INIT_03 = 16'h0000;
|
||||
parameter [15:0] INIT_04 = 16'h0000;
|
||||
parameter [15:0] INIT_05 = 16'h0000;
|
||||
parameter [15:0] INIT_06 = 16'h0000;
|
||||
parameter [15:0] INIT_07 = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output [7:0] O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
input [7:0] D;
|
||||
endmodule
|
||||
|
||||
module RAM32X8S (...);
|
||||
parameter [31:0] INIT_00 = 32'h00000000;
|
||||
parameter [31:0] INIT_01 = 32'h00000000;
|
||||
parameter [31:0] INIT_02 = 32'h00000000;
|
||||
parameter [31:0] INIT_03 = 32'h00000000;
|
||||
parameter [31:0] INIT_04 = 32'h00000000;
|
||||
parameter [31:0] INIT_05 = 32'h00000000;
|
||||
parameter [31:0] INIT_06 = 32'h00000000;
|
||||
parameter [31:0] INIT_07 = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output [7:0] O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
input [7:0] D;
|
||||
endmodule
|
||||
|
||||
module RAM16X1D (...);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DPO;
|
||||
output SPO;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D;
|
||||
input DPRA0;
|
||||
input DPRA1;
|
||||
input DPRA2;
|
||||
input DPRA3;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM16X1D_1 (...);
|
||||
parameter [15:0] INIT = 16'h0000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DPO;
|
||||
output SPO;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input D;
|
||||
input DPRA0;
|
||||
input DPRA1;
|
||||
input DPRA2;
|
||||
input DPRA3;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32X1D_1 (...);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DPO;
|
||||
output SPO;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input D;
|
||||
input DPRA0;
|
||||
input DPRA1;
|
||||
input DPRA2;
|
||||
input DPRA3;
|
||||
input DPRA4;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64X1D_1 (...);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DPO;
|
||||
output SPO;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input D;
|
||||
input DPRA0;
|
||||
input DPRA1;
|
||||
input DPRA2;
|
||||
input DPRA3;
|
||||
input DPRA4;
|
||||
input DPRA5;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM256X1D (...);
|
||||
parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DPO;
|
||||
output SPO;
|
||||
input [7:0] A;
|
||||
input D;
|
||||
input [7:0] DPRA;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32M (...);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output [1:0] DOA;
|
||||
output [1:0] DOB;
|
||||
output [1:0] DOC;
|
||||
output [1:0] DOD;
|
||||
input [4:0] ADDRA;
|
||||
input [4:0] ADDRB;
|
||||
input [4:0] ADDRC;
|
||||
input [4:0] ADDRD;
|
||||
input [1:0] DIA;
|
||||
input [1:0] DIB;
|
||||
input [1:0] DIC;
|
||||
input [1:0] DID;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM32M16 (...);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_E = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_F = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_G = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_H = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output [1:0] DOA;
|
||||
output [1:0] DOB;
|
||||
output [1:0] DOC;
|
||||
output [1:0] DOD;
|
||||
output [1:0] DOE;
|
||||
output [1:0] DOF;
|
||||
output [1:0] DOG;
|
||||
output [1:0] DOH;
|
||||
input [4:0] ADDRA;
|
||||
input [4:0] ADDRB;
|
||||
input [4:0] ADDRC;
|
||||
input [4:0] ADDRD;
|
||||
input [4:0] ADDRE;
|
||||
input [4:0] ADDRF;
|
||||
input [4:0] ADDRG;
|
||||
input [4:0] ADDRH;
|
||||
input [1:0] DIA;
|
||||
input [1:0] DIB;
|
||||
input [1:0] DIC;
|
||||
input [1:0] DID;
|
||||
input [1:0] DIE;
|
||||
input [1:0] DIF;
|
||||
input [1:0] DIG;
|
||||
input [1:0] DIH;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64M (...);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DOA;
|
||||
output DOB;
|
||||
output DOC;
|
||||
output DOD;
|
||||
input [5:0] ADDRA;
|
||||
input [5:0] ADDRB;
|
||||
input [5:0] ADDRC;
|
||||
input [5:0] ADDRD;
|
||||
input DIA;
|
||||
input DIB;
|
||||
input DIC;
|
||||
input DID;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module RAM64M8 (...);
|
||||
parameter [63:0] INIT_A = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_B = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_C = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_D = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_E = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_F = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_G = 64'h0000000000000000;
|
||||
parameter [63:0] INIT_H = 64'h0000000000000000;
|
||||
parameter [0:0] IS_WCLK_INVERTED = 1'b0;
|
||||
output DOA;
|
||||
output DOB;
|
||||
output DOC;
|
||||
output DOD;
|
||||
output DOE;
|
||||
output DOF;
|
||||
output DOG;
|
||||
output DOH;
|
||||
input [5:0] ADDRA;
|
||||
input [5:0] ADDRB;
|
||||
input [5:0] ADDRC;
|
||||
input [5:0] ADDRD;
|
||||
input [5:0] ADDRE;
|
||||
input [5:0] ADDRF;
|
||||
input [5:0] ADDRG;
|
||||
input [5:0] ADDRH;
|
||||
input DIA;
|
||||
input DIB;
|
||||
input DIC;
|
||||
input DID;
|
||||
input DIE;
|
||||
input DIF;
|
||||
input DIG;
|
||||
input DIH;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_WCLK_INVERTED" *)
|
||||
input WCLK;
|
||||
input WE;
|
||||
endmodule
|
||||
|
||||
module ROM16X1 (...);
|
||||
parameter [127:0] INIT = 16'h0000;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
endmodule
|
||||
|
||||
module ROM32X1 (...);
|
||||
parameter [31:0] INIT = 32'h00000000;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
endmodule
|
||||
|
||||
module ROM64X1 (...);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
endmodule
|
||||
|
||||
module ROM128X1 (...);
|
||||
parameter [127:0] INIT = 128'h00000000000000000000000000000000;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input A6;
|
||||
endmodule
|
||||
|
||||
module ROM256X1 (...);
|
||||
parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||
output O;
|
||||
input A0;
|
||||
input A1;
|
||||
input A2;
|
||||
input A3;
|
||||
input A4;
|
||||
input A5;
|
||||
input A6;
|
||||
input A7;
|
||||
endmodule
|
||||
|
||||
module FDCPE (...);
|
||||
parameter [0:0] INIT = 1'b0;
|
||||
parameter [0:0] IS_C_INVERTED = 1'b0;
|
||||
|
@ -5240,9 +4650,13 @@ module RAMB18E1 (...);
|
|||
parameter IS_RSTRAMB_INVERTED = 1'b0;
|
||||
parameter IS_RSTREGARSTREG_INVERTED = 1'b0;
|
||||
parameter IS_RSTREGB_INVERTED = 1'b0;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [15:0] DOADO;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [15:0] DOBDO;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [1:0] DOPADOP;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [1:0] DOPBDOP;
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
|
||||
|
@ -5452,9 +4866,13 @@ module RAMB36E1 (...);
|
|||
parameter IS_RSTREGB_INVERTED = 1'b0;
|
||||
output CASCADEOUTA;
|
||||
output CASCADEOUTB;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [31:0] DOADO;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [31:0] DOBDO;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [3:0] DOPADOP;
|
||||
(* abc9_arrival=2454 *)
|
||||
output [3:0] DOPBDOP;
|
||||
output [7:0] ECCPARITY;
|
||||
output [8:0] RDADDRECC;
|
||||
|
@ -8527,6 +7945,18 @@ module BUFIO2FB (...);
|
|||
input I;
|
||||
endmodule
|
||||
|
||||
module BUFPLL (...);
|
||||
parameter integer DIVIDE = 1;
|
||||
parameter ENABLE_SYNC = "TRUE";
|
||||
(* clkbuf_driver *)
|
||||
output IOCLK;
|
||||
output LOCK;
|
||||
output SERDESSTROBE;
|
||||
input GCLK;
|
||||
input LOCKED;
|
||||
input PLLIN;
|
||||
endmodule
|
||||
|
||||
module BUFPLL_MCB (...);
|
||||
parameter integer DIVIDE = 2;
|
||||
parameter LOCK_SRC = "LOCK_TO_0";
|
||||
|
|
|
@ -282,6 +282,7 @@ struct SynthXilinxPass : public ScriptPass
|
|||
|
||||
void script() YS_OVERRIDE
|
||||
{
|
||||
bool do_iopad = iopad || (ise && !noiopad);
|
||||
std::string ff_map_file;
|
||||
if (help_mode)
|
||||
ff_map_file = "+/xilinx/{family}_ff_map.v";
|
||||
|
@ -305,6 +306,8 @@ struct SynthXilinxPass : public ScriptPass
|
|||
run("proc");
|
||||
if (flatten || help_mode)
|
||||
run("flatten", "(with '-flatten')");
|
||||
run("tribuf -logic");
|
||||
run("deminout");
|
||||
run("opt_expr");
|
||||
run("opt_clean");
|
||||
run("check");
|
||||
|
@ -503,6 +506,9 @@ struct SynthXilinxPass : public ScriptPass
|
|||
}
|
||||
|
||||
if (check_label("map_cells")) {
|
||||
// Needs to be done before logic optimization, so that inverters (OE vs T) are handled.
|
||||
if (help_mode || do_iopad)
|
||||
run("iopadmap -bits -outpad OBUF I:O -inpad IBUF O:I -toutpad $__XILINX_TOUTPAD OE:I:O -tinoutpad $__XILINX_TINOUTPAD OE:O:I:IO A:top", "(only if '-iopad' or '-ise' and not '-noiopad')");
|
||||
std::string techmap_args = "-map +/techmap.v -map +/xilinx/cells_map.v";
|
||||
if (widemux > 0)
|
||||
techmap_args += stringf(" -D MIN_MUX_INPUTS=%d", widemux);
|
||||
|
@ -561,15 +567,8 @@ struct SynthXilinxPass : public ScriptPass
|
|||
}
|
||||
|
||||
if (check_label("finalize")) {
|
||||
bool do_iopad = iopad || (ise && !noiopad);
|
||||
if (help_mode || !noclkbuf) {
|
||||
if (help_mode || do_iopad)
|
||||
run("clkbufmap -buf BUFG O:I -inpad IBUFG O:I", "(skip if '-noclkbuf', '-inpad' passed if '-iopad' or '-ise' and not '-noiopad')");
|
||||
else
|
||||
run("clkbufmap -buf BUFG O:I");
|
||||
}
|
||||
if (help_mode || do_iopad)
|
||||
run("iopadmap -bits -outpad OBUF I:O -inpad IBUF O:I A:top", "(only if '-iopad' or '-ise' and not '-noiopad')");
|
||||
if (help_mode || !noclkbuf)
|
||||
run("clkbufmap -buf BUFG O:I ", "(skip if '-noclkbuf')");
|
||||
if (help_mode || ise)
|
||||
run("extractinv -inv INV O:I", "(only if '-ise')");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue