题解 | #ROM的简单实现#

ROM的简单实现

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

设计一个ROM并对其进行初始化

对于一个ROM,既要有数据位宽,也要有数据深度,例如

reg [3:0] rom  [7:0]

表示,由8个,位宽为4bits的连续地址组成一个名为rom的区域

初始化就简单了,直接时序逻辑对rom的不同地址赋值

由addr提取rom的数据时,应注意使用时序逻辑,因为data随着addr的变化立即发生变化,且是wire型

代码如下

`timescale 1ns/1ns
module rom(
	input clk,
	input rst_n,
	input [7:0]addr,
	
	output [3:0]data
);

    reg [3:0] rom [7:0];
    
    always @(posedge clk or negedge rst_n)
        if(!rst_n) begin
            rom[0] <= 4'd0;
            rom[1] <= 4'd2;
            rom[2] <= 4'd4;
            rom[3] <= 4'd6;
            rom[4] <= 4'd8;
            rom[5] <= 4'd10;
            rom[6] <= 4'd12;
            rom[7] <= 4'd14;  
        end
        else begin
            rom[0] <= 4'd0;
            rom[1] <= 4'd2;
            rom[2] <= 4'd4;
            rom[3] <= 4'd6;
            rom[4] <= 4'd8;
            rom[5] <= 4'd10;
            rom[6] <= 4'd12;
            rom[7] <= 4'd14;  
        end

    assign data = rom[addr];
endmodule
全部评论
地址错了,需要用前边的83译码器把1000_0000~0000_0001转换成000~111才能正确取数,不然都取到256去了,哪有这么深?
点赞 回复 分享
发布于 2022-06-18 11:31
请问代码中的rst_n信号有什么用呢??
点赞 回复 分享
发布于 2023-07-16 17:12 北京

相关推荐

点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务