劉春梅 高香梅
摘 要
簡(jiǎn)要介紹了VHDL中數(shù)據(jù)對(duì)象的基本概念,從不同方面討論了常用的數(shù)據(jù)對(duì)象的區(qū)別與聯(lián)系,通過(guò)實(shí)例詳細(xì)比較了信號(hào)與變量的用法。
【關(guān)鍵詞】VHDL 變量 信號(hào) 常量
1 引言
VHDL是一種常用的高級(jí)描述語(yǔ)言,通常包含庫(kù)、程序包、實(shí)體、構(gòu)造體和配置等部分。而數(shù)據(jù)對(duì)象根據(jù)不同情況可以定義在VHDL程序的這些部分中,尤其是信號(hào)和變量的使用易產(chǎn)生混淆。
2 數(shù)據(jù)對(duì)象的區(qū)別與聯(lián)系
在VHDL語(yǔ)言中,凡是可以賦予一個(gè)值的對(duì)象稱為客體也可叫做數(shù)據(jù)對(duì)象,能夠接受不同數(shù)據(jù)類(lèi)型的賦值。常用的數(shù)據(jù)對(duì)象主要有常量、變量和信號(hào)三種。
從定義范圍來(lái)看,常量和信號(hào)是全局量,變量是局部量。常量可以在程序包、實(shí)體、進(jìn)程中使用,一般在程序開(kāi)始前對(duì)常量進(jìn)行賦值。信號(hào)是電子電路內(nèi)部硬件實(shí)體相互連接的抽象表示,可以在結(jié)構(gòu)體、程序包和實(shí)體說(shuō)明中使用,信號(hào)名不能沖突。變量?jī)H在進(jìn)程語(yǔ)句、過(guò)程語(yǔ)句、函數(shù)語(yǔ)句的結(jié)構(gòu)中使用,不能將信息帶出對(duì)它作出定義的當(dāng)前設(shè)計(jì)單元。其中,應(yīng)用在不同范圍的變量名可以重復(fù)。
從延時(shí)特性來(lái)看,常量與變量的賦值是立即生效的,沒(méi)有延時(shí)。VHDL語(yǔ)言規(guī)則不支持變量附加延時(shí)語(yǔ)句,變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生。但是信號(hào)的代入賦值是允許延時(shí)的。比如,A0<=A1 AFTER 10 ns表示信號(hào)A0的值是由A1延時(shí)10ns所賦予的。
從賦值方式來(lái)看,常量與變量采用的是“:=”進(jìn)行賦值,信號(hào)采用的是“<=”進(jìn)行代入賦值,但是不論何種數(shù)據(jù)對(duì)象,初始化賦值均采用“:=”,其中,采用“:=”對(duì)信號(hào)賦初值時(shí)候不產(chǎn)生延時(shí)。常量的值在程序運(yùn)行過(guò)程不能改變,但是信號(hào)與變量可以進(jìn)行賦值。
常量、變量和信號(hào)所賦的值應(yīng)該與定義的表達(dá)式數(shù)據(jù)類(lèi)型一致,否則會(huì)出現(xiàn)錯(cuò)誤。信號(hào)與變量也可相互賦值,賦值符號(hào)的選擇取決于被賦值的數(shù)據(jù)對(duì)象。由于變量只能在所定義進(jìn)程內(nèi)使用,若想將變量用于進(jìn)程外,則可以賦值給同類(lèi)型的信號(hào)。在VHDL中,如果需要對(duì)某一數(shù)據(jù)進(jìn)行多次操作,則必須使用變量,因?yàn)閷?duì)信號(hào)的多次賦值只有最后一次會(huì)生效。
3 變量與信號(hào)用法的實(shí)例分析
數(shù)據(jù)對(duì)象中,變量與信號(hào)的用法易混淆,以四選一數(shù)據(jù)選擇器為例,分別采用信號(hào)賦值語(yǔ)句和變量賦值語(yǔ)句來(lái)實(shí)現(xiàn)。A0,A1,A2,A3分別為選擇器的一位數(shù)據(jù)輸入端,選擇端為S1,S0,其中S1S0分別為00,01,10,11時(shí),選擇A0,A1,A2,A3的值給輸出端口Q。采用信號(hào)賦值語(yǔ)句的結(jié)構(gòu)體程序如下:
ARCHITECTURE one OF mux4 IS
SIGNAL xy:INTEGER RANGE 0 TO 3;
BEGIN
PROCESS(A0,A1,A2,A3,S0,S1)
BEGIN
xy<=0;
IF (S0='1') THEN xy<=xy+1;
END IF;
IF (S1='1') THEN xy<=xy+2;
END IF;
CASE xy IS
WHEN 0=>Q<=A0;
WHEN 1=>Q<=A1;
WHEN 2=>Q<=A2;
WHEN 3=>Q<=A3;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END one;
該程序段內(nèi)xy是全局量的信號(hào),定義在結(jié)構(gòu)體中,其值與S1S0的值一樣,當(dāng)xy分別為0,1,2,3時(shí),將A0,A1,A2,A3賦給Q。經(jīng)過(guò)Quartus II9.0軟件程序編譯可以通過(guò)。仿真結(jié)果如圖1所示,其中,輸入A0設(shè)置為頻率較高的周期信號(hào),A1為低電平,A2位頻率較低的周期信號(hào),A3為高電平。
從圖1仿真結(jié)果看出,采用信號(hào)賦值語(yǔ)句的結(jié)果不正確,分析其原因主要是因?yàn)樾盘?hào)賦值是在進(jìn)程結(jié)束時(shí)更新,啟動(dòng)一次進(jìn)程信號(hào)xy的值只能改變一次。
下面采用變量賦值語(yǔ)句來(lái)實(shí)現(xiàn),對(duì)程序進(jìn)行如下修改:
ARCHITECTURE one OF mux4 IS
BEGIN
PROCESS(A0,A1,A2,A3,S0,S1)
VARIABLE xy:INTEGER RANGE 0 TO 3;
BEGIN
xy:=0;
IF (S0='1') THEN xy:=xy+1;
END IF;
IF (S1='1') THEN xy:=xy+2;
END IF;
CASE xy IS
WHEN 0=>Q<=A0;
WHEN 1=>Q<=A1;
WHEN 2=>Q<=A2;
WHEN 3=>Q<=A3;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END one;
該程序段中,作為局部量的變量定義在進(jìn)程中,經(jīng)過(guò)軟件編譯成功。圖2為采用變量賦值語(yǔ)句的仿真結(jié)果。
從圖2看出,當(dāng)S1S0也就是xy的值為0時(shí),Q輸出A0的值,S1S0為1時(shí),Q輸出A1的值,S1S0為2時(shí),Q輸出A2的值,S1S0為3時(shí),Q輸出A3的值,所以采用變量賦值語(yǔ)句的結(jié)果實(shí)現(xiàn)了選擇器的功能,這是因?yàn)樽兞抠x值是立即更新,啟動(dòng)一次進(jìn)程變量xy的值為所需要的最后結(jié)果。
4 結(jié)束語(yǔ)
在VHDL中,數(shù)據(jù)對(duì)象類(lèi)似于一種容器,它接受不同數(shù)據(jù)類(lèi)型的賦值。常量,變量和信號(hào)是常用的三種數(shù)據(jù)對(duì)象。其中,信號(hào)與變量的使用容易產(chǎn)生混淆,通過(guò)實(shí)例分析討論了信號(hào)與變量,如果使用不當(dāng),結(jié)果會(huì)產(chǎn)生錯(cuò)誤,因此,在設(shè)計(jì)中要謹(jǐn)慎使用信號(hào)與變量。
參考文獻(xiàn)
[1]吳方,劉文娟.EDA技術(shù)[M].武漢:武漢大學(xué)出版社,2011.
[2]劉昌華.EDA技術(shù)與應(yīng)用——基于Quartus II和VHDL[M].北京:北京航空航天大學(xué)出版社,2012.
[3]胥勛濤.EDA技術(shù)項(xiàng)目化教程[M].北京:電子工業(yè)出版社,2011.
作者單位
安徽農(nóng)業(yè)大學(xué)經(jīng)濟(jì)技術(shù)學(xué)院 安徽省合肥市 230011