設計背景:
隨機存取存儲器(random access memory,RAM)又稱作"隨機存儲器",是與CPU直接交換數據的內部存儲器,也叫主存(內存)。它可以隨時讀寫,而且速度很快,通常作為操作系統或其他正在運行中的程序的臨時數據存儲媒介。
存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。這種存儲器在斷電時將丟失其存儲內容,故主要用于存儲短時間使用的程序。 按照存儲單元的工作原理,隨機存儲器又分為靜態隨機存儲器(英文:Static RAM,SRAM)和動態隨機存儲器(英文Dynamic RAM,DRAM)。
設計原理:
本次設計我們通過調用我們的RAM的IP核來給它寫我們的控制器,來實現RAM的可讀可寫的特點。
我們設計的是RAM的深度為256,我們先寫256個數,然后再讀出我們寫的256個數。值得一說的是,我們的讀寫標志是高位為寫標志,低位為讀標志。
設計步驟,打開我么的調用IP核的界面,然后下一步:
在下面的選項中選出我們RAM,如圖所示,然后起一個我們的輸出名,然后下一步:
在下面的頁面中我們設置我們的位寬和深度,然后設置如下,下一步:
下面的頁面中,問我們設置不設置我們的輸出寄存器,我們不要設置,如下,然后下一步:
然后下一步,下一步,直接到下面的界面,選擇生成.inst文件,然后完成。
設計架構圖:
設計代碼:
頂層模塊
0moduleram(clk ,rst_n ,q); //輸入輸出端口設置
1 inputclk;
2 inputrst_n;
3
4 output[7:0]q;
5
6 wire[7:0]data;
7 wirewren;
8 wire[7:0]address;
9
10 ram_contl ram_contl( //例化我們的RAM控制器
11 .clk(clk),
12 .rst_n(rst_n),
13 .data(data),
14 .wren(wren),
15 .address(address)
16 );
17 my_ram my_ram_inst ( //例化ip核
18 .address (address),
19 .clock (clk),
20 .data (data),
21 .wren (wren ),
22 .q (q)
23 );
24endmodule
設計模塊
0moduleram_contl(clk,rst_n,data,wren,address);
1 inputclk;
2 inputrst_n;
3
4 outputreg[7:0]data; //輸出
5 outputregwren; //讀寫位
6 outputreg[7:0]address; //地址位
7
8 regstate;
9 always@(posedgeclk ornegedgerst_n)
10 if(!rst_n)
11 begin
12 data <=8'b0;
13 wren <=1'b0;
14 address <=8'b0;
15 state <=1'b0;
16 end
17 else
18 begin
19 case(state)
20 0:begin
21 wren <=1'b1; //打開寫使能,寫我們的數據
22 if(address <255)
23 begin
24 address <=address +1'b1;//地址加一,
25 data <=data +1'b1;//數據加一
26 end
27 else
28 begin
29 address <=1'b0; //寫完后打開讀
30 data <=1'b0;
31 state <=1;
32 wren <=1'b0;
33 end
34 end
35 1:begin
36 if(address <255) //讀出我們的數據
37 begin
38 address <=address +1'b1;
39 end
40 else
41 begin
42 address <=1'b0;
43 state <=0;
44 end
45 end
46 default:state <=0;
47 endcase
48 end
49endmodule
測試模塊
0`timescale1ns/1ps
1
2moduleram_tb();
3 regclk;
4 regrst_n;
5
6 wire[7:0]q;
7
8 initialbegin
9 clk =1'b1;
10 rst_n =1'b0;
11
12 #100.1rst_n =1'b1;
13
14 #200000.1$stop;
15
16 end
17
18 always#10clk =~clk;
19
20ramram_dut (
21 .clk(clk),
22 .rst_n(rst_n),
23 .q(q)
24 );
25
26endmodule
仿真圖:
在圖中我們可以看到,我們寫入的數據,和我們讀出的數據是相同的。
-
FPGA
+關注
關注
1631文章
21806瀏覽量
606654
發布評論請先 登錄
相關推薦
基于FPGA的數據采集控制器IP核的設計方案和實現方法研究
基于Avalon總線的可配置LCD控制器IP核的設計
基于FPGA的SOC外部組件控制器IP的設計
![基于<b class='flag-5'>FPGA</b>的SOC外部組件<b class='flag-5'>控制器</b><b class='flag-5'>IP</b>的設計](https://file1.elecfans.com//web2/M00/A6/18/wKgZomUMO7WAHagfAAAOG5Gduzw101.jpg)
學習SDRAM控制器設計 能讓你掌握很多FPGA知識
FPGA實現基于Vivado的BRAM IP核的使用
FPGA學習筆記:PLL IP核的使用方法
![<b class='flag-5'>FPGA</b><b class='flag-5'>學習</b>筆記:PLL <b class='flag-5'>IP</b><b class='flag-5'>核</b>的使用方法](https://file1.elecfans.com/web2/M00/94/47/wKgaomTkXFuAEJJkAABDBBcGgk8645.jpg)
評論