最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2.4至簡設(shè)計規(guī)范--明德?lián)P科教(mdy-edu.com)

2022-12-26 07:28 作者:明德?lián)P易老師  | 我要投稿

第二篇?FPGA至簡設(shè)計原理

本文的文檔編號:001500000080

需要看對應(yīng)的視頻,請點擊視頻編號:001500000089

1、本視頻詳細(xì)講解了如何正確的看懂 信號波形


??第四章?FPGA至簡設(shè)計法規(guī)范

第1節(jié) 波形圖規(guī)則
至簡設(shè)計法曾在D觸發(fā)器的相關(guān)知識講解中,詳細(xì)的描述了如何看FPGA信號的波形。針對波形的規(guī)則,只需記住一點:時鐘上升沿看信號,看到的是信號變化前的值。這是什么意思呢?就是說在每一個時鐘上升沿查看信號時,如果信號的值發(fā)生了改變,那么此時的信號值為信號改變前的值。還沒有理解或者非常感興趣的朋友,可以查找對應(yīng)章節(jié)仔細(xì)學(xué)習(xí)相關(guān)內(nèi)容。

下面來舉例說明一下,觀察圖2.4-1中第4個時鐘上升沿相應(yīng)的信號變化可以看到在第4個時鐘上升沿,信號a和信號c發(fā)生了改變。信號a由1變?yōu)?,信號c由0變?yōu)?,此時的信號值應(yīng)該看變化前的值,因此在第4個時鐘上升沿信號a的值為1,信號c的值為0。再來觀察第5個時鐘的上升沿,可以看出信號b和信號c發(fā)生了改變。同樣的,此時信號值為變化前的值,即信號b的值為1,信號c的值也為1。? ? ? ? ? ? ? ? ? ? ? ??

圖2.4-1波形圖規(guī)則示例1


再來看圖2.4-2,在第5個時鐘上升沿處觀察信號dout和信號cnt的值。根據(jù)規(guī)則可知信號要取變化之前的值,即信號dout取值為1,同樣的道理,信號cnt的取值同樣為1,并不是2。

圖2.4-2波形圖規(guī)則示例2

以上就是觀察波形的規(guī)則,只要記住在不確定的信號處均選擇前面的信號,就一定不會出錯。當(dāng)然,該方法的使用前提是所有信號都是同步信號且波形是理想的波形,不然一切都是空談。該方法的具體原理解釋可以參考學(xué)習(xí)至簡設(shè)計法D觸發(fā)器中波形查看的相關(guān)內(nèi)容。


第2節(jié)?計數(shù)器規(guī)范
計數(shù)器設(shè)計是FPGA設(shè)計的核心,計數(shù)器架構(gòu)是FPGA設(shè)計最常用的架構(gòu)之一,也是至簡設(shè)計法的核心部分。計數(shù)器架構(gòu)并不難,只要認(rèn)真學(xué)習(xí)這部分內(nèi)容,相信廣大初學(xué)者也能掌握FPGA設(shè)計的精髓。本書在這里也會提供通過一些項目練習(xí)來進(jìn)行鞏固學(xué)習(xí)。


本章主要介紹至簡設(shè)計法的計數(shù)器規(guī)則。

下面是至簡設(shè)計法的計數(shù)器模板樣式,其包括三段:計數(shù)器的always語句,加1條件的定義以及結(jié)束條件的定義。


  • 任何計數(shù)器都有三個要素:初值、加1條件和結(jié)束值。

  • 初值:計數(shù)器的默認(rèn)值或者開始計數(shù)的值。

  • 加1條件:計數(shù)器執(zhí)行加1的條件。

  • 結(jié)束值:計數(shù)器計數(shù)周期的最后一個值。

  • 設(shè)計計數(shù)器,要逐一考慮這三個要素,一般是先考慮初值、再考慮加1條件,最后再考慮結(jié)束值。

  • 所有計數(shù)器都統(tǒng)一從0開始計數(shù)有助于同學(xué)們閱讀理解、方便使用,如此一來,同學(xué)們不需要從頭看具體代碼就能清楚這個數(shù)值的含義。

