blob: 92e8eaaf36570859129511d0021f6e24a787a927 [file] [log] [blame] [edit]
module top (WA,RA,WD,WClk,RClk,WClk_En,RClk_En,WEN,RD);
input WA;
input RA;
input WClk,RClk;
input WClk_En,RClk_En;
input [1:0] WEN;
input WD;
output RD;
localparam addr_bits = 9;
localparam data_bits = 16;
reg [addr_bits-1:0] wa;
reg [addr_bits-1:0] ra;
reg [data_bits-1:0] wd;
reg [data_bits-1:0] rd;
wire [data_bits-1:0] _rd;
// Note: The following shift regs are there just to reduce the top-level IO
// count.
always @(posedge WClk)
wa <= (wa << 1) | WA;
always @(posedge RClk)
ra <= (ra << 1) | RA;
always @(posedge WClk)
wd <= (wd << 1) | WD;
always @(posedge RClk)
rd <= |WEN ? (rd << 1) : _rd;
assign RD = rd;
r512x16_512x16 the_ram (
.WA (wa),
.RA (ra),
.WD (wd),
.RD (_rd),
.WClk (WClk),
.RClk (RClk),
.WClk_En (WClk_En),
.RClk_En (RClk_En),
.WEN (WEN)
);
endmodule