0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用VHDL語言和格雷碼對(duì)地址進(jìn)行編碼的異步FIFO的設(shè)計(jì)

電子設(shè)計(jì) ? 來源:郭婷 ? 作者:電子設(shè)計(jì) ? 2019-08-02 08:10 ? 次閱讀

FIFO (先進(jìn)先出隊(duì)列)是一種在電子系統(tǒng)得到廣泛應(yīng)用的器件,通常用于數(shù)據(jù)的緩存和用于容納異步信號(hào)的頻率或相位的差異。FIFO的實(shí)現(xiàn)通常是利用雙口RAM和讀寫地址產(chǎn)生模塊來實(shí)現(xiàn)的。FIFO的接口信號(hào)包括異步的寫時(shí)鐘(wr_clk)和讀時(shí)鐘(rd_clk)、與寫時(shí)鐘同步的寫有效(wren)和寫數(shù)據(jù)(wr_data)、與讀時(shí)鐘同步的讀有效(rden)和讀數(shù)據(jù)(rd_data)。為了實(shí)現(xiàn)正確的讀寫和避免FIFO的上溢或下溢,通常還應(yīng)該給出與讀時(shí)鐘和寫時(shí)鐘同步的FIFO的空標(biāo)志(empty)和滿標(biāo)志(full)以禁止讀寫操作。

1 異步FIFO功能描述

圖1給出了FIFO的接口信號(hào)和內(nèi)部模塊圖。

利用VHDL語言和格雷碼對(duì)地址進(jìn)行編碼的異步FIFO的設(shè)計(jì)

由圖1可以看出,寫地址產(chǎn)生模塊根據(jù)寫時(shí)鐘和寫有效信號(hào)產(chǎn)生遞增的寫地睛,讀地址產(chǎn)生模塊根據(jù)讀時(shí)鐘和讀有效信號(hào)產(chǎn)生遞增的讀地址。FIFO的操作如下:在寫時(shí)鐘wr_clk的升沿,當(dāng)wren有效時(shí),將wr_data寫入雙口RAM中寫地址對(duì)應(yīng)的位置中;始終將讀地址對(duì)應(yīng)的雙口RAM中的數(shù)據(jù)輸出到讀數(shù)據(jù)總線上。這樣就實(shí)現(xiàn)了先進(jìn)先出的功能。

寫地址產(chǎn)生模塊還根據(jù)讀地址和寫地址關(guān)系產(chǎn)生FIFO的滿標(biāo)志。當(dāng)wren有效時(shí),若寫地址+2=讀地址時(shí),full為1;當(dāng)wren無效時(shí),若寫地址+ 1=讀地址時(shí),full為1。讀地址產(chǎn)生模塊還根據(jù)讀地址和寫地址的差產(chǎn)生FIFO的空標(biāo)志。當(dāng)rden有效時(shí),若寫地址-1=讀地址時(shí),empty為 1;當(dāng)rden無效時(shí),若寫地址=讀地址時(shí),empty為1。按照以上方式產(chǎn)生標(biāo)志信號(hào)是為了提前一個(gè)時(shí)鐘周期產(chǎn)生對(duì)應(yīng)的標(biāo)志信號(hào)。

由于空標(biāo)志和滿標(biāo)志控制了FIFO的操作,因此標(biāo)志錯(cuò)誤會(huì)引起操作的錯(cuò)誤。如上所述,標(biāo)志的產(chǎn)生是通過對(duì)讀寫地址的比較產(chǎn)生的,當(dāng)讀寫時(shí)鐘完全異步時(shí),對(duì)讀寫地址進(jìn)行比較時(shí),可能得出錯(cuò)誤的結(jié)果。例如,在讀地址變化過程中,由于讀地址的各位變化并不同步,計(jì)算讀寫地址的差值,可能產(chǎn)生錯(cuò)誤的差值,導(dǎo)致產(chǎn)生錯(cuò)誤的滿標(biāo)志信號(hào)。若將未滿標(biāo)志置為滿標(biāo)志時(shí),可能降低了應(yīng)用的性能,降低寫數(shù)據(jù)速率;而將滿置標(biāo)志置為未滿時(shí),執(zhí)行一次寫操作,則可能產(chǎn)生溢出錯(cuò)誤,這對(duì)于實(shí)際應(yīng)用來說是絕對(duì)應(yīng)該避免的??諛?biāo)志信號(hào)的產(chǎn)生也可能產(chǎn)生類似的錯(cuò)誤。

2 異步FIFO的改進(jìn)設(shè)計(jì)

從以上分析中可以看出,異步FIFO之所以會(huì)發(fā)生錯(cuò)誤是國為在地址變化時(shí),由于多位地址各位變化時(shí)間不同,異步時(shí)鐘對(duì)其進(jìn)行采樣時(shí)數(shù)值可能為不同于地址變化喪后數(shù)值的其他值,異步產(chǎn)生錯(cuò)誤的空標(biāo)志和滿標(biāo)志,以致于產(chǎn)生FIFO的操作錯(cuò)誤。