假定加1條件為add_cnt,計數(shù)器當(dāng)前值為cnt,則

  • add_cnt&&cnt==x-1表示計數(shù)器計數(shù)到x個。

  • cnt==x-1不能表示計數(shù)器計數(shù)到x個。

計數(shù)器是從0開始計數(shù)的,因此計數(shù)器的默認(rèn)值即初始值是0。那么當(dāng)計數(shù)器的值為0時要如何區(qū)分這是開始計數(shù)的第1個值,還是并未計數(shù)的默認(rèn)值呢?

這種情況下可以通過加1條件來進(jìn)行區(qū)分。當(dāng)加1條件無效時,計數(shù)器值為0表示未開始計數(shù),此時的0為默認(rèn)值;當(dāng)加1條件有效時,計數(shù)器值為0表示計的第1個數(shù)。同理,當(dāng)cnt==x-1,不能表示計數(shù)到x;只有當(dāng)cnt==x-1且加1條件有效時,才表示計數(shù)到x。

因此,當(dāng)add_cnt&&cnt==5-1時,表示計數(shù)到5個。而當(dāng)add_cnt==0&&cnt==5-1時,不能表示計數(shù)到5個。

計數(shù)器的結(jié)束條件必須同時滿足加1條件。假定add_cnt為加1條件,cnt為當(dāng)前計數(shù)器值,如果要計5個數(shù),那么結(jié)束值應(yīng)該是4,但是結(jié)束條件并不是cnt==4,而是add_cnt&&cnt==4。因為根據(jù)規(guī)則3可知cnt==4不能表示計數(shù)到5個,只有add_cnt&&cnt==4時,才表示計數(shù)到5個。

為了更好地閱讀代碼,至簡設(shè)計法規(guī)定結(jié)束值必須是x-1的形式。即add_cnt&&cnt==4要寫成add_cnt&&cnt==5-1。這里的“5”表示計數(shù)數(shù)量,“-1”則是固定格式。有了這個約定后計數(shù)的邊界直觀清晰。至簡設(shè)計法多年的項目實踐發(fā)現(xiàn):無論多么有經(jīng)驗的工程師,對于邊界值總會要多花一些心思來考慮。因此,至簡設(shè)計法索性就制定了這個規(guī)則使得工程師不需要再考慮邊界條件。

? 當(dāng)要從計數(shù)器取某個數(shù)時,例如要取計數(shù)器第5個數(shù),很容易就寫成cnt==5-1,這一寫法是不正確的。正確的寫法是(加1條件)&&(cnt==計數(shù)值-1),如add_cnt&&cnt==5-1。原因可以參考計數(shù)器規(guī)則3的說明。


每輪計數(shù)器周期結(jié)束后,計數(shù)器必須變回0,這是為了使計數(shù)器能夠循環(huán)重復(fù)計數(shù)。



邊界值的設(shè)計通常都要花費(fèi)一些心思,而且容易出錯。為此,至簡設(shè)計法規(guī)范約定,如果需要限定范圍時,推薦使用“>=”和“<”兩種符號。例如要取前8個數(shù),那么就取cnt>=0&&cnt<8。注意,一定是“大于等于”和“小于”符號,而不能使用“大于”、“小于等于”符號。

該規(guī)則參考編程里的for循環(huán)語句。假如要循環(huán)8次,for循環(huán)的條件通常會寫成“i=0;i<8;i++”,0為開始值,8為循環(huán)個數(shù)。當(dāng)然,也可以寫成“i=0;i<=7;i++”,但這些數(shù)字的意義就變得令人費(fèi)解了,雖然知道7是從8-1得來的,但此時“-1”就顯得畫蛇添足,在設(shè)計中不必多此一舉。



第一段,寫出計數(shù)器的always段。

模板如下所示:


