| |
| 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 |