有一種方法是用異步FIFO來(lái)處理跨時(shí)鐘域處理
在進(jìn)修跨時(shí)鐘域處理的時(shí)候,有一種方法是用異步FIFO來(lái)處理跨時(shí)鐘域處理的
\\\插播一條:
自己在今年整理一套單片機(jī)單片機(jī)相關(guān)論文800余篇
論文制作思維導(dǎo)圖
原理圖+源代碼+開(kāi)題報(bào)告+正文+外文資料
想要的同學(xué)私信找我。
在進(jìn)修跨時(shí)鐘域處理的時(shí)候,有一種方法是用異步FIFO來(lái)處理跨時(shí)鐘域處理的。那么在這之前先看看同步FIFO實(shí)現(xiàn)。
所謂同步FIFO,就是讀寫(xiě)時(shí)鐘是同一個(gè)時(shí)鐘頻次。本次實(shí)現(xiàn)是通過(guò)計(jì)數(shù)器的形式來(lái)實(shí)現(xiàn)滿空標(biāo)志。詳細(xì)實(shí)現(xiàn)如下:
module fifo_sync(
input clk,
inputrst_n,
input[7:0]datain, //輸寫(xiě)數(shù)據(jù)inputwr, //寫(xiě)請(qǐng)求inputrd, //讀請(qǐng)求
outputreg[7:0] dataout, //輸出數(shù)據(jù)outputempt, //空標(biāo)志outputfull //滿標(biāo)志);
//定義寄存器reg [3:0]cnt; //計(jì)數(shù)器用于計(jì)算FIFO中寄存了多少數(shù)據(jù),方便提供滿空標(biāo)志reg [3:0]wr_ptr, rd_ptr; //讀寫(xiě)指針reg[7:0]fifo_mem[15:0]; //定義16個(gè)8位的寄存器用于寄存數(shù)據(jù),FIFO管道//定義狀態(tài)parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
//用一段式狀態(tài)機(jī)簡(jiǎn)略實(shí)現(xiàn)FIFOalways @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
cnt
wr_ptr
rd_ptr
dataout
end
else begin
case ({rd,wr})
S0 : begin //空閑cnt
wr_ptr
rd_ptr
dataout0;
end
S1:begin//寫(xiě)FIOFif(!full)begin
fifo_mem[wr_ptr]datain;
wr_ptrwr_ptr+1'b1;
rd_ptrrd_ptr;
cntcnt+1'b1;
dataout0;
end
end
S2:begin//讀FIFOif(!empt)begin
dataoutfifo_mem[rd_ptr];
rd_ptrrd_ptr+1'b1;
wr_ptrwr_ptr;
cntcnt-1'b1;
end
end
S3:begin//同時(shí)讀寫(xiě)FIFOif(!full)begin
fifo_mem[wr_ptr]datain;
wr_ptrwr_ptr+1'b1;
end
if(!empt)begin
dataoutfifo_mem[rd_ptr];
rd_ptrrd_ptr+1'b1;
end
end
default:;
endcase
endend
//滿空標(biāo)志信號(hào)產(chǎn)生assignfull=(cnt==4'd15);assignempt=(cnt==4'd0);
endmodule
簡(jiǎn)單的測(cè)試:
`timescale1ns/1nsmodulefifo_sync_tb();
regclk;regrst_n;reg[7:0]datain;regwr,rd;
wire[7:0]dataout;wireempt;wirefull;
initialbeginclk=1'b1;rst_n=1'b0;datain=0;wr=1'b0;rd=1'b0;#50rst_n=1'b1;#40wr=1'b1;#20rd=1'b1;#20rd=1'b0;#170wr=1'b0;#200rd=1'b1;#40rd=1'b0;#500$stop;end
always#5clk=~clk;
always@(posedgeclk)begin
dataindatain+1'b1;end
fifo_syncfifo(
.clk(clk),
.rst_n(rst_n),
.datain(datain),//輸入數(shù)據(jù).wr(wr),//寫(xiě)請(qǐng)求.rd(rd),//讀請(qǐng)求
.dataout(dataout),//輸出數(shù)據(jù).empt(empt),//空標(biāo)志.full(full)//
【文章福利】:小編整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!~點(diǎn)擊綠色通訊軟件搜索airuimcu加入。