同學(xué)們有沒有發(fā)現(xiàn)上述模板的特點?這個模板只需要填兩項內(nèi)容:加1條件和結(jié)束條件。假定加1條件為add_cnt,結(jié)束條件為end_cnt,則代碼變成:

至此就完成了該always的設(shè)計,是不是很簡單?只要確定好條件命名,就完成了這段設(shè)計代碼。


第二段,用assign寫出加1條件。


在此階段,只需要確認(rèn)好計數(shù)器的加1條件。假設(shè)計數(shù)器的加1條件為a=2,則代碼為:


第三段,用assign寫出結(jié)束條件。


在此階段只需要確認(rèn)好計數(shù)器的結(jié)束值。參考計數(shù)器規(guī)則5的要求,結(jié)束條件的形式一定是:(加1條件)&&(cnt==計數(shù)值-1)。假設(shè)計數(shù)器的要計數(shù)10個,則代碼為:

至此就完成了計數(shù)器代碼的設(shè)計?;仡櫼幌拢@段代碼特點就是:每次只考慮一件事,按照這一要求可以很容易地完成代碼設(shè)計。


在設(shè)計中雖然對計數(shù)器進(jìn)行編碼,但一般計數(shù)器并不是最終目的,最終目的是各種輸出信號。設(shè)計計數(shù)器是為了方便產(chǎn)生這些輸出信號(包括中間信號),并且能夠從計數(shù)器獲取變化條件。例如信號dout在計數(shù)到6時拉高,則其變1條件是:add_cnt&&cnt==6-1。

假設(shè)有兩個信號:dout0在計數(shù)到6時拉高,dout1在計數(shù)到7時拉高。一種設(shè)計方法是dout0的變1條件是add_cnt&&cnt==6-1,dout1的變1條件設(shè)定為dout0==1,這樣dout1就是間接與計數(shù)器對齊。至簡設(shè)計法不建議采用這種方法,在設(shè)計中建議信號一律與計數(shù)器對齊,dout1的變1條件應(yīng)該改為:add_cnt&&cnt==7-1。

如無特別說明計數(shù)器的命名都要符合規(guī)范,加1條件的前綴為“add_”,結(jié)束條件的前綴為“end_”。



減1計數(shù)器在項目中應(yīng)用也較為廣泛。但至簡設(shè)計法建議在學(xué)習(xí)階段暫時不用減1計數(shù)器,進(jìn)入公司或者已經(jīng)在做項目的情況下根據(jù)公司具體要求而定。

以上就是至簡設(shè)計法的計數(shù)器規(guī)則。計數(shù)看似簡單,但要用好卻并非易事。至簡設(shè)計法強(qiáng)調(diào),真正掌握計數(shù)器的使用需要多實踐,至簡設(shè)計法也會為提供大量的實踐項目進(jìn)行練習(xí),從而讓同學(xué)們掌握、搞透計數(shù)器的設(shè)計。



第3節(jié)?狀態(tài)機(jī)規(guī)范


狀態(tài)機(jī)是數(shù)字電路設(shè)計中的一個非常重要組成部分,也是貫穿于整個設(shè)計始終的最基本設(shè)計思想和設(shè)計方法。在現(xiàn)代數(shù)字系統(tǒng)設(shè)計中狀態(tài)機(jī)的設(shè)計對系統(tǒng)的高速性能、高可靠性、高穩(wěn)定性都具有決定性的作用。熟練掌握狀態(tài)機(jī)的設(shè)計后在數(shù)字電路的設(shè)計中必能達(dá)到事半功倍的效果。

前一節(jié)中介紹了計數(shù)器的規(guī)范。其實計數(shù)器本質(zhì)上也可以認(rèn)為是一個狀態(tài)機(jī),只不過計數(shù)器是用數(shù)字來區(qū)分不同狀態(tài)而已。

那么在設(shè)計中什么時候使用計數(shù)器,什么時候會使用狀態(tài)機(jī)呢?

