题解 | #单端口RAM#

单端口RAM

http://www.nowcoder.com/practice/a1b0c13edba14a2984e7369d232d9793

`timescale 1ns/1ns

module RAM_1port(
    input clk,
    input rst,
    input enb,
    input [6:0]addr,
    input [3:0]w_data,
    output wire [3:0]r_data
);
//*************code***********//
    reg [3:0] myRAM [127:0];
    reg [3:0] r_data_r;
    
  	// 写入RAM
    genvar i;
    generate
        for(i=0;i<128;i=i+1)
            always@(posedge clk or negedge rst) begin
                if(~rst)
                    myRAM[i] <= 0;
                else
                    myRAM[addr] <= enb? w_data: myRAM[addr];
            end
                    
    endgenerate
            
  	// 读取RAM
    always@(*) begin
        if(~rst)
            r_data_r <= 0;
        else
            r_data_r <= ~enb? myRAM[addr]: r_data_r;
    end

    assign r_data = r_data_r;
//*************code***********//
endmodule
Verilog篇题解 文章被收录于专栏

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

全部评论
我小白,问一下generate for 不是要有begin end和还有一个名字吗
1 回复 分享
发布于 2022-09-16 10:32 北京
读RAM如果enb为一不是应该读取0数据吗?为什么读取的是之前的数据
1 回复 分享
发布于 2023-03-10 15:14 江苏
为什么for循环,直接 myRAM[addr]<=0; myRAM[addr]<=enb?w_data:myRAM[addr];来给myRAM赋值也通过了。 会导致什么问题么?
1 回复 分享
发布于 2023-04-17 18:33 新加坡
为什么读RAM,用组合电路来实现
点赞 回复 分享
发布于 2022-06-29 21:19
为什么ram深度要设为[127:0],而不是[6:0]
点赞 回复 分享
发布于 2022-08-17 16:23 浙江
for 语句那里应该是i<127才对
点赞 回复 分享
发布于 2023-03-10 15:13 江苏

相关推荐

海康 嵌入式软开岗位 14k*15
点赞 评论 收藏
分享
点赞 评论 收藏
分享
9 收藏 评论
分享
牛客网
牛客企业服务