题解 | #ROM的简单实现#

ROM的简单实现

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

好家伙,只要初始化了rom的值,addr一变data立刻变化,不是等clk上升沿才变化的,所以data的表达式一定是个组合逻辑且不能放在always+clk里。

在always 时序电路里对rom进行初始化后数值就不变了 (如果改成ram可以根据时钟写入数据,相同一个addr要在写入新数据后data才会发生变化--> data 的变化是配合时钟来的; 不同的addr 变化立刻发生--> 表现出来data未配合时钟)

`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)
begin
	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] <= rom[0];
	rom[1] <= rom[1];
	rom[2] <= rom[2];
	rom[3] <= rom[3];
	rom[4] <= rom[4];
	rom[5] <= rom[5];
	rom[6] <= rom[6];
	rom[7] <= rom[7];
	end

end

assign data = rom[addr];



endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
吃不饱的肱二头肌很想退休:tnnd 我以为选妹子呢,亏我兴高采烈的冲进来😠
投递快手等公司10个岗位
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务