blob: f9d18596aed2594e19a28d8604908666e8f0a938 [file] [log] [blame] [edit]
module top(input clk, stb, di, output do);
localparam integer DIN_N = 160;
localparam integer DOUT_N = 160;
reg [DIN_N-1:0] din;
wire [DOUT_N-1:0] dout;
reg [DIN_N-1:0] din_shr;
reg [DOUT_N-1:0] dout_shr;
always @(posedge clk) begin
din_shr <= {din_shr, di};
dout_shr <= {dout_shr, din_shr[DIN_N-1]};
if (stb) begin
din <= din_shr;
dout_shr <= dout;
end
end
assign do = dout_shr[DOUT_N-1];
roi roi (
.clk(clk),
.din(din),
.dout(dout)
);
endmodule
module roi(input clk, input [159:0] din, output [159:0] dout);
my_URAM288_BASE
#(
.LOC("URAM288_X0Y64")
)
inst_0 (
.clk(clk),
.din(din[ 0 +: 24]),
.dout(dout[ 0 +: 8])
);
endmodule
// ---------------------------------------------------------------------
module my_URAM288_BASE(input clk, input [23:0] din, output [7:0] dout);
parameter LOC = "";
(* LOC=LOC *)
URAM288_BASE #(
.AUTO_SLEEP_LATENCY(8), // Latency requirement to enter sleep mode
.AVG_CONS_INACTIVE_CYCLES(10), // Average concecutive inactive cycles when is SLEEP mode for power
// estimation
.BWE_MODE_A("PARITY_INTERLEAVED"), // Port A Byte write control
.BWE_MODE_B("PARITY_INTERLEAVED"), // Port B Byte write control
.EN_AUTO_SLEEP_MODE("FALSE"), // Enable to automatically enter sleep mode
.EN_ECC_RD_A("FALSE"), // Port A ECC encoder
.EN_ECC_RD_B("FALSE"), // Port B ECC encoder
.EN_ECC_WR_A("FALSE"), // Port A ECC decoder
.EN_ECC_WR_B("FALSE"), // Port B ECC decoder
.IREG_PRE_A("FALSE"), // Optional Port A input pipeline registers
.IREG_PRE_B("FALSE"), // Optional Port B input pipeline registers
.IS_CLK_INVERTED(1'b0), // Optional inverter for CLK
.IS_EN_A_INVERTED(1'b0), // Optional inverter for Port A enable
.IS_EN_B_INVERTED(1'b0), // Optional inverter for Port B enable
.IS_RDB_WR_A_INVERTED(1'b0), // Optional inverter for Port A read/write select
.IS_RDB_WR_B_INVERTED(1'b0), // Optional inverter for Port B read/write select
.IS_RST_A_INVERTED(1'b0), // Optional inverter for Port A reset
.IS_RST_B_INVERTED(1'b0), // Optional inverter for Port B reset
.OREG_A("FALSE"), // Optional Port A output pipeline registers
.OREG_B("FALSE"), // Optional Port B output pipeline registers
.OREG_ECC_A("FALSE"), // Port A ECC decoder output
.OREG_ECC_B("FALSE"), // Port B output ECC decoder
.RST_MODE_A("SYNC"), // Port A reset mode
.RST_MODE_B("SYNC"), // Port B reset mode
.USE_EXT_CE_A("FALSE"), // Enable Port A external CE inputs for output registers
.USE_EXT_CE_B("FALSE") // Enable Port B external CE inputs for output registers
)
URAM288_BASE_inst (
.DBITERR_A(dout[0]), // 1-bit output: Port A double-bit error flag status
.DBITERR_B(dout[1]), // 1-bit output: Port B double-bit error flag status
.DOUT_A(dout[2]), // 72-bit output: Port A read data output
.DOUT_B(dout[3]), // 72-bit output: Port B read data output
.SBITERR_A(dout[4]), // 1-bit output: Port A single-bit error flag status
.SBITERR_B(dout[5]), // 1-bit output: Port B single-bit error flag status
.ADDR_A(din[0]), // 23-bit input: Port A address
.ADDR_B(din[1]), // 23-bit input: Port B address
.BWE_A(din[2]), // 9-bit input: Port A Byte-write enable
.BWE_B(din[3]), // 9-bit input: Port B Byte-write enable
.CLK(clk), // 1-bit input: Clock source
.DIN_A(din[4]), // 72-bit input: Port A write data input
.DIN_B(din[5]), // 72-bit input: Port B write data input
.EN_A(din[6]), // 1-bit input: Port A enable
.EN_B(din[7]), // 1-bit input: Port B enable
.INJECT_DBITERR_A(din[8]), // 1-bit input: Port A double-bit error injection
.INJECT_DBITERR_B(din[9]), // 1-bit input: Port B double-bit error injection
.INJECT_SBITERR_A(din[10]), // 1-bit input: Port A single-bit error injection
.INJECT_SBITERR_B(din[11]), // 1-bit input: Port B single-bit error injection
.OREG_CE_A(din[12]), // 1-bit input: Port A output register clock enable
.OREG_CE_B(din[13]), // 1-bit input: Port B output register clock enable
.OREG_ECC_CE_A(din[14]), // 1-bit input: Port A ECC decoder output register clock enable
.OREG_ECC_CE_B(din[15]), // 1-bit input: Port B ECC decoder output register clock enable
.RDB_WR_A(din[16]), // 1-bit input: Port A read/write select
.RDB_WR_B(din[17]), // 1-bit input: Port B read/write select
.RST_A(din[18]), // 1-bit input: Port A asynchronous or synchronous reset for output
// registers
.RST_B(din[19]), // 1-bit input: Port B asynchronous or synchronous reset for output
// registers
.SLEEP(din[20]) // 1-bit input: Dynamic power gating control
);
endmodule