第6章 原理圖設(shè)計(jì)及IP調(diào)用_第1頁(yè)
第6章 原理圖設(shè)計(jì)及IP調(diào)用_第2頁(yè)
第6章 原理圖設(shè)計(jì)及IP調(diào)用_第3頁(yè)
第6章 原理圖設(shè)計(jì)及IP調(diào)用_第4頁(yè)
第6章 原理圖設(shè)計(jì)及IP調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章存儲(chǔ)器設(shè)計(jì)第6章存儲(chǔ)器設(shè)計(jì)21ROM設(shè)計(jì)RAM設(shè)計(jì)FIFO設(shè)計(jì)STACK設(shè)計(jì)346.1ROM設(shè)計(jì)

ROM是只讀存儲(chǔ)器(Read-OnlyMemory)的簡(jiǎn)稱,是一種只能讀出事先所存數(shù)據(jù)的固態(tài)半導(dǎo)體存儲(chǔ)器。其特性是一旦儲(chǔ)存資料就無(wú)法再將之改變或刪除。通常用在不需經(jīng)常變更資料的電子或電腦系統(tǒng)中,并且資料不會(huì)因?yàn)殡娫搓P(guān)閉而消失。【例6.1-1】ROM的VerilogHDL實(shí)現(xiàn)。modulemy_rom(clock,rden,address,q); input clock; //系統(tǒng)時(shí)鐘 inputrden; //讀使能信號(hào),高有效 input[4:0]address;//地址信號(hào) outputreg[7:0]q=8'h00;//數(shù)據(jù)信號(hào) reg[7:0]rom[0:31];//rom存儲(chǔ)器6.1ROM設(shè)計(jì) initialbegin $readmemh("my_rom.txt",rom); end//用my_rom.txt文件對(duì)rom初始化 always@(posedgeclock) begin if(rden)q<=rom[address]; elseq<=q; endendmodule6.2RAM設(shè)計(jì)

RAM是隨機(jī)存取存儲(chǔ)器(RandomAccessMemory)的簡(jiǎn)稱,它可以隨時(shí)讀寫(xiě),而且速度很快,通常作為操作系統(tǒng)或其他正在運(yùn)行中的程序的臨時(shí)數(shù)據(jù)存儲(chǔ)媒介。存儲(chǔ)單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲(chǔ)單元的位置無(wú)關(guān)。這種存儲(chǔ)器在斷電時(shí)將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。按照存儲(chǔ)單元的工作原理,RAM又分為靜態(tài)隨機(jī)存儲(chǔ)器(StaticRAM,SRAM)和動(dòng)態(tài)隨機(jī)存儲(chǔ)器(DynamicRAM,DRAM)。【例6.2-1】RAM的VerilogHDL實(shí)現(xiàn)。modulemy_ram(clock,wren,address,data, q); input clock; //系統(tǒng)時(shí)鐘 inputwren; //寫(xiě)使能信號(hào),高有效 input[4:0]address; //地址信號(hào)6.2RAM設(shè)計(jì)

input[7:0]data; //寫(xiě)數(shù)據(jù) outputreg[7:0]q=8'h00;//讀數(shù)據(jù)信號(hào) reg[7:0]ram[0:31];//ram存儲(chǔ)器 //讀操作 always@(posedgeclock) begin//注意因?yàn)橐趯?xiě)期間讀出新數(shù)據(jù),必須將新數(shù)據(jù)data提前送出

if(wren)q<=data;

elseq<=ram[address];

end//寫(xiě)操作

always@(posedgeclock)

begin if(wren)ram[address]<=data;

endendmodule6.3FIFO設(shè)計(jì)

