基于Verilog HDL語言的32X8 FIFO設(shè)計(jì)
3 32X8FIFO的Verilog HDL實(shí)現(xiàn)
硬件描述語言Verilog HDL是一種廣泛應(yīng)用于集成電路設(shè)計(jì)的高層次描述語言,適合行為級、寄存器傳輸級和門級等多層次的設(shè)計(jì)和描述,并且具有簡單、易讀、易修改和與工藝無關(guān)等優(yōu)點(diǎn)。因此利用Verilog HDL語言進(jìn)行電路設(shè)計(jì)可以節(jié)約開發(fā)成本和周期。
此32X8FIFO各個(gè)部分均采用Verilog HDL代碼實(shí)現(xiàn)。限于篇幅,下面僅列出FIFOMemery模塊的程序清單。整個(gè)
32X8FIFO設(shè)計(jì)應(yīng)用全球著名EDA軟件供應(yīng)商Synopsys公司的DesignCompiler進(jìn)行了邏輯綜合,并應(yīng)用Synopsys公司的仿真軟件VCS做了仿真驗(yàn)證。(VCS是Synopsys公司的VerilogHDL仿真軟件) FIFO Memery模塊程序清單如下:
module fifo_mem(data,clk,rstN,wrN,rdN,empty,full);
inout [7:0] data;
input clk,rstN,wrN,rdN;
output empty,full;
reg [4:0] _cntr,rd_cntr;
wire [3:0] add;
ram16X8 ram(.data(data),.addr(addr),.wrN(wrN),.oe(wrN));
always @(posedge clk or negedge rstN)
if(!rstN) wr_cntr=0;
else if (!wrN) wr_cntr=wr_cntr+1;
always @ (posedge clk or negedge rstN)
if(!rstN) rd_cntr=0;
else if(!rdN) rd_cntr=rd_cntr+1;
assign addr=wrN?rd_cntr [3:0]: wr_cntr [3:0];
assign empty=(wr_cntr [3:0] == rd_cntr [3:0])!(wr_cntr[4]^rd_cntr[4]);
assign full=(wr_cntr [3:0] ==rd_cntr [3:0])(wr_cntr[4]^rd_cntr[4]);
endmodule
4 結(jié)語
本文通過兩個(gè)分立存儲(chǔ)器間的交替讀、寫機(jī)制,實(shí)現(xiàn)32X8 FIFO的可同時(shí)讀、寫功能,提高了數(shù)據(jù)存取的速度,并且提出了新穎的空、滿標(biāo)志位的實(shí)現(xiàn)方法。采用Verilog HDL硬件描述語言進(jìn)行電路設(shè)計(jì),應(yīng)用Synopsys公司的DesignCompiler和VCS進(jìn)行電路綜合和仿真,電路功能得到驗(yàn)證。
評論