This repository has been archived on 2026-08-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ciciec2026/sim/sram.v

56 lines
1.6 KiB
Verilog
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
`timescale 1ns/100ps
module sram_sp #(
parameter AW = 16,
parameter Init_File = "none"
)
(
inout [31:0] ram_data, //BaseRAM数据,低8位与CPLD串口控制器共享
input [19:0] ram_addr, //BaseRAM地址
input [ 3:0] ram_be_n, //BaseRAM字节使能,低有效。如果不使用字节使能,请保持为0
input ram_ce_n, //BaseRAM片选,低有效
input ram_oe_n, //BaseRAM读使能,低有效
input ram_we_n //BaseRAM写使能,低有效
);
localparam AWT = ((1<<(AW-0))-1);
reg [31:0] BRAM [AWT:0];
initial begin
if(Init_File != "none") begin
$readmemb(Init_File,BRAM);
end
end
reg [AW-1:0] addr_q1;
wire [3:0] write_enable;
assign write_enable[3:0] = (~ram_be_n) & {4{(~ram_ce_n) & (~ram_we_n)}};
always@(posedge write_enable[0]) begin
#10;
if(~ram_be_n[0]) begin
BRAM[ram_addr][7:0] <= ram_data[7:0];
if (ram_addr >= 10'd320 && ram_addr < 10'd400)
$display("SRAM WR addr=%d data=%08x be0=%b", ram_addr, ram_data, ram_be_n[0]);
end
always@(posedge write_enable[1]) begin
#10;
if(~ram_be_n[1]) BRAM[ram_addr][15:8] <= ram_data[15:8];
end
always@(posedge write_enable[2]) begin
#10;
if(~ram_be_n[2]) BRAM[ram_addr][23:16] <= ram_data[23:16];
end
always@(posedge write_enable[3]) begin
#10;
if(~ram_be_n[3]) BRAM[ram_addr][31:24] <= ram_data[31:24];
end
wire [31:0] RDATA = BRAM[ram_addr];
assign ram_data = ((~ram_ce_n) & (~ram_oe_n)) ? RDATA : 32'hzzzzzzzz;
endmodule