格雷碼是一種在相鄰計(jì)數(shù)值之間只有一位發(fā)生變化的編碼方式??梢钥闯?,若讀寫地址采用格雷碼編碼方式,就可以解決上面的問題。

為了應(yīng)用的靈活,還增加了兩個(gè)標(biāo)志信號(hào),將滿(almosf_full)標(biāo)志和空(almost_empty)標(biāo)志分別定義如下:當(dāng)寫地址與讀地址的距離小于某個(gè)預(yù)先定義數(shù)值時(shí),almost_full為1;當(dāng)讀地址與寫地址的距離小于這個(gè)預(yù)先定義的數(shù)值時(shí),almost_empty為1。

3 異步FIFO的VHDL實(shí)現(xiàn)

硬件描述語言VHDL(Very-high speed IC Hardware Description Language)是一種應(yīng)用于電路設(shè)計(jì)的高層次描述語言,具有行為級(jí)、寄存器傳輸級(jí)和門級(jí)等多層次描述,并且具有簡單、易讀、易修改和與工藝無關(guān)等優(yōu)點(diǎn)。目前VHDL語言已經(jīng)得到多種EDA工具的支持,綜合工具得到迅速發(fā)展,VHDL語言的行為級(jí)綜合也已經(jīng)得到支持和實(shí)現(xiàn),因此利用VHDL語言進(jìn)行電路設(shè)計(jì)可以節(jié)約開發(fā)成本和周期。

首先給出格雷碼和普通自然碼之間的轉(zhuǎn)換模塊的VHDL程序。

程序1:自然碼碼到格雷碼的轉(zhuǎn)換程序

entity norm_to_gery is

generic(width:integer:=8);