如果是順序處理或是簡單的流程控制,例如其步驟是0->1->2->3->0,這個時候用計數(shù)器實現(xiàn)是最便捷的。但是在復(fù)雜的流程控制場合,例如其步驟是0->1->5->2->4,其跳轉(zhuǎn)順序是亂序的時候,就應(yīng)該利用狀態(tài)機(jī)來設(shè)計。

規(guī)范的狀態(tài)機(jī)代碼可以極大地提高設(shè)計效率,在減少狀態(tài)出錯可能的同時縮短調(diào)試時間,從而設(shè)計出穩(wěn)健的系統(tǒng)。

至簡設(shè)計法從項目實踐和培訓(xùn)經(jīng)驗出發(fā),總結(jié)出一套科學(xué)的、適用于狀態(tài)機(jī)設(shè)計的方法,也稱之為狀態(tài)機(jī)架構(gòu)八步法。

狀態(tài)機(jī)架構(gòu)八步法具有如下優(yōu)點:

  • ??通用的設(shè)計方法,無論是簡單還是復(fù)雜的狀態(tài)機(jī)均能按照此法進(jìn)行設(shè)計;

  • ??步驟清晰易懂,每步只考慮一個問題,易于掌握和使用;

  • ??狀態(tài)機(jī)代碼嚴(yán)謹(jǐn)規(guī)范,不容易出錯;

  • ??設(shè)計出的狀態(tài)機(jī)結(jié)構(gòu)簡單且穩(wěn)健。四段式不是指四段always代碼,而是指四段程序。另外需要注意四段式的狀態(tài)機(jī)并非一成不變,而是會根據(jù)輸出信號的個數(shù)進(jìn)行調(diào)整。四段式的寫法可參照至簡設(shè)計法GVIM特色指令Ztj產(chǎn)生的狀態(tài)機(jī)模板。


第一段,同步時序的always模塊,格式化描述次態(tài)遷移到現(xiàn)態(tài)寄存器。


第二段,組合邏輯的always模塊,描述狀態(tài)轉(zhuǎn)移判斷條件。注意,轉(zhuǎn)移條件用信號來表示,信號名要按至簡設(shè)計法規(guī)則來命名。


第三段,用assign定義轉(zhuǎn)移條件。注意,條件一定要加上現(xiàn)態(tài)。


第四段,設(shè)計輸出信號。至簡設(shè)計法規(guī)范要求一段always代碼設(shè)計一個信號,因此有多少個輸出信號就有多少段always代碼。

? 設(shè)計狀態(tài)機(jī)時所有四段式狀態(tài)機(jī)模板的第一段除了名字外的代碼都可以直接用,不需要進(jìn)行改動。


設(shè)計狀態(tài)機(jī)時,至簡設(shè)計法要求四段式狀態(tài)機(jī)的第二段中用信號名來表示轉(zhuǎn)移條件,而無須直接寫出具體的轉(zhuǎn)移條件。

用信號名表示的好處是后續(xù)修改時只需改動信號的名字,并且方便根據(jù)狀態(tài)機(jī)的命名修改對應(yīng)的跳轉(zhuǎn)條件。


狀態(tài)機(jī)規(guī)則3要求轉(zhuǎn)移條件用信號名來表示,這樣一來設(shè)計師就要編寫很多信號名稱,這也是設(shè)計師工作中的一大困擾。因此至簡設(shè)計法制定此規(guī)則:將狀態(tài)轉(zhuǎn)移的條件信號用xx2xx_start的形式表示。

例如有三個狀態(tài)IDLE、READ、WRITE,若從IDLE跳轉(zhuǎn)到READ狀態(tài),其跳轉(zhuǎn)條件可以命名為:idle2read_start;若從IDLE跳轉(zhuǎn)到WRITE,其跳轉(zhuǎn)條件可以命名為:idle2write_start。

這個命名方式既能夠解決命名的困擾,又能直接從信號名看出信號的作用。至簡設(shè)計法提出并主張所有信號都用對應(yīng)意義的字母來命名,達(dá)到“見名知義”的效果。后續(xù)章節(jié)中還會提及至簡設(shè)計法關(guān)于信號命名的規(guī)范,需要多加注意。


