日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 工業(yè)控制 > 電子設(shè)計自動化
[導讀]FIFO (先進先出隊列)是一種在電子系統(tǒng)得到廣泛應(yīng)用的器件,通常用于數(shù)據(jù)的緩存和用于容納異步信號的頻率或相位的差異。FIFO的實現(xiàn)通常是利用雙口RAM和讀寫地址產(chǎn)生模塊來實現(xiàn)的。FIFO的接口信號包括異步的寫時鐘(

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的空標志(empty)和滿標志(full)以禁止讀寫操作。

1 異步FIFO功能描述

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

FIFO的接口信號和內(nèi)部模塊圖

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

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

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

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

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

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

為了應(yīng)用的靈活,還增加了兩個標志信號,將滿(almosf_full)標志和空(almost_empty)標志分別定義如下:當寫地址與讀地址的距離小于某個預先定義數(shù)值時,almost_full為1;當讀地址與寫地址的距離小于這個預先定義的數(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)生將滿和將空標志的予定義讀寫地址差值

程序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:滿標志和滿標志產(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)生模塊和空標志及空標志的產(chǎn)生模塊與寫地址模塊類似。

4 結(jié)論

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



來源:ks990次

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

當前最流行的硬件設(shè)計語言有兩種,即 VHDL 與 Verilog HDL,兩者各有優(yōu)劣,也各有相當多的擁護者。VHDL 語言由美國軍方所推出,最早通過國際電機工程師學會(IEEE)的標準,在北美及歐洲應(yīng)用非常普遍。而 V...

關(guān)鍵字: vhdl verilog

    串行總線和并行總線相比具有結(jié)構(gòu)簡單、占用引腳少、成本低的優(yōu)點。常見的串行總線有USB、IEEE1394、I2C等,其中I2C總線具有使用簡單的特點,在單片機、串行E2P

關(guān)鍵字: vhdl i2c 串行總線

  目前,許多廠商都提供通用的串行通信芯片,其傳輸方式分為同步方式和異步方式。其中,異步芯片大多與INTEL的8250芯片兼容;而同步方式,由于一般涉及到所支持的傳輸協(xié)議(BSC、HDLC、SD

關(guān)鍵字: FPGA cpld vhdl 通信芯片

當今汽車行業(yè)所面臨的挑戰(zhàn)與電信行業(yè)十多年前所經(jīng)歷的類似?;旌蟿恿﹄妱悠嚭腿剂想姵仄嚨刃录夹g(shù)也促進了研發(fā)活動的日趨活躍,正如我們在手機演變成多媒體設(shè)備的進程中所看到的一樣。同樣,電信業(yè)面臨著功

關(guān)鍵字: vhdl 仿真 系統(tǒng)設(shè)計

  擁塞管理是指網(wǎng)絡(luò)在發(fā)生擁塞時,如何進行管理和控制。FIFO隊列不對報文進行分類,按報文到達接口的先后順序讓報文進入隊列,采用盡力而為的轉(zhuǎn)發(fā)模式,PQ隊列是針對關(guān)鍵業(yè)務(wù)應(yīng)用設(shè)計的。  

關(guān)鍵字: fifo 擁塞 計算機數(shù)據(jù)通信

0 引言 VHDL超高速集成電路硬件描述語言是隨著集成電路系統(tǒng)化和高度集成化逐步發(fā)展起來的,是一種用于數(shù)字系統(tǒng)設(shè)計、測試,面向多領(lǐng)域、多層次的IEEE標準硬件描述語言。它從20世紀70年

關(guān)鍵字: EDA vhdl 醫(yī)療電子

在使用lattice domiand時,出現(xiàn)了下面示圖現(xiàn)象,一個輸入信號總是出現(xiàn)在unconnected欄里,也即意味著你不能綁定管腳。logical net 'clkin' has no load.

關(guān)鍵字: lattice vhdl

一個VHDL程序代碼包含實體(entity)、結(jié)構(gòu)體(architecture)、配置(configuration)、程序包(package)、庫(library)等。一、數(shù)據(jù)類型1.用戶自定義數(shù)據(jù)類

關(guān)鍵字: vhdl

1、--GENERIC可以用來指定一些全局的變量,它要放在entity之后,port口映射之前entity ethernet isgeneric(--GENERIC語句指定的參數(shù)是全局的MIIM_PH

關(guān)鍵字: vhdl
關(guān)閉