日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FIFO跨时钟域读写

發布時間:2025/7/25 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FIFO跨时钟域读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 今天面試,要走時問了我一個問題:如果兩個時鐘一個時鐘慢一個時鐘快,來讀寫FIFO,其中讀出的數據是

? ?連續的一段一段的。

? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1?

? ? 圖1為寫時序控制,可以看出數據是兩個時鐘周期的長度,當然實際中可以是任意周期的長度。

? ? ?

?

? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2 ?

? ? 圖2為讀時序,ren使能的長度也可以是任意,但是我以為一點是必須保證的,那就是讀寫數據的速率依然是相等的。

?

? ? 在讀寫數據相等,讀寫數據都是周期性的前提下,我認為只要對FIFO直接進行讀寫就可以,不要求對數據進行任何緩存,

但是為防止讀寫沖突,可以緩存幾個數據。那么重點就在于產生讀寫使能就行了。

?

? ??

`timescale 1ns / 1ps //module fifo_trans(wr_clk,rd_clk,cfg_rf_iq,//一個幀中有效使能的長度cfg_start_wn,//一個幀中有效使能的位置din_iq,nd,wn_rx, dout_iq);parameter CPRI_CFG_BITS = 4'd6;parameter CPRI_DATA_BITS = 6'd18; parameter CPRI_WN_BITS = 4'd6;parameter CPRI_FRAME_LEN = 6'd40;parameter CPRI_BFN_BITS = 4'd12;parameter CPRI_HYPER_LEN = 12'd1024;parameter FIFO_WR_NUM =6'd6;input wr_clk;input rd_clk;input [CPRI_CFG_BITS-1:0]cfg_rf_iq;input [CPRI_CFG_BITS-1:0]cfg_start_wn;input [CPRI_DATA_BITS-1:0]din_iq;input nd;input [CPRI_WN_BITS-1:0]wn_rx;output [CPRI_DATA_BITS-1:0] dout_iq ;reg [CPRI_DATA_BITS-1:0] dout_iq=0 ;reg [CPRI_CFG_BITS-1:0]fifo_wr_start=0;reg [CPRI_CFG_BITS-1:0] fifo_rd_start=0;reg [CPRI_CFG_BITS-1:0] fifo_rd_end=0;reg rd_valid=0;reg rd_en=0;reg rd_en_reg1=0; wire empty;wire [CPRI_DATA_BITS-1:0] fifo_dout ; wire [5:0] wr_data_count ; wire [5:0] rd_data_count ;always @ ( posedge rd_clk )beginfifo_rd_start <= cfg_start_wn -8'd1;endalways @ ( posedge rd_clk )beginfifo_rd_end <= fifo_rd_start+cfg_rf_iq;endalways @( posedge rd_clk )beginif(rd_data_count >= FIFO_WR_NUM )rd_valid <= 1'b1;end always @(posedge rd_clk)beginif(empty|(!rd_valid))beginrd_en <= 0;endelse if(wn_rx==fifo_rd_start)beginrd_en <= 1; endelse if(wn_rx==fifo_rd_end)beginrd_en <= 0;endenddp_fifo_ip u_dp_fifo ( // .rst (1'b0),//~sys_rst_n ), .wr_clk (wr_clk ),.rd_clk (rd_clk ),.din (din_iq ),.wr_en (nd ),.rd_en (rd_en ),.dout (fifo_dout ), // .wr_data_count (wr_data_count ),.rd_data_count (rd_data_count ), // output wire [7 : 0] rd_data_count .full ( ),.empty (empty ));always@(posedge rd_clk)beginrd_en_reg1 <= rd_en ;endalways@(posedge rd_clk)beginif(rd_en_reg1)dout_iq <= fifo_dout;elsedout_iq <= 0;endendmodule

?

??

轉載于:https://www.cnblogs.com/zhongguo135/p/6012467.html

總結

以上是生活随笔為你收集整理的FIFO跨时钟域读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。