1. 程式人生 > >FPGA之FIFO設計(二)

FPGA之FIFO設計(二)

非同步FIFO在ISE下有兩種生成方法:

         法一:使用CORE Generator生成的DPRAM和自己設計的FIFO控制邏輯,將兩者連在一起就構成了FIFO。

         法二:直接使用FIFO的IP核。

現在我們來做一件事情:非同步時鐘域的晶片A和B,假設A的頻率是48MHZ,B的頻率是100MHZ。設計一個非同步FIFO,使得B傳送的資料可以被A正確接收。A和B的資料寬度均為16。

         使用ISE的FIFO IP核:

選擇這個IP核接著進入設定:Native型別就是之前的,可用於block ram,distributed ram等;AXI4就是支援AXI4匯流排標準的FIFO,在系統設計的時候用得到。這裡我們選擇Native就可以了。

Step 2:如果我們選擇Common Clock的話就會生成同步FIFO,選擇Independent Clocks就變成了非同步FIFO。後面的Features就是支援不同讀寫資料位寬,支援ECC資料校驗,首字直通等等。具體地去看Datasheet!

Step 3:選擇First-Word-Fall-Through。這就可以沒有延時讀出資料。另外一個就會有一個週期延時。下面就可以設定位寬。

Step 4:這裡選擇標誌位,幾乎滿,幾乎空。

Step 5:選擇復位設定復位後的值為0。

Step 6:這裡設定Count記錄的是讀或者寫的資料的數量。

Step 7:例化

fifo1 YourInstanceName (
    .rst(rst),                                 //復位
    .wr_clk(wr_clk),                   //寫時鐘
    .rd_clk(rd_clk),                    //讀時鐘
    .din(din), // Bus [15 : 0]      //讀入資料
    .wr_en(wr_en),                   //寫使能
    .rd_en(rd_en),                    //讀使能
    .dout(dout), // Bus [15 : 0] //讀出資料
    .full(full),                               //滿
    .almost_full(almost_full), //幾乎滿
    .overflow(overflow),            //溢位
    .empty(empty),                    //空
    .almost_empty(almost_empty),                                  //幾乎空
    .underflow(underflow),                                                  //下溢
    .rd_data_count(rd_data_count), // Bus [9 : 0]           //記錄讀的資料數
    .wr_data_count(wr_data_count)); // Bus [9 : 0]        //記錄寫的資料數

模擬檔案部分:

