题解 | #ROM的简单实现#
ROM的简单实现
https://www.nowcoder.com/practice/b76fdef7ffa747909b0ea46e0d13738a
本题主要的知识点是ROM的初始化和寻址,初始化可以申请一块内存,利用for语句和移位操作,而寻址直接采用case语句,注意输出的实时性所以采用组合逻辑 `timescale 1ns/1ns module rom( input clk, input rst_n, input [7:0]addr, output [3:0]data ); reg [3:0] data_t; reg [3:0] rom_mem[7:0]; assign data = data_t; integer i; always@(*) //由于输出要求实时性,所以不能采用时序逻辑,而是组合逻辑 begin if(!rst_n) begin data_t <= 4'b0; for(i = 0 ; i < 8 ; i = i + 1) begin rom_mem[i] = i << 1; //初始化的位置放置在了复位的阶段,同时利用一个for操作可以进行初始化,不要采用乘法等操作,可以直接进行移位代替乘法 end end else begin case(addr) 8'd0 : data_t <= rom_mem[0]; 8'd1 : data_t <= rom_mem[1]; 8'd2 : data_t <= rom_mem[2]; 8'd3 : data_t <= rom_mem[3]; 8'd4 : data_t <= rom_mem[4]; 8'd5 : data_t <= rom_mem[5]; 8'd6 : data_t <= rom_mem[6]; 8'd7 : data_t <= rom_mem[7]; default : data_t <= 4'b0; endcase end end endmodule
