Add clock buffer insertion pass, improve iopadmap.
A few new attributes are defined for use in cell libraries:
- iopad_external_pin: marks PAD cell's external-facing pin. Pad
insertion will be skipped for ports that are already connected
to such a pin.
- clkbuf_sink: marks an input pin as a clock pin, requesting clock
buffer insertion.
- clkbuf_driver: marks an output pin as a clock buffer output pin.
Clock buffer insertion will be skipped for nets that are already
driven by such a pin.
All three are module attributes that should be set to a comma-separeted
list of pin names.
Clock buffer insertion itself works as follows:
1. All cell ports, starting from bottom up, can be marked as clock sinks
(requesting clock buffer insertion) or as clock buffer outputs.
2. If a wire in a given module is driven by a cell port that is a clock
buffer output, it is in turn also considered a clock buffer output.
3. If an input port in a non-top module is connected to a clock sink in a
contained cell, it is also in turn considered a clock sink.
4. If a wire in a module is driven by a non-clock-buffer cell, and is
also connected to a clock sink port in a contained cell, a clock
buffer is inserted in this module.
5. For the top module, a clock buffer is also inserted on input ports
connected to clock sinks, optionally with a special kind of input
PAD (such as IBUFG for Xilinx).
6. Clock buffer insertion on a given wire is skipped if the clkbuf_inhibit
attribute is set on it.
2019-08-12 10:57:43 -05:00
|
|
|
(* clkbuf_sink = "CLKAWRCLK,CLKBRDCLK" *)
|
2019-07-02 07:28:35 -05:00
|
|
|
module RAMB8BWER (
|
|
|
|
input CLKAWRCLK,
|
|
|
|
input CLKBRDCLK,
|
|
|
|
input ENAWREN,
|
|
|
|
input ENBRDEN,
|
|
|
|
input REGCEA,
|
|
|
|
input REGCEBREGCE,
|
|
|
|
input RSTA,
|
|
|
|
input RSTBRST,
|
|
|
|
|
|
|
|
input [12:0] ADDRAWRADDR,
|
|
|
|
input [12:0] ADDRBRDADDR,
|
|
|
|
input [15:0] DIADI,
|
|
|
|
input [15:0] DIBDI,
|
|
|
|
input [1:0] DIPADIP,
|
|
|
|
input [1:0] DIPBDIP,
|
|
|
|
input [1:0] WEAWEL,
|
|
|
|
input [1:0] WEBWEU,
|
|
|
|
|
|
|
|
output [15:0] DOADO,
|
|
|
|
output [15:0] DOBDO,
|
|
|
|
output [1:0] DOPADOP,
|
|
|
|
output [1:0] DOPBDOP
|
|
|
|
);
|
|
|
|
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
parameter RAM_MODE = "TDP";
|
|
|
|
parameter integer DOA_REG = 0;
|
|
|
|
parameter integer DOB_REG = 0;
|
|
|
|
|
|
|
|
parameter integer DATA_WIDTH_A = 0;
|
|
|
|
parameter integer DATA_WIDTH_B = 0;
|
|
|
|
|
|
|
|
parameter WRITE_MODE_A = "WRITE_FIRST";
|
|
|
|
parameter WRITE_MODE_B = "WRITE_FIRST";
|
|
|
|
|
|
|
|
parameter EN_RSTRAM_A = "TRUE";
|
|
|
|
parameter EN_RSTRAM_B = "TRUE";
|
|
|
|
|
|
|
|
parameter INIT_A = 18'h000000000;
|
|
|
|
parameter INIT_B = 18'h000000000;
|
|
|
|
parameter SRVAL_A = 18'h000000000;
|
|
|
|
parameter SRVAL_B = 18'h000000000;
|
|
|
|
|
|
|
|
parameter RST_PRIORITY_A = "CE";
|
|
|
|
parameter RST_PRIORITY_B = "CE";
|
|
|
|
|
|
|
|
parameter RSTTYPE = "SYNC";
|
|
|
|
|
|
|
|
parameter SIM_COLLISION_CHECK = "ALL";
|
|
|
|
endmodule
|
|
|
|
|
Add clock buffer insertion pass, improve iopadmap.
A few new attributes are defined for use in cell libraries:
- iopad_external_pin: marks PAD cell's external-facing pin. Pad
insertion will be skipped for ports that are already connected
to such a pin.
- clkbuf_sink: marks an input pin as a clock pin, requesting clock
buffer insertion.
- clkbuf_driver: marks an output pin as a clock buffer output pin.
Clock buffer insertion will be skipped for nets that are already
driven by such a pin.
All three are module attributes that should be set to a comma-separeted
list of pin names.
Clock buffer insertion itself works as follows:
1. All cell ports, starting from bottom up, can be marked as clock sinks
(requesting clock buffer insertion) or as clock buffer outputs.
2. If a wire in a given module is driven by a cell port that is a clock
buffer output, it is in turn also considered a clock buffer output.
3. If an input port in a non-top module is connected to a clock sink in a
contained cell, it is also in turn considered a clock sink.
4. If a wire in a module is driven by a non-clock-buffer cell, and is
also connected to a clock sink port in a contained cell, a clock
buffer is inserted in this module.
5. For the top module, a clock buffer is also inserted on input ports
connected to clock sinks, optionally with a special kind of input
PAD (such as IBUFG for Xilinx).
6. Clock buffer insertion on a given wire is skipped if the clkbuf_inhibit
attribute is set on it.
2019-08-12 10:57:43 -05:00
|
|
|
(* clkbuf_sink = "CLKA,CLKB" *)
|
2019-07-02 07:28:35 -05:00
|
|
|
module RAMB16BWER (
|
|
|
|
input CLKA,
|
|
|
|
input CLKB,
|
|
|
|
input ENA,
|
|
|
|
input ENB,
|
|
|
|
input REGCEA,
|
|
|
|
input REGCEB,
|
|
|
|
input RSTA,
|
|
|
|
input RSTB,
|
|
|
|
|
|
|
|
input [13:0] ADDRA,
|
|
|
|
input [13:0] ADDRB,
|
|
|
|
input [31:0] DIA,
|
|
|
|
input [31:0] DIB,
|
|
|
|
input [3:0] DIPA,
|
|
|
|
input [3:0] DIPB,
|
|
|
|
input [3:0] WEA,
|
|
|
|
input [3:0] WEB,
|
|
|
|
|
|
|
|
output [31:0] DOA,
|
|
|
|
output [31:0] DOB,
|
|
|
|
output [3:0] DOPA,
|
|
|
|
output [3:0] DOPB
|
|
|
|
);
|
|
|
|
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
parameter integer DOA_REG = 0;
|
|
|
|
parameter integer DOB_REG = 0;
|
|
|
|
|
|
|
|
parameter integer DATA_WIDTH_A = 0;
|
|
|
|
parameter integer DATA_WIDTH_B = 0;
|
|
|
|
|
|
|
|
parameter WRITE_MODE_A = "WRITE_FIRST";
|
|
|
|
parameter WRITE_MODE_B = "WRITE_FIRST";
|
|
|
|
|
|
|
|
parameter EN_RSTRAM_A = "TRUE";
|
|
|
|
parameter EN_RSTRAM_B = "TRUE";
|
|
|
|
|
|
|
|
parameter INIT_A = 36'h000000000;
|
|
|
|
parameter INIT_B = 36'h000000000;
|
|
|
|
parameter SRVAL_A = 36'h000000000;
|
|
|
|
parameter SRVAL_B = 36'h000000000;
|
|
|
|
|
|
|
|
parameter RST_PRIORITY_A = "CE";
|
|
|
|
parameter RST_PRIORITY_B = "CE";
|
|
|
|
|
|
|
|
parameter RSTTYPE = "SYNC";
|
|
|
|
|
|
|
|
parameter SIM_COLLISION_CHECK = "ALL";
|
|
|
|
endmodule
|
|
|
|
|