题解 | #RAM的简单实现#

`timescale 1ns/1ns
module ram_mod(
	input clk,
	input rst_n,
	
	input write_en,
	input [7:0]write_addr,
    input [3:0]write_data,
	
	input read_en,
	input [7:0]read_addr,
	output reg [3:0]read_data
);
    reg [3:0] myRAM [7:0];
    
    reg [8:0] i;
  	// integer i; // 不可综合
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            for(i=0;i<256;i=i+1)
                myRAM[i] <= 0;
        else
            myRAM[write_addr] <= write_en? write_data: myRAM[write_addr];
    end
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            read_data <= 0;
        else
            read_data <= read_en? myRAM[read_addr]: read_data;
    end
endmodule
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
題目確實有bug,addr是3位元才對,我把write_addr跟read_addr改成[2:0]是能通過的,另外,integer是可以綜合的! 以下是我的代碼: parameter WIDTH=4, DEPTH=8; integer i; reg [WIDTH-1:0] RAM [DEPTH-1:0]; always@(posedge clk, negedge rst_n) begin if(!rst_n) begin for(i=0;i
1 回复 分享
发布于 2023-04-03 06:56 台湾
这样不对呀,read_data会比read_en慢一拍,和题目的时序图并不一致。
1 回复 分享
发布于 2023-08-10 16:08 湖南
途虎
校招火热招聘中
官网直投
integer 好像不能综合吧
点赞 回复 分享
发布于 2022-06-01 15:28
不能综合吗
点赞 回复 分享
发布于 2023-02-12 21:13 陕西
RAM深度题目给的8,请问为什么myRAM定义256呢?(为什么不是8呢)
点赞 回复 分享
发布于 2023-02-17 20:46 江苏
为什么不是通过reg [WIDTH-1:0] ram [$clog2(DEPTH)-1:0]?深度为8应该是reg [WIDTH-1:0]ram [2:0]吧?
点赞 回复 分享
发布于 2023-03-11 15:25 四川

相关推荐

7 1 评论
分享
牛客网
牛客企业服务