FIFO(FirstInFirstOut)即先進(jìn)先出存儲(chǔ)器,其特點(diǎn)是最先寫(xiě)進(jìn)的數(shù)據(jù)最先從出口讀出。其基本工作方式非常類似地鐵入口的排隊(duì)柵欄,需要檢票的乘客順次通過(guò)入口的隔離門(mén)進(jìn)入柵欄排隊(duì),然后依次從出口檢票離開(kāi),整個(gè)過(guò)程中最先進(jìn)入的乘客最先離開(kāi),所以顧名思義先進(jìn)先出存儲(chǔ)器?!纠?.3-1】FIFO的VerilogHDL實(shí)現(xiàn)。modulemy_fifo(clock, aclr,data,rdreq,wrreq,//input q,empty,full,usedw//output); input clock;//系統(tǒng)時(shí)鐘 inputaclr; //系統(tǒng)復(fù)位,異步高有效 input [7:0]data; //寫(xiě)數(shù)據(jù) input rdreq; //讀請(qǐng)求 input wrreq; //寫(xiě)請(qǐng)求 outputempty; //空標(biāo)志信號(hào) outputfull; //滿標(biāo)志信號(hào) outputreg[7:0]q; //讀出數(shù)據(jù) outputreg[4:0]usedw; //可用資源量 reg[7:0]fifo_ram[0:31]; //存儲(chǔ)器矩陣6.3FIFO設(shè)計(jì)

reg[4:0]rdaddr; //讀地址指針 reg[4:0]wraddr; //寫(xiě)地址指針//FIFO讀操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin q<=8'h00; end elseif(rdreq==1'b1&&empty==1'b0)begin q<=fifo_ram[rdaddr];//讀出對(duì)應(yīng)地址數(shù)據(jù) end elseif(rdreq&&wrreq)begin q<=fifo_ram[rdaddr];//讀出對(duì)應(yīng)地址數(shù)據(jù) end end6.3FIFO設(shè)計(jì)//FIFO寫(xiě)操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin

; end elseif(wrreq==1'b1&&full==1'b0)begin fifo_ram[wraddr]<=data;//將數(shù)據(jù)寫(xiě)入相應(yīng)地址 end elseif(rdreq&&wrreq)begin fifo_ram[wraddr]<=data;//將數(shù)據(jù)寫(xiě)入相應(yīng)地址 end end//指針操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin rdaddr<=4'd0; wraddr<=4'd0; end elsebegin6.3FIFO設(shè)計(jì) wraddr<=((wrreq&&!full)||(wrreq&&rdreq))?wraddr+1:wraddr; rdaddr<=((rdreq&&!empty)||(wrreq&&rdreq))?rdaddr+1:rdaddr; end end//計(jì)算存儲(chǔ)器資源 always@(posedgeclock,posedgeaclr)begin if(aclr)begin usedw<=5'd0; end elsebegin case({wrreq,rdreq}) 2'b00:usedw<=usedw; 2'b01:usedw<=(usedw==5'd0)?5'b00000:usedw-1; 2'b10:usedw<=(usedw==5'd31)?5'b11111:usedw+1; 2'b11:usedw<=usedw; default:usedw<=usedw; endcase end end6.3FIFO設(shè)計(jì)//空標(biāo)志 assignempty=(usedw==5'd0)?1'b1:1'b0;//滿標(biāo)志 assignfull=(usedw==5'd31)?1'b1:1'b0;endmodule6.4STACK設(shè)計(jì)

棧(STACK)是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開(kāi)始彈出數(shù)據(jù)。棧的結(jié)構(gòu)類似桶堆積物品,先堆進(jìn)來(lái)的壓在底下,隨后一件一件往上堆。取走時(shí),只能從上面一件一件取?!纠?.4-1】STACK的VerilogHDL實(shí)現(xiàn)。modulestack(clk,rst_n,rden,wren,wr_data,//input rd_data,empty,full,error//output ); input clk; //系統(tǒng)時(shí)鐘 inputrst_n; //系統(tǒng)復(fù)位信號(hào) input rden; //讀使能信號(hào) input wren; //寫(xiě)使能信號(hào) input[7:0]wr_data; //寫(xiě)數(shù)據(jù) outputreg[7:0]rd_data;//讀數(shù)據(jù) outputempty; //棧空信號(hào) outputfull; //棧滿信號(hào) outputregerror; //錯(cuò)誤告警6.4STACK設(shè)計(jì) reg[7:0]regs[0:31];//寬8深32存儲(chǔ)器 reg[4:0]addr;//棧地址指針寄存器 regfilled;//當(dāng)前地址指針指向存儲(chǔ)器是否填滿,1表示有數(shù)據(jù),0表示無(wú)數(shù)據(jù) assignempty=(addr==5'd0&&filled==1'b0)?1'b1:1'b0; assignfull=(addr==5'd31&&filled==1'b1)?1'b1:1'b0; always@(posedgeclk,negedgerst_n) begin if(!rst_n)begin addr<=5'd0; filled<=1'b0; rd_data<=8'h00; error<=1'b0; end elsebegin case({wren,rden}) 2'b00:; 2'b01:begin if(empty) error<=1'b1;//全空讀告警 else

6.4STACK設(shè)計(jì) if(addr==5'd0&&filled==1'b1) begin rd_data<=regs[addr];//最后一個(gè)數(shù)據(jù)讀出地址不減1 addr<=addr; filled<=1'b0; error<=1'b0; endelse begin rd_data<=regs[addr]; addr<=addr-1'b1; filled<=1'b1; error<=1'b0;

end end 2'b10:begin if(full) error<=1'b1;//全滿寫(xiě)告警 else if(empty)begin regs[addr]<=wr_data;//??諘r(shí)寫(xiě)入地址不加1 rd_data<=wr_data;addr<=addr; filled<=1'b1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論