色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FIFO IP核的使用教程

FPGA設計論壇 ? 來源:CSDN技術社區LuBake ? 2025-01-03 09:36 ? 次閱讀

引言

在數字設計中,利用FIFO進行數據處理是非常普遍的應用,例如,實現時鐘域交叉、低延時存儲器緩存、總線位寬調整等。下圖給出了FIFO生成器支持的一種可能配置。

b6ad08ce-c8ce-11ef-9310-92fbcf53809c.png

設計中有兩個獨立的時鐘域并且讀數據總線的位寬是寫數據總線位寬的2倍。使用FIFO生成器可以快速實現這種配置,從而在Xilinx FPGA芯片上實現特定的設計要求。

實際應用案例:本案例背景是將信號處理系統中ADC采集到的數據寫入FPGA芯片外掛的DDR3,完成采樣數據的存儲。ADC采樣率設定為96Mhz,兩個采樣點(兩個16bit數據拼接成一個32bit)為單位,DDR讀寫時鐘速率為150Mhz,總線數據位寬64bit,二者時鐘域、位寬均不同,故需在中間加入一級FIFO,從而實現時鐘域的交叉以及總線位寬的調整。

下面將從FIFO IP核的創建,模塊程序編寫,功能仿真驗證等三個方面完成本案例的介紹:

1)FIFO IP核的創建:打開Vivado軟件(本例程基于Vivado 2018.3版本)IP catalog一欄,輸入FIFO,雙擊進入如下界面,第一個Basic選項卡主要是設置FIFO接口類型,可設置為正常的Native模式或AXI總線接口,一般我們選擇Native即可。然后選擇FIFO實現的類型:讀寫使用獨立時鐘還是同一時鐘,實現時使用分布式RAM、Block RAM還是專用的FIFO等等,這里我們選擇Independent Clocks Block RAM,即獨立時鐘塊RAM的FIFO。

b6b44080-c8ce-11ef-9310-92fbcf53809c.png

切換至第二個Native Ports選項卡,這個界面主要是設置讀寫數據位寬、深度以及一些端口的使能、端口復位值等的設置。結合本案例的應用,設置寫位寬為32bit,深度設置為1024,讀位寬設置為64bit。使能復位管腳,設置滿信號(Full Flags)的復位值為0,讀數據(Dout)復位值為0。

b6cd359a-c8ce-11ef-9310-92fbcf53809c.png

然后切換至第三個Status Flags選項卡,本選項卡是設置其余一些可選的標志信號,本案例需使用本界面下的Programmable Flags,即可編程的標志信號,設置滿標志門限置位值(Full Threshold Assert Value),可使FIFO寫入的數據總數大于等于該值后將prog_full(可編程滿標志信號)拉高,相比full信號使用起來更靈活。DDR讀寫采用Burst方式(突發傳輸),一次連續寫入256個數,這里設置Full Threshold Assert Value為512(256*2,2是FIFO讀寫位寬的比值),當FIFO寫入512個數后,prog_full拉高,進行FIFO讀操作,一次連續讀256個64bit的數(對應寫的512個32bit數)存入DDR。

b6e399f2-c8ce-11ef-9310-92fbcf53809c.png

切換至第四個Data Counts選項卡,本選項卡主要是選擇是否使用讀寫數據計數,本案例不使用計數,此頁面保持默認設置。

b6f7db1a-c8ce-11ef-9310-92fbcf53809c.png

最后Summary選項卡是FIFO設置后的各項信息,可核對FIFO設置是否正確及設計是否滿足要求。

b714d850-c8ce-11ef-9310-92fbcf53809c.png

2)模塊程序的編寫

頂層模塊:FIFO_test.v

module FIFO_test(

input rst,

input wr_clk,

input rd_clk,

input [31:0] din,

input wr_en,

input rd_en,

output [63:0] dout,

output full,

output empty,

output prog_full,

output wr_rst_busy,

output rd_rst_busy

);

fifo_generator_0 U_fifo (

.rst(rst), // input wire rst

.wr_clk(wr_clk), // input wire wr_clk

.rd_clk(rd_clk), // input wire rd_clk

.din(din), // input wire [31 : 0] din

.wr_en(wr_en), // input wire wr_en

.rd_en(rd_en), // input wire rd_en

.dout(dout), // output wire [63 : 0] dout

.full(full), // output wire full

.empty(empty), // output wire empty

.prog_full(prog_full), // output wire prog_full

.wr_rst_busy(wr_rst_busy), // output wire wr_rst_busy

.rd_rst_busy(rd_rst_busy) // output wire rd_rst_busy

);

endmodule