??

狀態(tài)機(jī)的第二段代碼中使用信號名來表示轉(zhuǎn)移條件,在代碼后則需用assign對相應(yīng)信號進(jìn)行定義。注意,定義這個轉(zhuǎn)移條件信號時必須加上當(dāng)前狀態(tài),以避免因兩個不同狀態(tài)由同一種變化條件發(fā)生轉(zhuǎn)移而導(dǎo)致錯誤。

例如:

??至簡設(shè)計法項目和培訓(xùn)實踐統(tǒng)計發(fā)現(xiàn):編寫狀態(tài)機(jī)代碼時有很大一部分錯誤是復(fù)制粘貼過程出錯造成的,很多同學(xué)會出現(xiàn)復(fù)制其他狀態(tài)的代碼時忘記修改狀態(tài)的錯誤。


此外,也有一部分同學(xué)寫第二段狀態(tài)機(jī)時,容易把狀態(tài)保持不變寫與state_n= state_n。這個寫法是錯誤的,因為組合邏輯只有鎖存器才能有保持電路,而數(shù)字電路中通常不希望出現(xiàn)鎖存器。

為此,至簡設(shè)計法規(guī)定,其四段式狀態(tài)機(jī)的第二段,狀態(tài)不變時使用state_n= state-_c。如下所示,可以自行對比。這樣寫不但可以減少出錯的可能,還可以減少調(diào)試的時間。



第4節(jié)?接口規(guī)范

在確定模塊劃分后需要明確模塊的端口以及模塊間的數(shù)據(jù)交互。至簡設(shè)計法在實際項目經(jīng)驗中總結(jié)得出了一般模塊端口的信號規(guī)范。完成項目模塊劃分后,可以在確定端口及數(shù)據(jù)流向時參考使用。


? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?表2.4- 1 端口信號規(guī)范




第5節(jié)?FIFO規(guī)范
FIFO(First Input First Output),即先入先出隊列。在計算機(jī)中先入先出隊列是一種傳統(tǒng)的按序執(zhí)行方法,先完成并引退先進(jìn)入的指令,隨后跟著執(zhí)行第二條指令(這些指令是指計算機(jī)在響應(yīng)用戶操作的程序代碼,對用戶而言是透明的)。

在數(shù)字電路設(shè)計中提到的FIFO實際是指FIFO存儲器,其主要用于數(shù)據(jù)緩存和異步處理。當(dāng)然FIFO存儲器緩存數(shù)據(jù)也遵循先入先出的原則。由于微電子技術(shù)的飛速發(fā)展,新一代FIFO芯片容量越來越大,體積越來越小,價格越來越便宜。因其靈活、方便、高效的特性,F(xiàn)IFO芯片逐漸在高速數(shù)據(jù)采集、高速數(shù)據(jù)處理、高速數(shù)據(jù)傳輸以及多機(jī)處理系統(tǒng)中得到越來越廣泛的應(yīng)用。

FIFO本質(zhì)是一個RAM,其與普通存儲器的區(qū)別是沒有外部讀/寫地址線,使用起來非常簡單。但FIFO只能順序的寫入數(shù)據(jù),再順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,無法像普通存儲器那樣可以由地址線來對某個指定地址的數(shù)據(jù)進(jìn)行讀取或?qū)懭搿?br>

FIFO規(guī)則1:使用Show-ahead讀模式。

? FIFO讀操作一般有兩種使用模式:Normal和Show-ahead模式。其中Normal模式是讀使能有效后的下一拍讀出相應(yīng)數(shù)據(jù),如下圖所示。

圖2.4-3Normal模式時序圖


而Show-ahead模式是先進(jìn)行數(shù)據(jù)輸出,在讀使能有效時對FIFO輸出數(shù)據(jù)進(jìn)行更新。即FIFO中的第一個數(shù)據(jù)輸出在總線上,在讀使能信號到來的下一拍直接輸出第二個數(shù)據(jù),如下圖所示。

