FPGA----只讀存儲器(ROM)
阿新 • • 發佈:2017-10-09
設計 -- 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] <= 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 輸出相應的存儲的數據。
參考:Verilog常見寄存器類型
verilog中寄存器變量理解
FPGA----只讀存儲器(ROM)