xilinx fpga中塊ram的使用——簡單雙端口ram的使用
阿新 • • 發佈:2018-06-04
int col date rom sed del integer mode reg
在簡單雙端口ram中最簡單有9個端口:分別是
clka 為輸入端口的時鐘
wea 讀寫控制端,高為寫,低為讀
addra 寫地址
dina 待寫入的數據
clkb 為輸出端口的時鐘的
addrb 讀地址
doutb 讀出的數據
在ip核中還可以加入ena/enb端口,這兩個端口的作用是控制相應寫入和讀出端口的數據,為高是正常寫入或讀出,為低時寫入為0,讀出為0。
也可以加入復位端口rst,不過復位有兩種優先級CE和SR,選擇CE時,rst的優先級低於ENA的優先級;選擇SR時,rst的優先級高於ENA的優先級。
還可以選擇復位的方式,同步還是異步,一般選擇同步。
端口介紹完後,就開始使用雙端口ram,工作方式是:可以寫入也可以預先用coe文件存入數據,寫入數據後就可以讀取數據了 ,這裏的讀取數據和rom的相同,寫入地址是多少,就去讀取相應地址的數據。
雙端口ram和單端口的ram不同,單端口的ram讀取數據方式是,寫入數據的下一個時鐘自動輸出數據,僅可用於流水線式數據處理。
這裏寫了一個簡單雙端口的ram測試代碼
1 `timescale 1ns / 1ps 2 `define clk_period 20 3 //////////////////////////////////////////////////////////////////////////////// 4 // Company: 5 // Engineer: 6 // 7 // Create Date: 11:39:21 06/04/2018 8 // Design Name: ram 9 // Module Name: E:/digital image processing/finial_code/ram_test/testbench/ram_tb.vtestbench10 // Project Name: ram_test 11 // Target Device: 12 // Tool versions: 13 // Description: 14 // 15 // Verilog Test Fixture created by ISE for module: ram 16 // 17 // Dependencies: 18 // 19 // Revision: 20 // Revision 0.01 - File Created 21 // Additional Comments: 22 // 23 //////////////////////////////////////////////////////////////////////////////// 24 25 module ram_tb; 26 27 // Inputs 28 regclka; 29 reg ena; 30 reg [0:0] wea; 31 reg [3:0] addra; 32 reg [7:0] dina; 33 reg clkb; 34 reg enb; 35 reg [3:0] addrb; 36 reg clk; 37 38 // Outputs 39 wire [7:0] doutb; 40 41 // Instantiate the Unit Under Test (UUT) 42 ram uut ( 43 .clka(clk), 44 .ena(ena), 45 .wea(wea), 46 .addra(addra), 47 .dina(dina), 48 .clkb(clk), 49 .enb(enb), 50 .addrb(addrb), 51 .doutb(doutb) 52 ); 53 integer i; 54 initial clk = 1; 55 always #(`clk_period/2)clk = ~clk; 56 initial begin 57 // Initialize Inputs 58 ena = 1; 59 enb = 1; 60 wea = 0; 61 dina = 0; 62 addra = 0; 63 addrb = 0; 64 #(`clk_period*20 +1 ); 65 for (i=0;i<=15;i=i+1)begin 66 wea = 1; 67 dina = 255 - i; 68 addra = i; 69 #`clk_period; 70 end 71 wea = 0; 72 #(`clk_period*20); 73 /*for (i=0;i<=15;i=i+1)begin 74 addrb = i; 75 #`clk_period; 76 end */ 77 addrb = 4; 78 #`clk_period; 79 addrb = 2; 80 #`clk_period; 81 addrb = 10; 82 #`clk_period; 83 84 // Wait 100 ns for global reset to finish 85 #100; 86 87 // Add stimulus here 88 89 end 90 91 endmodule
modelsim的仿真結果為:
xilinx fpga中塊ram的使用——簡單雙端口ram的使用