题解 | #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

全部评论

相关推荐

10-01 09:50
门头沟学院 Java
肖先生~:这个人真的很好,点赞
点赞 评论 收藏
分享
08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务