一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VHDL語言的程序結(jié)構(gòu)與數(shù)據(jù)類型

 kingrfo 2011-05-27
VHDL語言的程序結(jié)構(gòu)與數(shù)據(jù)類型
第2節(jié) VHDL語言的程序結(jié)構(gòu)與數(shù)據(jù)類型
[學(xué)習(xí)要求] 掌握VHDL硬件描述語言的基本語法和源文件的結(jié)構(gòu),學(xué)會用VHDL硬件描述語言設(shè)計(jì)典型數(shù)字邏輯電路。
[重點(diǎn)與難點(diǎn)]
重點(diǎn):VHDL語言的程序結(jié)構(gòu);VHDL語言的數(shù)據(jù)類型及數(shù)據(jù)對象。
難點(diǎn):VHDL的數(shù)據(jù)對象中的變量和信號的區(qū)別。
[理論內(nèi)容]
一、VHDL的程序結(jié)構(gòu)
圖1 VHDL的程序結(jié)構(gòu)圖
圖1中是VHDL的全部結(jié)構(gòu),但實(shí)際上并不需要全部的結(jié)構(gòu),就像在許多設(shè)計(jì)項(xiàng)目中,大部分工程師只用到VHDL其中的30%的語法。通常圖2的結(jié)構(gòu)才是基本和必需的。
USE定義區(qū)
ENTITY定義區(qū)
ARCHITECTURE定義區(qū)
圖2 VHDL程序的基本結(jié)構(gòu)
由于VHDL已是IEEE規(guī)定的標(biāo)準(zhǔn),所以只是CPLD、FPGA等芯片公司,它們都會提供這個標(biāo)準(zhǔn)的定義庫(Library IEEE),而且由于這里面寫了許多的定義和參數(shù),初學(xué)者一時之間也不容易全部了解,所以全部寫上以減輕負(fù)擔(dān),后面的章節(jié)的程序默認(rèn)也這么寫。
程序如: USE IEEE.STD_LOGIC_1164.ALL; 代表本程序引用IEEE標(biāo)準(zhǔn)定義庫的STD_LOGIC_1164全部定義。
VHDL語言編寫是屬于自由格式,所以在一個完整命令敘述寫完時,必須為它加上“;”,作為前后命令的分界,如上述的Use定義命令。程序的注釋采用“--”
Entity部分是用來定義電路的輸入和輸出所用。定義區(qū)的命令格式為:
Architecture部分是描述這個電路的功能部分,其書寫的語法因具體電路的功能而定,下一節(jié)將詳細(xì)介紹。_
以下是一個簡單的例子:
library ieee; --采用ieee標(biāo)準(zhǔn)庫
use ieee.std_logic_1164.all; --使用其中的定義包,以后照著寫即可
use IEEE.STD_LOGIC_UNSIGNED.all; --同上
use IEEE.STD_LOGIC_ARITH.all; --同上
entity test is --定義實(shí)體名
port( --以下是定義輸入輸出端口
pin1 : in std_logic; --pin1為輸入端口,數(shù)據(jù)類型為std_logic
pin2 : in std_logic; --同上
pin3 : out std_logic --pin3為輸出端口,數(shù)據(jù)類型為std_logic
); --端口定義完成
end test; --實(shí)體描述完成
architecture behavior of test is --定義結(jié)構(gòu)體
begin --結(jié)構(gòu)體開始
pin3<=pin1 and pin2; --該語法表示將pin1和pin2相與送至pin3
end behavior; --結(jié)構(gòu)體描述完成
其實(shí)VHDL語言在書寫上和高級語言的描述十分相似(風(fēng)格更似于Ada語言),與C語言的比較如圖3所示,大家不要把它看得很神秘。VHDL語言本質(zhì)上區(qū)別于高級語言是,作為硬件的描述語言其語句具有一定的硬件特性,但描述過程卻像軟件的方式。
VHDL語言的編寫、編譯和調(diào)試方式與前面所介紹的圖形方式基本類似,這里不再介紹,相信大家會很快熟悉。
#include <stdio.h>
int sample(int foo)
{
int bar;
bar=0;
while(bar<foo)
bar=bar+1;
return(bar);
}
library ieee;
use ieee.std_logic_1164.all;
entity sample is
port(
foo: in integer range 0 to 3;
ret: out integer ranger 0 to 3
);
end sample
architecture behavior of sample is
begin
process(foo)
variable bar : integer range 0 to 3;
begin
bar:=0;
label1: while bar<foo loop
bar:=bar+1;
end loop label1;
ret:=bar;
end process;
end behavior;
圖3 C語言與VHDL語言的比較
二、VHDL語言的基本數(shù)據(jù)類型
在數(shù)字電路里的信號大致可分成邏輯信號和數(shù)值信號,而針對VHDL所提供的基本數(shù)據(jù)類型而言,可進(jìn)行如下分類。
1、邏輯信號
⑴ 布爾代數(shù)(Boolean)
VHDL的布爾代數(shù)信號定義是:Type BOOLEAN is (FALSE,TRUE);
也就是說它的信號形式包含兩種:FALSE,TRUE。在應(yīng)用上可以資助這種信號來代表某種動作是否完成,即代表某種情況的標(biāo)志信號。
⑵ 位(Bit)
VHDL的位信號定義是:Type Bit is (‘0’,’1’);
也就是說它的信號形式包含兩種:0,1類型。
這種信號類型0可視為數(shù)字電路里所謂的低電位,而1代表高電位。
⑶ 標(biāo)準(zhǔn)邏輯(Std_Logic)
在VHDL的“標(biāo)準(zhǔn)邏輯”信號形式定義是:
⑷ 邏輯序列信號
以數(shù)字電路而言,有許多時侯是將幾個信號全成一組代表特定功能的騙子列信號,例如:數(shù)據(jù)總線(Data Bus)、地址總線(Address Bus)等。實(shí)際上從電路的觀點(diǎn)上,圖4里的CE信號看成一條信號,而Data信號是由8條線合的排線信號。
圖4 序列信號在電路上的表示意義
VHDL針對這種序列信號的表示,提供了以下功能:
Bit_Vector : 位序列
Std_Logic_Vector : 標(biāo)準(zhǔn)邏輯序列
兩種邏輯序列,以方便在程序設(shè)計(jì)上的處理。例如針對圖4的信號定義,則可寫成以下的程序:
Signal Data : std_logic_vector(7 downto 0); --數(shù)據(jù)輸出
Signal Address : std_logic_vector(0 to 3); --地址
Signal CE : std_logic; --電路使能
由上述表示可知,Data信號共由8條線組俁而成(因?yàn)槭?至0),而且依照它的定義,第1條線應(yīng)是Data(7),第2條線應(yīng)是Data(6),然后依序第8條線是Data(0)。而對于Address序列信號的定義是“0 TO 3”,所以第1條是Address(0),第2條是Address(1),然后最后是Address(3)。在序列信號的表示時,除了序列的范圍大小須注意外,還須特別留意序列的編號須序。
⑸ 序列信號的分解與合并
在序列信號的處理上,VHDL的語法是接愛分解與合并,以圖5而言,它們在處理的命令語句上,可以寫成下面的程序,其中“&”符號代表執(zhí)行信號合并動作。
圖5序列信號的分解與合并
⑹ 邏輯信號的運(yùn)算
配合邏輯信號的基本運(yùn)算符,通常包含有兩種:邏輯運(yùn)算與關(guān)系運(yùn)算。具體的運(yùn)算如下表中所示。
2、數(shù)值信號
一般來說,在VHDL的程序里,將信號定義成數(shù)值,這是為了方便作數(shù)值方面的運(yùn)算,比如說“模6計(jì)數(shù)器”、“10分頻器”等。所以有了這樣的數(shù)值信號,后續(xù)作加減等運(yùn)算就盯對容易許多。
⑴ 整數(shù)(Integer)
VHDL的整數(shù)信號形式定義為: type Integer is ragne -2147483648 to 2147483647。 實(shí)際上一個整數(shù)是由32位的BIT_VECTOR構(gòu)成,所以數(shù)值圍也可以看成是從-231~231-1。
不過通常不會用到這么大的數(shù)值,這時若不考慮適當(dāng)調(diào)整其范圍,將造成硬件的不必要的浪費(fèi)。數(shù)值范圍的限制方法,是以range…to…命令來達(dá)成。例如,下面A、B、C信號的定義,原本都是32位的整數(shù),但經(jīng)range…to…命令的限制結(jié)果,將有效控制B,C的位長 度。
數(shù)據(jù)類型討論,接著來說明 VHDL 所提供的幾種數(shù)據(jù)對象。
常數(shù),是希望該常數(shù)所代表的數(shù)據(jù)部分不會被改變,如此一業(yè),
三、VHDL
的數(shù)據(jù)對象
有了上一部分的基本
不這這里所謂的數(shù)據(jù),是依該數(shù)據(jù)對象被定義成何種數(shù)據(jù)類型來區(qū)分。這樣的數(shù)據(jù)對象共分成三種:常數(shù)(Constant)、信號(Signal)和變量(Variable)。下面開始討論,如何定義這些數(shù)據(jù)對象與它們的使用范圍。 1、常數(shù)(Constant)
將數(shù)據(jù)對象定義為
程序的可讀性和維護(hù)性就會相對提高。
定義語法: Constant 常數(shù)名稱: 數(shù)據(jù)類型:=設(shè)置值
e)長的常數(shù),可分別烈軍
stant Zero_4 : std_logic_vector(3 downto 0) :=”0000”;
”;
2、信號(
數(shù)據(jù)對象,是為了指定電路內(nèi)部某一節(jié)點(diǎn)。而這種 “信號”的數(shù)據(jù)對
nal 信號名稱:數(shù)據(jù)類型:=設(shè)置值; --設(shè)置值可省略不寫。
管腳,
F
對象。
圖 6 “信號”數(shù)據(jù)對象 D 和 E
信號的定義一般在架構(gòu) A 出現(xiàn)在方塊(BLOCK)或過

用于過程(Process)里,它的使用通常只是為了程序運(yùn)算的方便,
比如定義一個4位(Nibble)長的常數(shù)和一個8位(Byt
屬成: Con
Constant Zero_8: std_logic_vector(7 downto 0):=”00000000
Signal)
定義“信號”的
象的定義方式是: 定義語法: Sig
比如圖6的方塊來表示一個CPLD或FPGA,這時A、B、C是視為電路的輸入
而是輸出管腳。這時的D、E就是所謂的電路內(nèi)部節(jié)瞇,也就是這里定義的“信號”數(shù)據(jù)
RCHITECTURE處,當(dāng)然也可以
程PROCESS)等中。 3、變量(Variable)
這種數(shù)據(jù)對象僅限
而且它和信號(Signal)對象在電路上的最大不同點(diǎn)是,它并不代表實(shí)際電路的某一組件值卻是一條信號線的物理意義,所以它在運(yùn)算處理上,會有立即的結(jié)果。而信號對象卻是代表電路的寄存器效果。這一點(diǎn)請大家仔細(xì)體會。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本女人亚洲国产性高潮视频| 亚洲中文字幕在线观看黑人| 精品人妻一区二区三区四在线| 国产午夜福利在线观看精品| 日本 一区二区 在线| 丰满少妇被猛烈撞击在线视频| 久久久精品日韩欧美丰满| 91日韩欧美国产视频| 日韩aa一区二区三区| 黄色国产一区二区三区| 亚洲熟妇熟女久久精品| 亚洲精品中文字幕熟女| 伊人国产精选免费观看在线视频 | 精品人妻一区二区三区四在线| 冬爱琴音一区二区中文字幕| 黄色片一区二区三区高清| 精品精品国产自在久久高清| 91精品国产综合久久精品| 午夜福利黄片免费观看| 在线观看视频日韩成人| 色丁香一区二区黑人巨大| 成人精品一区二区三区在线| 成人精品欧美一级乱黄| 午夜福利在线观看免费| 日本午夜福利视频免费观看| 国产一区二区三区口爆在线| 日本一区二区三区久久娇喘| 丝袜av一区二区三区四区五区| 欧美黑人在线精品极品| 老司机精品在线你懂的| 激情内射亚洲一区二区三区| 91欧美亚洲精品在线观看| 色无极东京热男人的天堂| 视频一区二区 国产精品| 日韩色婷婷综合在线观看| 日韩人妻欧美一区二区久久| 青青操日老女人的穴穴| 果冻传媒在线观看免费高清| 国产精欧美一区二区三区久久| 日韩精品毛片视频免费看 | 国产中文字幕一二三区|