参考:
代码部分:
module ram #(parameter RAM_WIDTH = 8 , RAM_DEPTH = 128)(
clk ,
rst ,
wr_en ,
wr_din ,
wr_addr ,
rd_en ,
rd_addr ,
rd_dout
);
//定义一个求2的对数,求位宽
function log2b(input integer data)
begin
for(log2b = 0;data > 0;log2b = log2b + 1)begin
data = data >> 1;
end
end
endfunction
//端口信号定义
input clk ;
input rst ;
input wr_en ;
input [RAM_WIDTH-1:0] wr_din ;
input [log2b(RAM_DEPTH)-2:0] wr_addr ;
input rd_en ;
input [log2b(RAM_DEPTH)-2:0] rd_addr ;
output reg [RAM_WIDTH-1:0] rd_dout ;
//定义内部信号
reg [RAM_WIDTH-1:0] mem [RAM_DEPTH-1:0];
integer i;
always @(posedge clk or negedge rst)begin
if(!rst)begin
for(i=0;i<RAM_DEPTH;i=i+1)
mem[i] <= 0;
end
else if(wr_en) begin
mem[wr_addr] <= wr_din;
end
end
always @(posedge clk or negedge rst)begin
if(!rst)begin
rd_dout <= 0;
end
else if(rd_en) begin
rd_dout <= mem[rd_addr];
end
end
endmodule
版权声明:本文为weixin_45189408原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。