TestBench模塊:FIFO_sim

module FIFO_sim;

reg rst;

reg wr_clk;

reg rd_clk;

reg [31:0] din;

reg wr_en;

reg rd_en;

wire [63:0] dout;

wire full;

wire empty;

wire prog_full;

wire wr_rst_busy;

wire rd_rst_busy;

initial begin

rst = 1;

wr_clk = 0;

wr_en = 0;

rd_clk = 0;

rd_en = 0;

din = 0;

#1000

rst = 0;

end

always #10.4167 wr_clk = ~wr_clk;

always #3.3333 rd_clk = ~rd_clk;

always @(posedge wr_clk) begin

if(!wr_rst_busy && !rst) begin

wr_en <= 1'b1;

din <= din + 1'b1;

end

end

reg [1:0] RD_state = 2'b01;

reg [15:0] rd_count = 'd0;

always @(posedge rd_clk) begin

case(RD_state)

2'b01: begin

if(!rd_rst_busy && prog_full) RD_state <= 2'b10;

end

2'b10: begin

if(rd_count >= 'd256) begin

RD_state <= 2'b01;

rd_count <= 'd0;

rd_en <= 1'b0;

end

else begin

rd_count <= rd_count + 1'b1;

rd_en <= 1'b1;??

end

end

default: begin

RD_state <= 2'b01;

end

endcase

end

FIFO_test U_FIFO_test(

.rst(rst),

.wr_clk(wr_clk),

.rd_clk(rd_clk),

.din(din),

.wr_en(wr_en),

.rd_en(rd_en),

.dout(dout),

.full(full),

.empty(empty),

.prog_full(prog_full),

.wr_rst_busy(wr_rst_busy),

.rd_rst_busy(rd_rst_busy)

);

endmodule

編寫TestBench時,寫時鐘為48Mhz,讀時鐘為150MHz。寫是連續的,使能一直打開,表示AD是一直連續工作的,寫入夠512個數后,prog_full拉高,進行一次FIFO讀操作,連續讀出256個數,然后等待下一次prog_full為高的到來,如此周而復始。

3)波形功能仿真

點擊Run simulation,啟動功能仿真,可以看到FIFO一開始復位結束后,進行寫操作,每寫夠512個數后,prog_full拉高,進行一次讀操作,連續讀出256個數后,停止讀操作,等待下一次prog_full拉高時刻的到來。將讀出的數據和寫入的數據對比,完全一致,不存在丟數的情況,因此驗證了功能的正確性。

b72f02a2-c8ce-11ef-9310-92fbcf53809c.png

總結:通過本案例代碼程序的編寫以及波形功能仿真,可以熟悉并掌握FIFO的基本功能和常用用法:數據跨時鐘域及總線位寬調整。本例程是我自己在一個項目中用到的,結合自己的需求進行編寫的,并不具有普適性,寫此博客的初衷也是讓一些不熟悉FIFO用法的讀者能快速入門,可能并不能直接幫助到所有的讀者。希望大家可以在此基礎上,結合自己的工程應用實例,完成自己相應的設計。

原文鏈接:https://blog.csdn.net/qq_43622265/article/details/113497121

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21748

    瀏覽量

    603971
  • fifo
    +關注

    關注

    3

    文章

    389

    瀏覽量

    43709
  • IP核
    +關注

    關注

    4

    文章

    329

    瀏覽量

    49520
  • 生成器
    +關注

    關注

    7

    文章

    316

    瀏覽量

    21042

