• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      VHDL設(shè)計(jì)中變量和信號(hào)探討

      2014-02-25 10:52:18劉琳吳維林
      電腦知識(shí)與技術(shù) 2014年1期

      劉琳 吳維林

      摘要:隨著航天產(chǎn)品中越來(lái)越廣泛使用FPGA器件,熟練掌握VHDL硬件語(yǔ)言對(duì)于電路設(shè)計(jì)顯得至關(guān)重要。變量和信號(hào)是VHDL語(yǔ)言中最為常用和最重要的兩種數(shù)據(jù)對(duì)象,該文針對(duì)變量和信號(hào)的重要區(qū)別和使用技巧展開(kāi)了探討,并結(jié)合實(shí)際FPGA測(cè)試中的實(shí)例進(jìn)行了詳細(xì)的闡述和仿真驗(yàn)證。

      關(guān)鍵詞:FPGA;VHDL;變量和信號(hào)

      中圖分類(lèi)號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)01-0219-04

      1 概述

      隨著EDA技術(shù)的發(fā)展,越來(lái)越多的航天產(chǎn)品中開(kāi)始使用FPGA器件, FPGA設(shè)計(jì)中使用的硬件語(yǔ)言VHDL語(yǔ)言由于發(fā)展的較早,語(yǔ)法嚴(yán)格,非常適合大規(guī)模系統(tǒng)的設(shè)計(jì),被航天產(chǎn)品設(shè)計(jì)師廣泛應(yīng)用。

      變量和信號(hào)是VHDL語(yǔ)言中最為常用和最重要的兩種數(shù)據(jù)對(duì)象,在電路設(shè)計(jì)中正確應(yīng)用變量和信號(hào)是成功完成電路設(shè)計(jì)的重要因素。在對(duì)航天型號(hào)FPGA產(chǎn)品的評(píng)測(cè)過(guò)程中發(fā)現(xiàn),設(shè)計(jì)師在使用VHDL語(yǔ)言時(shí)會(huì)對(duì)變量和信號(hào)的使用把握不準(zhǔn)確,導(dǎo)致一些不必要的問(wèn)題發(fā)生。因此,深入研究VHDL中變量和信號(hào)的基本特性和應(yīng)用特點(diǎn)十分重要,對(duì)于提高FPGA的設(shè)計(jì)效率有著重要的意義。

      2 變量和信號(hào)的主要區(qū)別

      信號(hào)、變量和常量是VHDL中常用的2類(lèi)數(shù)據(jù)對(duì)象。變量非常接近軟件高級(jí)語(yǔ)言中的變量、而信號(hào)則具備更多的硬件特征,能對(duì)應(yīng)硬件電路中的實(shí)際連線,是VHDL語(yǔ)言所特有的。信號(hào)和變量的用法和區(qū)別主要體現(xiàn)在以下幾個(gè)方面。

      1)變量是一個(gè)局部量,只能在進(jìn)程和子程序中聲明和使用。信號(hào)是一個(gè)全局量,使用和定義范圍是實(shí)體、結(jié)構(gòu)體和程序包,它具有全局性特征。例如,在實(shí)體中定義的信號(hào)可以被該實(shí)體中所有的進(jìn)程使用。因此,信號(hào)可以作為信息交流通道在不同進(jìn)程之間傳遞信息。

      2)變量和信號(hào)的賦值語(yǔ)句不同,前者為“:=”,后者為“<=”。

      3)進(jìn)程中的敏感列表中可以有信號(hào),不能有變量。

      4)變量的賦值不存在延時(shí),是立即發(fā)生的,而信號(hào)賦值都是有延時(shí)的。在一個(gè)進(jìn)程中,如果對(duì)同一個(gè)信號(hào)多次賦值,僅最后一次賦值是有效的,如果對(duì)一個(gè)變量進(jìn)行多次賦值,那么每次賦值都是有效的,變量的值在再次賦值之前一直保持不變。

      結(jié)合以下的幾個(gè)例子我們可以體會(huì)到變量和信號(hào)在賦值時(shí)的不同之處。在程序1中,由于信號(hào)賦值有延時(shí),即進(jìn)程結(jié)束時(shí)賦新值,所以結(jié)果是a和b 的值互換;而程序2中,由于變量賦值是立即更新的,所以結(jié)果是a和b的值均為b。

      程序1:

      architecture xinhao_arch of xinhao is

      signal a,b : std_logic; —信號(hào)

      begin

      process (a,b)

      begin

      a <= b;

      b <= a;

      end process;

      end xinhao_arch ;

      程序2:

      architecture bianliang_arch of bianliang is

      begin

      process

      variable a,b : std_logic;—變量

      begin

      a := b;

      b := a;

      end process;

      end bianliang_arch ;

      程序3和程序4是將輸入信號(hào)din用信號(hào)賦值和變量賦值的方法分別賦值給輸出信號(hào)dout。我們分別比較兩種情況下的區(qū)別。

      程序3:

      entity xh is

      port(

      din : in std_logic;—輸入信號(hào)

      clk : in std_logic;—時(shí)鐘信號(hào)

      dout : out std_logic –輸出信號(hào)

      );

      end xh;

      architecture xh_a of xh is

      signal da,db: std_logic;—信號(hào)

      begin

      process(clk)

      begin

      if rising_edge(clk) then

      da <= din;

      db <= da;

      end if;

      end process ;

      dout <= db;

      end xh_a;

      在程序3中,由于信號(hào)的賦值不是即時(shí)的,輸入端口din的值在賦給輸出端口dout時(shí)經(jīng)過(guò)了2個(gè)時(shí)鐘延時(shí),所以它由2個(gè)D觸發(fā)器構(gòu)成,如圖1和圖2。

      程序4:

      entity bl is

      port(

      din : in std_logic;

      clk : in std_logic;

      dout : out std_logic

      );

      end bl;

      architecture bl_b of bl is

      begin

      process(clk)

      variable da,db: std_logic;—變量

      begin

      if rising_edge(clk) then

      da := din;

      db := da;

      dout <= db;

      end if;

      end process ;

      end bl_b;

      程序4中,由于變量的賦值是即時(shí)的,相當(dāng)于把輸入端口din的的值賦給輸出端口dout,所以它由一個(gè)D觸發(fā)器構(gòu)成,如圖3、圖4。

      3 變量和信號(hào)賦初值技巧

      在FPGA設(shè)計(jì)中,復(fù)位時(shí)賦予各個(gè)信號(hào)初值是很有必要的,否則可能出現(xiàn)不定態(tài)。在給變量和信號(hào)定義的時(shí)候雖然可以賦初值,但應(yīng)該注意的是,這個(gè)初始值只是對(duì)于行為級(jí)仿真來(lái)說(shuō)有用 , 綜合器在綜合時(shí)會(huì)忽略這些信息。

      在某型號(hào)FPGA產(chǎn)品測(cè)試時(shí)發(fā)現(xiàn)設(shè)計(jì)師使用多個(gè)變量信號(hào),并對(duì)這些變量信號(hào)賦初始值,前仿真結(jié)果正確,但后仿真中觀測(cè)的信號(hào)為不定值,無(wú)法順利進(jìn)行后仿真。程序部分代碼如下:

      process(clk)

      variable en : std_logic := '0';

      variable cnt : std_logic_vector(1 downto 0) := (others =>'0');

      begin

      if rising_edge(clk) then

      cnt := cnt + (clk2 and en);

      en := not clk2

      end if;

      end process;

      波形見(jiàn)下圖5

      分析其原因:在定義變量en和cnt時(shí)直接給其賦初始值并不能生效,這是因?yàn)榫C合過(guò)程中綜合器將略去所有變量的初始值,因此變量en和cnt在后仿真中為不確定態(tài),從而使得后仿真無(wú)法順利進(jìn)行。

      為了實(shí)現(xiàn)對(duì)變量en和cnt賦初值,需要對(duì)程序進(jìn)行如下修改。修改后仿真波形見(jiàn)下圖6,后仿真結(jié)果正確。

      process(clk)

      variable en : std_logic;

      variable cnt : std_logic_vector(1 downto 0);

      begin

      if rising_edge(clk) then

      if reset = '0' then — reset為全局復(fù)位信號(hào)

      cnt := (others=>'0');

      en := '0';

      else

      cnt := cnt + (clk2 and en);

      en := not clk2;

      end if;

      end if;

      end process;

      由此可見(jiàn),信號(hào)和變量應(yīng)該避免在定義時(shí)初始化賦值。而改由在相應(yīng)的位置(如復(fù)位處)進(jìn)行初始化。因此,無(wú)論是在仿真還是綜合時(shí),都建議使用這樣的方法(在復(fù)位處)進(jìn)行初始化。

      4 變量和信號(hào)使用特點(diǎn)

      在實(shí)際編程中,我們要結(jié)合變量和信號(hào)有各自的區(qū)別和優(yōu)缺點(diǎn)在不同的情況下進(jìn)行選擇使用,尤其注意以下幾個(gè)幾點(diǎn):

      1)變量可以用來(lái)實(shí)現(xiàn)一些復(fù)雜的算法,也可以進(jìn)行建模。對(duì)于仿真來(lái)說(shuō),使用變量一般可以提高程序的仿真速度,縮短測(cè)試周期,但在有的仿真器中也存在無(wú)法直接觀測(cè)變量波形和變化值,使得仿真過(guò)程復(fù)雜化。

      2)變量賦值雖然是無(wú)延時(shí)的,但變量的操作綜合后容易在硬件上產(chǎn)生較大的延時(shí),這是因?yàn)閷?duì)變量的操作往往被綜合成為組合邏輯。而信號(hào)更接近于硬件,綜合后一般對(duì)應(yīng)成觸發(fā)器,能很好的控制硬件上的延時(shí)。因此,從這個(gè)意義上講使用信號(hào)能提高設(shè)計(jì)的速度。

      3)變量由于其有效范圍只是局限在它所在的進(jìn)程之中,因此要將變量的值傳輸?shù)竭M(jìn)程之外的話必須要先傳輸給信號(hào),利用信號(hào)的全局特性進(jìn)行信息傳遞。因此,程序中如果大量使用變量就必須同時(shí)定義若干個(gè)相關(guān)信號(hào),在多個(gè)進(jìn)程之間傳遞大量的信息十分的不方便,也大大降低了程序的可讀性。而信號(hào)不存在這樣的缺點(diǎn),因此在實(shí)際設(shè)計(jì)中應(yīng)盡量使用信號(hào)進(jìn)行內(nèi)部信息傳遞。

      5 結(jié)束語(yǔ)

      通過(guò)上面的討論可知,在FPGA設(shè)計(jì)中,要特別注意信號(hào)和變量的區(qū)別和使用特點(diǎn),靈活掌握信號(hào)和變量的使用技巧,提高設(shè)計(jì)效率。

      參考文獻(xiàn):

      [1] 侯伯亨,顧新.VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)[M].西安電子科技大學(xué)出版社,1999.

      [2] 潘松,黃繼業(yè).EDA技術(shù)應(yīng)用教程[M].科學(xué)出版社,2006.

      [3] 金寶根.VHDL中常用數(shù)據(jù)對(duì)象的應(yīng)用及注意事項(xiàng)[J].信息技術(shù),2012(5).

      沂水县| 寿阳县| 黄石市| 若羌县| 日喀则市| 滦平县| 沈丘县| 雅安市| 昌都县| 永宁县| 临夏县| 曲水县| 大悟县| 罗山县| 田林县| 曲水县| 寿阳县| 邢台市| 河北区| 贡嘎县| 上蔡县| 巴青县| 启东市| 台江县| 台州市| 文水县| 曲麻莱县| 泌阳县| 汕头市| 柳河县| 卓尼县| 永嘉县| 合水县| 疏附县| 新巴尔虎右旗| 本溪市| 腾冲县| 多伦县| 云阳县| 长武县| 寿光市|