在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 羿步FIFO的VHDL設(shè)計

            羿步FIFO的VHDL設(shè)計

            作者: 時間:2006-05-07 來源:網(wǎng)絡(luò) 收藏

            摘要:給出了一個利用格雷碼對地址編碼的羿步FIFO的實現(xiàn)方法,并給出了VHDL程序,以解決異步讀寫時鐘引起的問題。

            本文引用地址:http://www.biyoush.com/article/226427.htm

            關(guān)鍵詞:FIFO 雙口RAM 格雷碼 VHDL

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

            1 異步FIFO功能描述

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

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

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

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

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

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

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

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

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

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

            wadd ——自然碼寫地址

            wadd_grey ——格雷碼寫地址

            wr_radd_grey ——寫時鐘采樣的格雷碼讀地址

            wr_radd ——寫時鐘采樣的自然碼讀地址

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

            程序3:寫地址產(chǎn)生模塊,此程序同時產(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=11111110then full='1';

            else full='0';

            end if;

            else

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



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