Verilog基礎(chǔ)之十六、RAM實(shí)現(xiàn)
一、前言
????工程設(shè)計(jì)中除邏輯計(jì)算單元外,存儲單元也是不可獲取的部分,RAM(Random Access Memory)隨機(jī)存取存儲器即可以寫入數(shù)據(jù),也可讀取數(shù)據(jù),寫入或讀取的位置由輸入的地址決定。
二、工程設(shè)計(jì)
????RAM作為常用的單元,器件都是自帶對應(yīng)的IP核,可直接創(chuàng)建例化使用,本文將介紹通過IP核以及RTL代碼兩種方式實(shí)現(xiàn)RAM。
????2.1 RAM IP核使用
????先創(chuàng)建工程指定器件,然后在Flow Navigator中進(jìn)入IP Catalog,進(jìn)入創(chuàng)建界面

????進(jìn)入IP Catalog,Search搜索框中輸入查找的IP核RAM,顯示相關(guān)的搜索結(jié)果,此處以“Distributed Memory Generator”為例。

進(jìn)入IP核的設(shè)置窗口,Depth為存儲器的深度,此處設(shè)置的值將決定左側(cè)輸入a的位寬,Data Width為存儲數(shù)據(jù)的位寬,設(shè)置后即為左側(cè)輸入d的位寬。Port config和RST&Initialization為相關(guān)的設(shè)置

設(shè)置完后點(diǎn)擊右下角的OK,成功生成IP核,在Sources窗口可看到生成的IP核,名稱為dist_mem_gen_0;

????2.2 設(shè)計(jì)代碼
設(shè)計(jì)中包含了IP核和RTL生成RAM的方式,IP核的生成方式十分方便,對dist_mem_gen_0進(jìn)行例化即可實(shí)現(xiàn)
2.3 仿真代碼
2.4 綜合結(jié)果
IP核實(shí)現(xiàn)的RAM在Schematic中即為一個(gè)完整的模塊

RTL代碼實(shí)現(xiàn)依賴LUT和FF和RAM網(wǎng)表單元。

2.5?仿真結(jié)果
仿真結(jié)果如下圖
1)在rst為1時(shí)非復(fù)位狀態(tài),we為1處于寫入狀態(tài),因此輸出spo一直為0

2)在we為0處于讀取狀態(tài)時(shí),下圖紅框1,2,3分為別復(fù)位信號rst為1,0,1,為0時(shí)進(jìn)行復(fù)位,在方框2處為復(fù)位狀態(tài),輸出spo輸出為0

3)在rst為1,we為0,即正常的讀取狀態(tài)時(shí),地址addr范圍為0-15,輸入d0范圍為0-31,當(dāng)前地址addr的讀取值為之前的寫入值。
a.在序號1 439ns處,addr為13,輸入d0為13,此時(shí)寫入13;
b.在序號2 441ns處,addr為14,輸入d0為14,此時(shí)寫入14;
c.在序號3 502ns處,此時(shí)讀取地址為13,根據(jù)之前存儲的值為13,因此輸出spo為13.
d.在序號4 506ns處,類似的讀取之前存儲的值14,符合預(yù)期
