题解 | #ROM的简单实现#
ROM的简单实现
https://www.nowcoder.com/practice/b76fdef7ffa747909b0ea46e0d13738a
注意下降沿,addr改变,输出data也要改变,所以输出要用组合逻辑,写到题目外面。
注意rom常用的初始化以及读写操作。
`timescale 1ns/1ns module rom( input clk, input rst_n, input [7:0]addr, output [3:0]data ); reg [3:0] rom_1 [7:0]; reg [3:0] data_out; genvar i; generate for (i=0;i<8;i=i+1) begin :rom_1_1 always@(posedge clk or negedge rst_n)begin if (~rst_n) rom_1[i] = 2*i; else rom_1[i] = rom_1[i]; end end endgenerate assign data =rom_1[addr]; endmodule
错误图案:
错误代码
`timescale 1ns/1ns module rom( input clk, input rst_n, input [7:0]addr, output [3:0]data ); reg [3:0] rom_1 [7:0]; reg [3:0] data_out; genvar i; generate for (i=0;i<8;i=i+1) begin :rom_1_1 always@(posedge clk or negedge rst_n)begin if (~rst_n) rom_1[i] = 2*i; else data_out = rom_1[addr]; end end endgenerate assign data =data_out; endmodule