原文標題:FIFO IP核的使用

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    #FPGA點撥 生成FIFOIP

    fpgaIP
    電子技術那些事兒
    發布于 :2022年10月12日 21:52:56

    #硬聲創作季 #FPGA FPGA-27-04 Quartus中fifo IP介紹與仿真測試-1

    fpgafifoIP
    水管工
    發布于 :2022年10月29日 02:28:30

    #硬聲創作季 #FPGA FPGA-27-04 Quartus中fifo IP介紹與仿真測試-2

    fpgafifoIP
    水管工
    發布于 :2022年10月29日 02:28:50

    #硬聲創作季 #FPGA FPGA-27-04 Quartus中fifo IP介紹與仿真測試-3

    fpgafifoIP
    水管工
    發布于 :2022年10月29日 02:29:13

    #硬聲創作季 #FPGA FPGA-27-04 Quartus中fifo IP介紹與仿真測試-4

    fpgafifoIP
    水管工
    發布于 :2022年10月29日 02:29:34

    求助:用fifo ip作延時輸出數據

    同上,如何用fifo ip作延時輸出數據,想輸入一組數據,大概300個,clk上升沿輸出一個,想延遲128個數據輸出的時間后,將這一組數據通過fifo輸出,求大神指點代碼該怎么寫,大
    發表于 04-26 11:37

    求助 FPGA 異步FIFO IP

    各位大神: 異步FIFO的空 滿信號為什么都是高?描述如下:always @(posedge DFIFO_clk or negedge rst_n )beginif(!rst_n)beginWRITE_req
    發表于 07-01 01:51

    ISE中,調用FIFO IP遇到的問題?

    fifo IP fifo_uart fifo_uut(.clk(clk), // input clk.rst(rst_n), // inp
    發表于 09-14 11:36

    XILINX FIFO IP調用問題

    工程利用ISE自帶的FIFO將32位的并行數據經過緩存以單bit輸出,讀寫時鐘相同,首先將32位數據經過FIFO1變成8位輸出,再將8位數據經過FIFO2變成1位輸出,對程序仿真結果
    發表于 12-23 12:53

    以MIPI項目為例講解Diamond FIFO生成和例化全過程

    在MIPI多路攝像頭拼接項目中,需要使用到FIFOIP來進行數據的緩存與時鐘域的交互,下面我來介紹一下Diamond FIFO IP
    發表于 12-12 15:54

    FIFO IP的使用

    一、原理介紹FIFO即First in, First out。代表著先進的數據先出,后進的數據后出。FIFO實在RAM的基礎上增加了許多功能,主要分為讀和寫兩部分。與RAM最大的不同時,FIFO沒有
    發表于 04-12 22:44

    FIFO是什么?有什么用?FIFO IP應該如何使用?

    FIFO是英文First In First Out 的縮寫,是一種先進先出的數據緩存器,他與普通存儲器的區別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數據,順序的讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。
    發表于 07-20 08:00 ?22次下載
    <b class='flag-5'>FIFO</b>是什么?有什么用?<b class='flag-5'>FIFO</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>應該如何使用?

    講解幾點關于FIFO IP使用時的注意事項

    FIFO?還是FIFO IP?這也需要寫總結嗎?太容易了吧。如果我是一個正在處于面試找工作中的年輕人,肯定關注的是如何手撕FIFO,這也是
    發表于 06-21 14:22 ?1586次閱讀
    講解幾點關于<b class='flag-5'>FIFO</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>使用時的注意事項

    如何在Vivado中配置FIFO IP

    Vivado IP提供了強大的FIFO生成器,可以通過圖形化配置快速生成FIFO IP
    的頭像 發表于 08-07 15:36 ?4405次閱讀
    如何在Vivado中配置<b class='flag-5'>FIFO</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>

    FPGA學習筆記:FIFO IP的使用方法

    FIFO(First In First Out, 先入先出 ),是一種數據緩沖器,用來實現數據先入先出的讀寫方式。數據按順序寫入 FIFO,先被寫入的數據同樣在讀取的時候先被讀出,所以 FIFO存儲器沒有地址線,有一個寫端口和一
    的頭像 發表于 09-07 18:30 ?3661次閱讀
    FPGA學習筆記:<b class='flag-5'>FIFO</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的使用方法
    主站蜘蛛池模板: 3D动漫网站HOXXXxes| 亚洲欧美激情精品一区二区| 推倒美女总裁啪啪| 超碰人人澡人人胔| 美国特级成人毛片| 69成人免费视频| 久久综合给合久久狠狠狠…| 亚洲欧美强伦一区二区另类| 国产亚洲999精品AA片在线爽| 午夜伦理网| 国产人成高清在线视频99| 午夜精品久久久内射近拍高清| 国产极品白嫩超清在线观看| 色欲AV色欲AV久久麻豆| 古代荡女丫鬟高H辣文纯肉| 色多多污网站在线观看| 国产精品99久久久久久人韩国 | 国产国产乱老熟女视频网站97| 日本美女阴道| 国产成人啪精品视频免费网 | 最新国产av.在线视频| 乱奷XXXXXHD| 浪荡女天天不停挨CAO日常视| 亚洲性无码av在线| 久久一级视频| 俺也去最新地址| 久久香蕉国产线看观看精品| 中文字幕爆乳JULIA女教师| 国产精品久久久久久搜索 | 2022国产麻豆剧传媒剧情| 欧美日韩久久久精品A片| 中文中幕无码亚洲在线| 牛牛在线(正)精品视频| 调教日本美女| 亚洲日韩中文字幕日本有码| 老湿影院色情a| 岛国片免费在线观看| 亚洲精品自在线拍2019| 免费看美女的网站| 国产成人精品在视频| 在线亚洲免费|