port(

din:in std_logic_vector(width-1 downto 0);

dout:out std_logic_vector(width-1 downto 0);

end norm_to_grey;

architecture norm_to_grey of norm_to_grey is begin

dout《=din xor(‘0’ & din(width-1 downto 1));

end norm_to_grey;

程序2:格雷碼到自然碼的轉(zhuǎn)換程序

process(din)

variable tempd:std_logic;

begin

for i in width-1 downto 0 loop tempd:=‘0’;

for j in width-1 downto i loop tempd:=tempd xor din(j);

end loop;

dout(i)《=tempd;

end loop;

end process;

在給出異步FIFO的VHDL程序之前,先給出一些內(nèi)部信號(hào)的解釋:

wadd ——自然碼寫地址

wadd_grey ——格雷碼寫地址

wr_radd_grey ——寫時(shí)鐘采樣的格雷碼讀地址

wr_radd ——寫時(shí)鐘采樣的自然碼讀地址

almost_length ——產(chǎn)生將滿和將空標(biāo)志的予定義讀寫地址差值

程序3:寫地址產(chǎn)生模塊,此程序同時(shí)產(chǎn)生寫地址的自然碼和格雷碼

waddp《=wadd+1;

u1:norm_to_grey

port map(waddp,wadd_grey_temp);

wadd_process:process(clr,wr_clk)

begin

if clr=‘0’then

wadd《=(others=》‘0’);

wadd_grey《=(others=》‘0’);

elsif wr_clk‘event and wr_clk=’1‘then

if wren=’1‘then

wadd《=waddp;

wadd_grey《=wadd_grey_temp;

end if;

end if;

end process;

程序4:滿標(biāo)志和滿標(biāo)志產(chǎn)生模塊,以8位地址為例。

u2:grey_to_norm

port map(wr_radd_grey,wr_radd_temp);

process(clr,wr_clk~

begin

if clr=’0‘then

wr_radd_grey《=(others=》’0‘);

wr_radd《=(Others=》’0‘)

elsif wr_clk’event and wr_clk=‘1’then

wr_radd_grey《=radd_grey;

wr_radd《=wr_radd_temp;

end if;

end process;

wr_compare《=wadd-wr_radd;

full_process:process(clr,wr_clk)

begin

if clr=‘0’then

full《=‘0’;

elsif wr_clk‘event and wr_clk=’1‘then

if(wren=’1‘)then

if wr_compare=“11111110”then full《=’1‘;

else full《=’0‘;

end if;

else

if wr_compare=“11111111”then full《=’1‘;

else full《=’0‘;

end if;

end if;

end if;

end process;

almost_full_process:process(clr,wr_clk)

begin

if clr=’0‘ then

almost_full《=’0‘;

elsif wr_clk’event and wr_clk=‘1’then

if(wren=‘1’)then

if wr_compare》(“11111110”-almost_length)then almost_full《=‘1’;

else almost_full《=‘0’;

end if;

else

if wr_compare》(“11111111”-almost_length)then almost_full《=‘1’;

else almost_full《=‘0’;

end if;

end if;

end if;

end process;

讀地址的產(chǎn)生模塊和空標(biāo)志及空標(biāo)志的產(chǎn)生模塊與寫地址模塊類似。

4 結(jié)論

為了解決FIFO的異步操作問題,本文提出了一種利用格雷碼對(duì)地址進(jìn)行編碼的異步FIFO的設(shè)計(jì),并采用VHDL語言進(jìn)行電路設(shè)計(jì),利用Altera公司 FLEX10KE系列FPGA得以實(shí)現(xiàn),該電路軟件仿真和硬件實(shí)現(xiàn)已經(jīng)通過驗(yàn)證,并被應(yīng)用到各種電路中。實(shí)踐證明它可以解決由于異步產(chǎn)生的錯(cuò)誤,同時(shí)增加了應(yīng)用靈活性。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7048

    瀏覽量

    89076
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2759

    瀏覽量

    173319
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    817

    瀏覽量

    128148
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是

    (Gray code),又叫循環(huán)二進(jìn)制或反射二進(jìn)制 在數(shù)字系統(tǒng)中只能識(shí)別0和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進(jìn)制代碼才能
    發(fā)表于 11-11 09:34 ?7371次閱讀
    什么是<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>

    異步FIFO設(shè)計(jì)之

    相鄰的只有1bit的差異,因此常常用于異步
    的頭像 發(fā)表于 11-01 17:37 ?1424次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>設(shè)計(jì)之<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>

    簡介及格與二進(jìn)制的轉(zhuǎn)換程序

    ] 。  屬于可靠性編碼,是一種錯(cuò)誤最小化的編碼,因?yàn)樗蟠蟮販p少了由一個(gè)狀態(tài)到下一個(gè)狀態(tài)時(shí)電路中的混淆。由于這種
    發(fā)表于 04-22 09:00

    的規(guī)則和應(yīng)用問題?

    今天看到一個(gè)計(jì)數(shù)的程序,搜了下定義,覺得還是云里霧里,定義寫的是若任意兩個(gè)相鄰的代碼只有一位二進(jìn)制數(shù)不同,則這種編碼
    發(fā)表于 08-20 14:41

    如何設(shè)計(jì)一個(gè)可靠性高、速度高的異步FIFO電路?

    通過對(duì)FPGA芯片內(nèi)部EBRSRAM的深入研究,提出了一種利用對(duì)地址進(jìn)行
    發(fā)表于 04-13 06:41

    基于FPGA的正速調(diào)整的設(shè)計(jì)與實(shí)現(xiàn)

    本文提出了基于FPGA 正速調(diào)整的設(shè)計(jì)方案,采用對(duì)地址編碼
    發(fā)表于 01-13 15:16 ?25次下載

    高速異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)

    本文主要研究了用FPGA 芯片內(nèi)部的EBRSRAM 來實(shí)現(xiàn)異步FIFO 設(shè)計(jì)方案,重點(diǎn)闡述了異步FIFO 的標(biāo)志信號(hào)——空/滿狀態(tài)的設(shè)計(jì)思路,并且用
    發(fā)表于 01-13 17:11 ?40次下載

    異步FIFOVHDL設(shè)計(jì)

    給出了一個(gè)利用對(duì)地址編碼的羿步FIFO 的實(shí)現(xiàn)
    發(fā)表于 07-16 15:15 ?26次下載

    運(yùn)算研究

    運(yùn)算研究 在數(shù)字系統(tǒng)中只能識(shí)別0和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進(jìn)制代碼才能進(jìn)行處理,
    發(fā)表于 03-18 14:07 ?1462次閱讀

    循環(huán)VHDL源程序

    我們知道計(jì)數(shù)的特點(diǎn)就是相鄰的碼字只有一個(gè)比特不同,那么我們?cè)谠O(shè)計(jì)計(jì)數(shù)時(shí)找到這個(gè)比特取
    發(fā)表于 11-11 09:32 ?2116次閱讀

    編碼規(guī)則_有什么規(guī)律

    典型的二進(jìn)制簡稱,因1953年公開的弗蘭克·
    的頭像 發(fā)表于 03-02 14:29 ?5.6w次閱讀
    <b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b><b class='flag-5'>編碼</b>規(guī)則_<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>有什么規(guī)律

    編碼器基礎(chǔ)——這樣圖案化編碼的好處

    (Gray Code)因1953年公開的弗蘭克.的專利而得名。
    的頭像 發(fā)表于 01-11 10:28 ?1.6w次閱讀
    <b class='flag-5'>編碼</b>器基礎(chǔ)——<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>這樣圖案化<b class='flag-5'>編碼</b>的好處

    異步FIFO的原因有哪些

    異步FIFO通過比較讀寫地址進(jìn)行滿空判斷,但是讀寫地址屬于不同的時(shí)鐘域,所以在比較之前需要先將讀寫地址
    的頭像 發(fā)表于 08-04 14:05 ?4443次閱讀

    結(jié)構(gòu)光|解碼方法

    是一種特殊的二進(jìn)制,在結(jié)構(gòu)光三維視覺中,常常被用于編碼。比起我們常見的二進(jìn)制,
    的頭像 發(fā)表于 12-21 11:14 ?1256次閱讀

    異步FIFO-

    很多人在面試時(shí)被問到為什么異步FIFO中需要用到,可能大部分的答案是
    的頭像 發(fā)表于 08-26 14:20 ?1005次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>-<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>