圖2.4-4Show-ahead模式時序圖


至簡設(shè)計法推薦使用Show-ahead模式,因為在這種模式下可以將讀使能信號與讀出數(shù)據(jù)當(dāng)做有效信號和數(shù)據(jù)來使用,只要讀使能有效則對應(yīng)的數(shù)據(jù)就始終有效。


? FIFO規(guī)則2:讀寫隔離規(guī)則。

? FIFO讀寫隔離規(guī)則是至簡設(shè)計法經(jīng)過長期的實踐總結(jié)出來的經(jīng)驗規(guī)則。

讀寫隔離規(guī)則是指:FIFO的讀、寫控制是獨立的,兩者之間除了共用FIFO進(jìn)行信息操作外,不能有任何信息傳遞。因此,既不能根據(jù)FIFO的讀狀態(tài)或讀出的數(shù)據(jù)來決定寫行為,也不能根據(jù)FIFO的寫狀態(tài)和寫入的數(shù)據(jù)來決定讀行為,如下圖所示。

圖2.4-5讀寫隔離規(guī)則圖

下面通過舉例來幫助理解讀寫隔離規(guī)則。

假定需要設(shè)計一個模塊將輸入的報文保存到FIFO中,報文完整保存后再將其讀出,并輸給下游模塊。那么如何確定何時才能保存完一個完整報文呢?可以知道收到din_eop時表示報文已經(jīng)完整保存,那么能否可以使用din_eop作為讀FIFO的開始條件呢?答案是不允許的。

如果以din_eop作為讀開始的條件,如下圖所示。先后輸入一個6字節(jié)和3字節(jié)的報文,當(dāng)收到第1個報文的din_eop時開始讀FIFO數(shù)據(jù)并輸出。由于輸入數(shù)據(jù)量為6,則輸出數(shù)據(jù)量也6,那么就要6個時鐘來處理。然而在第2個報文的din_eop有效時,按照原理判斷應(yīng)該可以讀取第2個報文并輸出了,但是此時由于第1個報文還沒有處理完,無法處理第2個報文,導(dǎo)致第2個報文被”舍棄”,數(shù)據(jù)出錯。

圖2.4-6連續(xù)收到兩個報文

可以看出不可以使用din_eop來作為讀開始的條件,其根本的原因是:數(shù)據(jù)是要緩存后輸出的,同樣的,din_eop這個信號也需要緩存。

基于這一原因提出用雙FIFO架構(gòu)的概念,如圖2.4-7。感興趣的同學(xué)可以對至簡設(shè)計法中雙FIFO架構(gòu)的具體介紹進(jìn)行學(xué)習(xí)。

圖2.4-7雙FIFO架構(gòu)


? FIFO規(guī)則3:讀使能必須判斷空狀態(tài),并且用組合邏輯產(chǎn)生。

? rdreq必須由組合邏輯產(chǎn)生,其原因與empty有關(guān)。下面來說明rdreq和empty的關(guān)系,假設(shè)FIFO存有3個字節(jié)數(shù)據(jù),現(xiàn)采用Show-ahead模式對其進(jìn)行讀操作,將所存的所有數(shù)據(jù)讀出來。相應(yīng)信號波形下圖所示。

圖2.4-8信號波形圖

從圖中可以看出在a時刻FIFO已經(jīng)為空,但由于電路存在一定延時,empty變?yōu)楦唠娖叫枰?jīng)歷一段時間。

如果用時序邏輯產(chǎn)生rdreq,如圖中虛線所示。在a時刻empty為0則表示FIFO中還有數(shù)據(jù)(但實際已經(jīng)為空),因此rdreq還要保持一個時鐘周期,在FIFO為空的情況下要再讀取一個數(shù)據(jù),讀操作就會出錯。如果用組合邏輯產(chǎn)生rdreq,如圖中實線所示。當(dāng)empty為1時,rdreq馬上拉低則不會出現(xiàn)讀取空FIFO這樣的錯誤。