`timescale 1ns / 100ps

module my_fifo_tb;

	// Inputs
	reg rst;
	reg wr_clk;
	reg rd_clk;
	reg [15:0] din;
	reg wr_en;
	reg rd_en;

	// Outputs
	wire [15:0] dout;
	wire full;
	wire almost_full;
	wire overflow;
	wire empty;
	wire almost_empty;
	wire underflow;
	wire [9:0] rd_data_count;
	wire [9:0] wr_data_count;

	// Instantiate the Unit Under Test (UUT)
	My_fifo uut (
		.rst(rst), 
		.wr_clk(wr_clk), 
		.rd_clk(rd_clk), 
		.din(din), 
		.wr_en(wr_en), 
		.rd_en(rd_en), 
		.dout(dout), 
		.full(full), 
		.almost_full(almost_full), 
		.overflow(overflow), 
		.empty(empty), 
		.almost_empty(almost_empty), 
		.underflow(underflow), 
		.rd_data_count(rd_data_count), 
		.wr_data_count(wr_data_count)
	);
	
	initial begin
		wr_clk = 0;
		forever #5 wr_clk = ~wr_clk;         //f = 100MHZ
	end
	
	initial begin
		rd_clk = 0;
		forever #10.4 rd_clk = ~rd_clk;      //48MHZ
	end
	
	//************************************************************
	//該非同步FIFO是高電平復位,所以給系統一個寫時鐘週期的復位訊號,使FIFO復位。
	//************************************************************
	task reset;
	begin
		rst = 1;
		@(posedge wr_clk);
		rst = 0;
		@(posedge wr_clk);
	end
	endtask
	
	
	initial begin
		// Initialize Inputs
		rst = 0;
		din = 0;
		wr_en = 0;
		rd_en = 0;

		// Wait 100 ns for global reset to finish
		#100;
      reset;  
		// Add stimulus here

	end
      
endmodule



參考資料:

http://www.cnblogs.com/BitArt/archive/2013/04/10/3010073.html

相關推薦

FPGAFIFO設計

非同步FIFO在ISE下有兩種生成方法:          法一:使用CORE Generator生成的DPRAM和自己設計的FIFO控制邏輯,將兩者連在一起就構成了FIFO。          法二:直接使用FIFO的IP核。 現在我們來做一件事情:非同步時鐘域的晶片A和

MVC實戰排球計分—— 構架概要設計

eight med 語言 fusion 詳情 插入數據 輸出數據 one 交互界面 本程序主要基於MVC4框架,使應用程序的輸入,處理和輸出強制性分開,使得軟件可維護性,可擴展性,靈活性以及封裝性得到提高, MVC應用程序分為三個核心部件:Model,View, Contr

CLR類型設計泛型

where條件 之前 解釋 columns 文章閱讀 sin 自己的 讀書 spl 在上一篇文章中,介紹了什麽是泛型,以及泛型和非泛型的區別,這篇文章主要講一些泛型的高級用法,泛型方法,泛型泛型接口和泛型委托,協變和逆變泛型類型參數和約束性,泛型的高

Java設計模式工廠模式:抽象工廠模式

mar 模式 blank http left taxi ref www. app 2碳依5FVL冒傲3http://t.docin.com/etw488 am懦7鈉N山段9慌Q闌http://shequ.docin.com/ipu5657 iK1諾5N鍛認EUK剖嘲肆h

設計模式結構性模式

設計模式之結構性模式(二) 三、橋接模式 四、組合模式 五、裝飾模式 三、橋接模式 如果用多層繼承結構實現下圖關係,有如下問題: 1)擴充套件性問題 2)違反單一職責原則 將其分為兩個維度: 型別維度和品牌維度 Computer2 /** * 電腦型別 *

FPGA-12-任務五、十字路口交通控制燈器系統設計

完整功能: 實現主幹道和支幹道的紅綠燈,並實現時間顯示功能;(前兩位顯示東西的     後兩位顯示南北的) 實現綠燈,黃燈,紅燈的持續時間固定的交通控制功能; (狀態機切換三段的顯示 ) 當東西或南北兩路中任一道上出現特殊情況,交通控制系統應可由交警手動控制立即進入特

解構領域驅動設計:領域驅動設計的核心分層架構

() shc created win cif nec upd 方法 bool 反映業務規則的代碼是整個軟件的核心,但是它一般只占很小的一部分,在傳統的基於貧血模型的分層軟件架構中,業務規則可能分散到各個層、各個代碼段,從而使得通過代碼來還原業務規則或者保證代碼與業務規則一致

設計模式工廠模式

diagonal lam p 地址 加盟 tom 挨踢 類型 jpg 但是 之前已經帶大家稍微入門了工廠模式(即簡單工廠模式)的方法,沒看過的朋友可以移步去查看一番。設計模式之工廠模式(一)。今天我們繼續吃著披薩,學習著工廠模式的接下來部分吧。 加盟披薩店 我們先前的披薩店

設計模式命令模式

上一次留給大家去做的實踐,不知道大家執行的怎麼樣了呢。 我們通過一個簡單的練習,完成了一個控制開關。那現在,我們打算將遙控器的每個插槽,對應到一個命令這樣就要遙控器變成“呼叫者”。當按下按鈕,相應命令物件的execute()方法就會被呼叫,其結果就是,接收者(例如電燈、風扇、音響)的動作被呼叫。 實現遙控器

爬蟲庫BeautifulSoup學習

不必要 baidu html left 官方 blank 正則 文本處理 比較 BeautifulSoup官方介紹文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 四大對象種

CSS3學習系列選擇器

計算 選擇器 sky :focus ddr gree for 指定元素 學習 first-child選擇器和last-child選擇器 first-child指定第一個元素。last-child指定最後一個子元素。 例如: <!DOCTYPE html>

elasticsearch index create index

temp fec toc 使用 con 速度 query type valid 創建索引需要創建索引並且更新集群index matedata,這一過程在MetaDataCreateIndexService的createIndex方法中完成。這裏會提交一個高優先級,Acked

需求分析與數據庫設計

-s size spa blog png 設計 需求分析 技術 詳細 需求分析: 作為一名觀眾, 我希望知道詳細的隊伍比分變化和隊伍得分信息, 以便於了解比賽信息和運動員的精彩得分 用例圖: 數據庫設計: 用mvc中自帶的 數據庫SQL Server

Python學習第一章:第一次的親密接觸初識程序

inpu alt blog put 分享 裏的 hello 格式 img 上次我們講到print(Hello Word)及變量的使用,下面我們繼續: 比如我們想在程序中實現格式化輸出如: 那麽我們我們就要進行簡單的格式化定義,一個很簡單的input語法實現,案例如下:

Java集合初探Iterator叠代器,collections,打包/解包裝箱拆箱,泛型(Generic),comparable接口

基本 generate 等於 框架 ring bin list() each 是否 Iterator(叠代器) 所有實現了Collection接口的容器都有一個iterator方法, 用來返回一個實現了Iterator接口的對象 Iterator對象稱作叠代器, 用來

小白學習Code First

文件中 build 默認 dbm pcre student 技術分享 使用 類名 Code First約定: 註:EDMX模板 (SSDL:存儲模型=>數據庫表 ,CSDL:概念模型=>實體,C-S模型=>存儲和概念模型之間的映射關系) System.Da

java nio channel通道

java niojava nio 通道上一篇文章裏就講述過,channel總是寫數據的時候,要先把數據寫入到bytebuffer,讀數據的時候總是要先從channel中讀入到bytebuffer。如下圖,這個圖是好多知名博客常用的圖,很好理解這個channel。channel分為一下幾種:FileChanne

google軟件測試道讀後感

世界 簡單 分析 故事 好的 多次 新的 模型 證明 這幾天又翻了幾頁這本書,覺得妙語連珠,關鍵語錄摘抄如下,並補充自己的一些思考: “如果你想要求一個團隊去嘗試新的事物或者做某些改進,給他們提供一個聯系人會更好一些,這個聯系人來源於更大的社區,並可以從他那裏得到幫助”;

器學習數學基礎矩陣理論

pac 本質 uid spa album 空間 矩陣 amp .com 目錄 一、線性空間 1. 線性空間的概念 (1) 線性空間的定義 (2) 線性空間的本質 2. 線性空間的基 (1) 線性表示 (2) 線性相關 (3) 線性無關 (4) 線性空間基的定義 (5) 坐標

C#基礎參數 數組參數、可選參數與命名參數

編譯器 line 示例 報錯 一個 傳遞 for 介紹 public   這次介紹的三個參數皆屬於語法糖。   4.數組參數    聲明方法時,在形參前加params關鍵字。簡化了參數調用,增加了可讀性。   用法:   (1)在參數為數組時使用   (2)每個方法只能有一