FPGA----只读存储器(ROM)

   
    ROM是一种重要的时序逻辑存储电路,它的逻辑功能是在地址信号的选择下,从指定存储单元中读取相应的数据。R0M只能进行数据的读取,而不能修改或写人新的数据,本节将以16×8的ROM为例,介绍ROM的设计方法。
 

Verilog HDL:

 1 module ROM_ex1 (addr, data, en);
 2 
 3     input [3:0] addr;//地址选择信号
 4     input en;        //使能端
 5     output reg [7:0] data;//数据输出端
 6     reg[7:0] data1 [15:0];
 7     
 8     always @(*)
 9         begin
10             data1[0]  <= 8'b1010_1001;
11             data1[1]  <= 8'b1111_1101;
12             data1[2]  <= 8'b1110_1001;
13             data1[3]  <= 8'b1101_1100;
14             data1[4]  <= 8'b1011_1001;
15             data1[5]  <= 8'b1100_0010;
16             data1[6]  <= 8'b1100_0101;
17             data1[7]  <= 8'b0000_0100;
18             data1[8]  <= 8'b1110_1100;
19             data1[9]  <= 8'b1000_1010;
20             data1[10] <= 8'b1100_1111;
21             data1[12] <= 8'b1100_0001;
22             data1[13] <= 8'b1001_1111;
23             data1[14] <= 8'b1010_0101;
24             data1[15] <= 8'b0101_1100;
25             if (en)
26                 begin
27                     data[7:0] <= data1[addr];
28                 end 
29             else 
30                 begin 
31                     data[7:0] <= 8'bzzzz_zzzz;
32                 end 
33         end 
34         
35 endmodule

Testbench

 1 `timescale 1 ps/ 1 ps
 2 module ROM_ex1_vlg_tst();
 3     reg [3:0] addr;
 4     reg en;                                             
 5     wire [7:0]  data;
 6 
 7     ROM_ex1 i1 (
 8         .addr(addr),
 9         .data(data),
10         .en(en)
11     );
12     initial                                                
13         begin                                                  
14             addr = 4'd0;
15             en   = 1'b0;
16             #10 addr = 4'd5;
17             en   = 1'b1;
18             #10 addr = 4'd9;
19             #10 addr = 4'd12;
20             #10 addr = 4'd15;
21             $display("Running testbench");                       
22         end                                                    
23 
24 endmodule

仿真波形:

   

    观察波形可知,当 en 为“1”时,data 输出数据,否则 data 为高阻态,addr 为地址选择信号,当其输入不同的值时,data 输出相应的存储的数据。

 
原文地址:https://www.cnblogs.com/yllinux/p/7639171.html