FIFO規(guī)則4:處理報文時,把指示信號與數(shù)據(jù)一起存入FIFO。

? 通過一個例子來說明該規(guī)則。現(xiàn)要求設(shè)計一個模塊,需先將輸入報文存儲到內(nèi)部FIFO中,等待適當(dāng)時機(jī)將報文數(shù)據(jù)原封不動地送給下游模塊。注意,傳送時需要同時輸出報文數(shù)據(jù)、報文頭和報文尾指示信號,時序如下圖所示。

圖2.4-9報文輸出輸入時序


假定輸入的報文din是8’h12,8’h34,8’h56,8’h78和8’h9a,其中8’h12是報文頭數(shù)據(jù),8’h9a是報文尾數(shù)據(jù)。則輸出的報文dout同樣應(yīng)為8’h12,8’h34,8’h56,8’h78和8’h9a,且8’h12是報文頭數(shù)據(jù),8’h9a是報文尾數(shù)據(jù)。

根據(jù)一般思路,可以生成一個8位寬度的FIFO,然后將din數(shù)據(jù)保存到FIFO中。讀出FIFO的數(shù)據(jù)賦給dout。但是怎么產(chǎn)生dout_sop和dout_eop信號呢?

實際上FIFO不僅可以保存“數(shù)據(jù)”,也可以保存“指示信號”,因此可以將數(shù)據(jù)和對應(yīng)的“指示信號值”一起寫入FIFO。如要生成一個10位寬度的FIFO,保存到FIFO的數(shù)據(jù)應(yīng)是{din,din_sop,din_eop},如下圖所示。

圖2.4-10 FIFO作為報文傳輸緩存


FIFO寫入的第1個數(shù)據(jù)是10’b0001001010,即第1個數(shù)8’h12以及此時的din_sop(值為1)和din_eop(值為0)。第2個數(shù)據(jù)是10’b0011010000,即第2個數(shù)8’h34以及此時的din_sop(值為0)和din_eop(值為0)。依此類推,最后一個數(shù)是10’b1001101001,即8’h9a以及此時的din_sop(值為0)和din_eop(值為1)。

利用該方法寫入數(shù)據(jù)很容易產(chǎn)生dout_sop和dout_eop信號。如果FIFO讀出的數(shù)據(jù)最低位為1則表示這是報文的最后一個數(shù)據(jù),此時dout_eop為1;如果其次低位為1則表示這是報文的第一個數(shù)據(jù),此時dout_sop為1。

此種方式還可以判斷報文的開始和結(jié)束,從而用于其他判斷。


? FIFO規(guī)則5:讀寫時鐘不同時,必須用異步FIFO。

? FIFO按時鐘分可以分為同步FIFO和異步FIFO。

同步FIFO:指讀時鐘和寫時鐘都相同的FIFO。同步FIFO內(nèi)部沒有異步處理,因此結(jié)構(gòu)簡單,資源占用較少。

異步FIFO是指讀時鐘和寫時鐘可以不同的FIFO。異步FIFO內(nèi)部有專門的異步處理電路,處理讀、寫信號的交互,因此異步FIFO結(jié)構(gòu)復(fù)雜,占用資源較大。


2.4至簡設(shè)計規(guī)范--明德?lián)P科教(mdy-edu.com)的評論 (共 條)

分享到微博請遵守國家法律
平泉县| 禹城市| 北流市| 元氏县| 长春市| 巴青县| 安泽县| 抚顺市| 屏东县| 灵寿县| 邵阳县| 当涂县| 佳木斯市| 玛纳斯县| 峨山| 曲松县| 旬邑县| 常宁市| 鄢陵县| 上栗县| 海淀区| 永州市| 定西市| 商城县| 全南县| 永胜县| 清流县| 荃湾区| 九江市| 长宁区| 余干县| 利川市| 桂阳县| 桂东县| 明水县| 伊吾县| 白城市| 资兴市| 邯郸县| 潜江市| 本溪市|