??作者簡介:
小瑞同學(xué)
,一個努力精進的FPGA和通信學(xué)習(xí)者。
??個人主頁:小瑞同學(xué)的博客主頁
??個人信條:越努力,越幸運!
?日期:2023.12.6
??來源:自學(xué)經(jīng)歷
??文章內(nèi)容概述:簡單介紹了FIFO IP核常用參數(shù)的配置,通過仿真分析了異步IP的讀寫數(shù)據(jù)過程。
連載系列:FPGA中FIFO的應(yīng)用
完整工程已上傳至CSDN:下載鏈接
- 同步FIFO設(shè)計
- 異步FIFO設(shè)計
- Vivado FIFO IP核的調(diào)用
1.FIFO IP核參數(shù)配置簡介
參考文檔:pg057 P156—P173
1.1 Basic
①選擇FIFO的接口類型:
- 傳統(tǒng)接口
- AXI存儲映射接口
- AXI Stream接口。
②FIFO的實現(xiàn)方式:這個種類有很多,這里不詳細列出。
- common clock表示同步FIFO
- independent clock表示異步FIFO
1.2 Native Ports
在Basic界面選擇傳統(tǒng)接口后,其配置界面如下:
①讀類型:
- 標準FIFO
- 首字掉入FIFO,
②數(shù)據(jù)端口參數(shù):設(shè)置讀寫寬度和深度,
補充:
- 一般我們選擇標準FIFO即可,有關(guān)首字掉入FIFO的說明詳見P99。
- 雖然讀寫位寬可以設(shè)置為不同,但讀深度不可設(shè)置,而是會根據(jù)上邊三個參數(shù)自行計算出來,一般要滿足:寫寬度 * 寫深度=讀寬度 * 讀深度。
- 寫深度我們設(shè)置的使256,但IP核所實現(xiàn)的實際深度卻是255,也就是比設(shè)置深度少1。
1.3 Status Flags
①可選標志:
- 將滿標志
- 將空標志
補充:
- almost_empty和almost_full可看作是empty和full的警告信號,它們相對于empty和full會提前一個時鐘周期拉高。
1.4 Data Counts
①數(shù)據(jù)計數(shù)器:用來記錄讀寫數(shù)據(jù)的個數(shù),可分別設(shè)置讀寫數(shù)據(jù)計數(shù)器的位寬。
2.仿真驗證
2.1 testbench文件
`timescale 1ns / 1ps
module tb();
parameter FIFO_WIDTH=8;
reg wr_clk;
reg rd_clk;
reg [7:0] din;
reg wr_en;
reg rd_en;
wire [7:0] dout;
wire full;
wire almost_full;
wire empty;
wire almost_empty;
wire [7:0] rd_data_count;
wire [7:0] wr_data_count;
initial begin
wr_clk=1'b0;
rd_clk=1'b0;
din='b0;
wr_en=1'b0;
rd_en=1'b0;
#10;
repeat(10)begin
@(negedge wr_clk)begin
din={$random}%(2^FIFO_WIDTH);
wr_en=1'b1;
end
end
repeat(10)begin
@(negedge rd_clk)begin
rd_en=1'b1;
din={$random}%(2^FIFO_WIDTH);
end
end
end
always #10 wr_clk=~wr_clk;
always #20 rd_clk=~rd_clk;
fifo_generator_0 fifo_generator_u (
.wr_clk(wr_clk), // input wire wr_clk
.rd_clk(rd_clk), // input wire rd_clk
.din(din), // input wire [7 : 0] din
.wr_en(wr_en), // input wire wr_en
.rd_en(rd_en), // input wire rd_en
.dout(dout), // output wire [7 : 0] dout
.full(full), // output wire full
.almost_full(almost_full), // output wire almost_full
.empty(empty), // output wire empty
.almost_empty(almost_empty), // output wire almost_empty
.rd_data_count(rd_data_count), // output wire [7 : 0] rd_data_count
.wr_data_count(wr_data_count) // output wire [7 : 0] wr_data_count
);
endmodule
2.2 原始仿真結(jié)果
??IP核配置即為上述各圖中所示,結(jié)果如下:
2.3 修改參數(shù)后的仿真結(jié)果
??為了驗證異步FIFO作不同數(shù)據(jù)寬度的數(shù)據(jù)接口這一應(yīng)用,這里我們簡單修改一下,使讀位寬大于寫位寬,設(shè)置讀位寬為16位,讀深度則為128??梢钥吹揭粋€讀出數(shù)據(jù)對應(yīng)兩個寫入數(shù)據(jù),也就是說,當讀位寬大于寫位寬時,幾個寫入數(shù)據(jù)拼接成一個讀出數(shù)據(jù)。
??然后再試試寫位寬大于讀位寬的情況,這里設(shè)置讀位寬為4,則讀深度為512,并將輸入數(shù)據(jù)擴大2倍??梢钥吹矫看蜗茸x出輸入數(shù)據(jù)的高4位,再讀出低4位,也就是說,幾個讀出數(shù)據(jù)對應(yīng)一個寫入數(shù)據(jù)。
文章來源:http://www.zghlxwxcb.cn/news/detail-801905.html
??如果覺得文章對你有所幫助的話,別忘了點個收藏和贊哦~
??更多優(yōu)質(zhì)內(nèi)容可瀏覽本人主頁??,期待再次與你相遇!
????????????小瑞同學(xué)的博客主頁????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-801905.html
到了這里,關(guān)于FPGA中FIFO的應(yīng)用(三)——Vivado FIFO IP核的調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!