1. 程式人生 > >FPGA----只讀存儲器(ROM)

FPGA----只讀存儲器(ROM)

設計 -- cal play tar 不同 span output 地址

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] <= 8b1010_1001; 11 data1[1] <= 8b1111_1101; 12 data1[2] <= 8b1110_1001; 13 data1[3] <= 8b1101_1100; 14 data1[4] <= 8b1011_1001; 15 data1[5] <= 8b1100_0010; 16 data1[6] <= 8
b1100_0101; 17 data1[7] <= 8b0000_0100; 18 data1[8] <= 8b1110_1100; 19 data1[9] <= 8b1000_1010; 20 data1[10] <= 8b1100_1111; 21 data1[12] <= 8b1100_0001; 22 data1[13] <= 8b1001_1111; 23 data1[14] <= 8b1010_0101; 24 data1[15
] <= 8b0101_1100; 25 if (en) 26 begin 27 data[7:0] <= data1[addr]; 28 end 29 else 30 begin 31 data[7:0] <= 8bzzzz_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 = 4d0;
15             en   = 1b0;
16             #10 addr = 4d5;
17             en   = 1b1;
18             #10 addr = 4d9;
19             #10 addr = 4d12;
20             #10 addr = 4d15;
21             $display("Running testbench");                       
22         end                                                    
23 
24 endmodule

仿真波形:

技術分享

觀察波形可知,當 en 為“1”時,data 輸出數據,否則 data 為高阻態,addr 為地址選擇信號,當其輸入不同的值時,data 輸出相應的存儲的數據。

參考:

Verilog常見寄存器類型

verilog中寄存器變量理解

FPGA----只讀存儲器(ROM)