第3章硬件描述語言簡介2_第1頁
第3章硬件描述語言簡介2_第2頁
第3章硬件描述語言簡介2_第3頁
第3章硬件描述語言簡介2_第4頁
第3章硬件描述語言簡介2_第5頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第三章硬件描述語言簡介Chapter3

IntoductionofHardwareDescriptionLanguage本章主要內(nèi)容

第一節(jié)概述第二節(jié)VHDL簡介第三節(jié)VerilogHDL簡介1HDL(HardwareDescriptionLanguage)是一種國際上流行的描述數(shù)字電路和系統(tǒng)的語言,可以在EDA工具的支持下,快速實(shí)現(xiàn)設(shè)計(jì)者的設(shè)計(jì)意圖。常用的HDL語言有VHDL和VerilogHDL兩種?!?.1概述2§3.1概述HDL功能:描述數(shù)字系統(tǒng);描述多個(gè)數(shù)字電路模塊之間的連接,組合成一個(gè)較大的系統(tǒng);建立測(cè)試激勵(lì)信號(hào)文件,在仿真環(huán)境中,對(duì)設(shè)計(jì)好的系統(tǒng)進(jìn)行調(diào)試驗(yàn)證。3一、VHDL定義及發(fā)展簡介。二、VerilogHDL概況及發(fā)展簡介?!?.1概述4§3.1.1VHDL定義及發(fā)展簡介什么是VHDL?VHDL:

VHSIC(VeryHighSpeedIntegratedCircuit)

Hardware

Description

Language5§3.1.1VHDL定義及發(fā)展簡介VHDL定義及發(fā)展歷程;VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage:超高速集成電路硬件描述語言。1980年開始在美國國防部的指導(dǎo)下開發(fā);1987.12IEEEStd1076-1987:VHDL’871993更新為IEEEStd1164-1993,VHDL’93IEEE還成立了專門機(jī)構(gòu)推廣VHDL,VASG(VHDLAnalysisandStandardGroup)6§3.1.1VHDL定義及發(fā)展簡介VHDL作用:1、VHDL打破軟、硬件的界限。傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計(jì)分為:硬件設(shè)計(jì)(硬件設(shè)計(jì)人員)軟件設(shè)計(jì)(軟件設(shè)計(jì)人員)

VHDL是電子系統(tǒng)設(shè)計(jì)者和EDA工具之間的界面。

EDA工具及HDL的流行,使電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展。美國硅谷約有80%的

ASIC和

FPGA/CPLD已采用HDL進(jìn)行設(shè)計(jì)。7§3.1.1VHDL定義及發(fā)展簡介VHDL特點(diǎn);1、VHDL具有強(qiáng)大的語言結(jié)構(gòu),系統(tǒng)硬件描述能力強(qiáng)、設(shè)計(jì)效率高;具有較高的抽象描述能力。2、VHDL語言可讀性強(qiáng),易于修改和發(fā)現(xiàn)錯(cuò)誤。3、VHDL具有豐富的仿真語句和庫函數(shù),可對(duì)VHDL源代碼進(jìn)行早期功能仿真,有利于大系統(tǒng)的設(shè)計(jì)與驗(yàn)證。4、VHDL設(shè)計(jì)與硬件電路關(guān)系不大。5、VHDL設(shè)計(jì)不依賴于器件,與工藝無關(guān)。6、移植性好。7、VHDL體系符合TOP-DOWN和CE(并行工程)設(shè)計(jì)思想。8、VHDL設(shè)計(jì)效率高,產(chǎn)品上市時(shí)間快,成本低。9、易于ASIC實(shí)現(xiàn)。8§3.1.2

VerilogHDL概況及發(fā)展簡介VerilogHDL的定義VerilogHDL是硬件描述語言的一種,用于數(shù)字電子系統(tǒng)設(shè)計(jì)。該語言允許設(shè)計(jì)者進(jìn)行各種級(jí)別的邏輯設(shè)計(jì),進(jìn)行數(shù)字邏輯系統(tǒng)的仿真驗(yàn)證、時(shí)序分析、邏輯綜合。它是目前應(yīng)用最廣泛的一種硬件描述語言。

Verilog于1983年首創(chuàng),1995年成為IEEE1364-1995標(biāo)準(zhǔn)。9§3.1.2

VerilogHDL概況及發(fā)展簡介1983年:GatewayDesignAutomation公司在C語言的基礎(chǔ)上,開發(fā)了VerilogHDL。1989年,Cadence收購了GDA,1990年該公司成立OVI(OpenVerilogInternational)組織,推廣該語言。1995年:IEEE制定了IEEE標(biāo)準(zhǔn)-IEEE1364-1995標(biāo)準(zhǔn)。2001年:發(fā)布了VerilogHDL1364-2001標(biāo)準(zhǔn),加入了VerilogHDL-A標(biāo)準(zhǔn),使其具有描述模擬電路的能力。10其他HDL語言其他HDL語言最流行的HDL語言是Verilog和VHDL。后來在其基礎(chǔ)上又發(fā)展出了許多抽象程度更高的硬件描述語言,如SystemVerilog、Superlog、SystemC和CoWareC等。這些高級(jí)HDL語言的語法結(jié)構(gòu)更加豐富,更適合用于系統(tǒng)級(jí)、功能級(jí)等高層次的設(shè)計(jì)描述和仿真。11其他HDL語言12相同點(diǎn):都可以借助類似高級(jí)語言的特性來抽象描述數(shù)字電路的結(jié)構(gòu)和功能,都可以對(duì)設(shè)計(jì)出來的電路進(jìn)行驗(yàn)證和仿真,以確保電路的正確性,以及都可以實(shí)現(xiàn)電路描述與工藝實(shí)現(xiàn)的分離。不同點(diǎn):Verilog具有較多的第三方工具的支持;語法結(jié)構(gòu)比VHDL簡單;Verilog

類C,學(xué)習(xí)起來比VHDL容易。Verilog與VHDL比較:§3.1概述13Verilog與VHDL比較:VerilogVHDL系統(tǒng)級(jí)算法級(jí)寄存器傳輸級(jí)邏輯門級(jí)開關(guān)電路級(jí)Verilog與VHDL建模能力比較§3.1概述14§3.2

VHDL簡介一、VHDL設(shè)計(jì)描述的基本結(jié)構(gòu)。二、數(shù)據(jù)類型、詞法、運(yùn)算符、對(duì)象、屬性。三、VHDL語句、庫和use子句四、VHDL設(shè)計(jì)實(shí)體及舉例15VHDL設(shè)計(jì)簡述VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。

VHDL將一個(gè)設(shè)計(jì)(元件、電路、系統(tǒng))分為:外部(可視部分、端口)內(nèi)部(不可視部分、內(nèi)部功能、算法)§3.2VHDL簡介16外部與內(nèi)部:§3.2VHDL簡介器件或子系統(tǒng)

ARCHITECTUREProcessProcessENTITYSequentialProcessCombinationalProcessportsportscomponentportsports17VHDL語言的一些基本特點(diǎn):VHDL語言由保留關(guān)鍵字組成;一般,VHDL語言對(duì)字母大小寫不敏感;

例外:‘’、“”所括的字符、字符串;每條VHDL語句由一個(gè)分號(hào)(;)結(jié)束;VHDL語言對(duì)空格不敏感,增加可讀性;在“--”之后的是VHDL的注釋語句;VHDL有以下描述風(fēng)格:行為描述;數(shù)據(jù)流(寄存器傳輸RTL)描述;結(jié)構(gòu)化描述;§3.2VHDL簡介18基本結(jié)構(gòu)包括:實(shí)體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)庫(Library)、程序包(Package)VHDL程序基本結(jié)構(gòu)19VHDL程序基本結(jié)構(gòu)

庫、程序包

實(shí)體(Entity)

結(jié)構(gòu)體

(Architecture)

進(jìn)程或其它并行結(jié)構(gòu)

配置(Configuration)202選1選擇器:VHDL程序基本結(jié)構(gòu)21一、實(shí)體

實(shí)體(說明):定義系統(tǒng)的輸入輸出端口

語法:

ENTITY<entity_name>IS

GenericDeclarations

PortDeclarationsEND<entity_name>;

(1076-1987version)ENDENTITY<entity_name>;(1076-1993version)VHDL程序基本結(jié)構(gòu)22§3.2VHDL簡介1、類屬說明確定實(shí)體或組件中定義的局部常數(shù)。模塊化設(shè)計(jì)時(shí)多用于不同層次模塊之間信息的傳遞??蓮耐獠扛淖儍?nèi)部電路結(jié)構(gòu)和規(guī)模。類屬說明必須放在端口說明之前。Generic(

常數(shù)名稱:類型[:=缺省值]{常數(shù)名稱:類型[:=缺省值]});一、實(shí)體23§3.2VHDL簡介1、類屬常用于定義:

實(shí)體端口的大小、設(shè)計(jì)實(shí)體的物理特性、總線寬度、元件例化的數(shù)量等。例:

entitymckis

generic(width:integer:=16);port(add_bus:outstd_logic_vector(width-1downto0));

…一、實(shí)體24§3.2VHDL簡介例:2輸入與門的實(shí)體描述

entityand2is

generic(risewidth:time:=1ns;fallwidth:time:=1ns);port(a1:instd_logic;a0:instd_logic;z0:outstd_loigc);endentityand2;

注:數(shù)據(jù)類型time用于仿真模塊的設(shè)計(jì)。綜合器僅支持?jǐn)?shù)據(jù)類型為整數(shù)的類屬值。25§3.2VHDL簡介其中,端口模式:

in:

輸入型,此端口為只讀型。

out:

輸出型,只能在實(shí)體內(nèi)部對(duì)其賦值。

inout:輸入輸出型,既可讀也可賦值。

buffer:

緩沖型,與out相似,但可讀。Port(

端口名稱{,端口名稱}:端口模式

數(shù)據(jù)類型;

端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型

);2、端口聲明端口聲明:確定輸入、輸出端口的數(shù)目和類型。一、實(shí)體26§3.2VHDL簡介一、實(shí)體

指端口上流動(dòng)的數(shù)據(jù)的表達(dá)格式。為預(yù)先定義好的數(shù)據(jù)類型。如:bit、bit_vector、integer、std_logic、std_logic_vector

等。例:entitynand2isentitym81isport(port(a,b:inbit;a:inbit_vector(7downto0);z:outbitsel:inbit_vector(2downto0););b:outbit);endentitynand2;endentitym81;3、數(shù)據(jù)類型27§3.2VHDL簡介作用:定義系統(tǒng)(或模塊)的行為、元件及內(nèi)部的連接關(guān)系,即描述其邏輯功能。兩個(gè)組成部分:

對(duì)數(shù)據(jù)類型、常數(shù)、信號(hào)、子程序、元件等元素的說明部分。

以各種不同的描述風(fēng)格描述的系統(tǒng)的邏輯功能實(shí)現(xiàn)的部分。常用的描述風(fēng)格有:行為描

述、數(shù)據(jù)流描述、結(jié)構(gòu)化描述。二、結(jié)構(gòu)體28§3.2VHDL簡介結(jié)構(gòu)體結(jié)構(gòu)體說明結(jié)構(gòu)體功能描述常數(shù)說明數(shù)據(jù)類型說明信號(hào)說明例化元件說明子程序說明塊語句進(jìn)程語句信號(hào)賦值語句子程序調(diào)用語句元件例化語句29§3.2VHDL簡介實(shí)體與結(jié)構(gòu)體的關(guān)系:設(shè)計(jì)實(shí)體結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體3結(jié)構(gòu)體n。。。

一個(gè)設(shè)計(jì)實(shí)體可有多個(gè)結(jié)構(gòu)體,代表實(shí)體的多種實(shí)現(xiàn)方式。各個(gè)結(jié)構(gòu)體的地位相同。30§3.2VHDL簡介注:同一實(shí)體的結(jié)構(gòu)體不能同名。定義語句中的常數(shù)、信號(hào)不能與實(shí)體中的端口同名。architecture

結(jié)構(gòu)體名稱

of

實(shí)體名稱

is

[說明語句]內(nèi)部信號(hào)、常數(shù)、數(shù)據(jù)類型、子程序(函數(shù)、過程)、元件等的說明;

begin[并行處理(功能描述)語句];

end[architecture]結(jié)構(gòu)體名稱;語法:二、結(jié)構(gòu)體31§3.2VHDL簡介例:一個(gè)完整描述(3bit計(jì)數(shù)器)32§3.2VHDL簡介程序包:已定義的常數(shù)、數(shù)據(jù)類型、元件調(diào)用說明、子程序的一個(gè)集合。目的:方便公共信息、資源的訪問和共享。庫:多個(gè)程序包構(gòu)成庫。

三、程序包、庫33§3.2VHDL簡介程序包說明的內(nèi)容:常量說明;

VHDL數(shù)據(jù)類型說明;元件說明;子程序說明;程序包的結(jié)構(gòu)包括:程序包說明(包首)程序包主體(包體)三、程序包、庫34§3.2VHDL簡介包聲明項(xiàng)可由以下語句組成:

use語句(用來包括其它程序包);類型說明;子類型說明;常量說明;信號(hào)說明;子程序說明;元件說明。

package

程序包名is{包說明項(xiàng)}

end

程序包名;1、程序包說明(包首)語法:三、程序包、庫35§3.2VHDL簡介三、程序包、庫包體說明項(xiàng)可含:

use語句;子程序說明;子程序主體;

類型說明;子類型說明;常量說明。

packagebody

程序包名is{包體說明項(xiàng)}

end

程序包名;2、程序包包體程序包的內(nèi)容:子程序的實(shí)現(xiàn)算法。包體語法:36§3.2VHDL簡介3、庫的種類

VHDL庫可分為5種:

1)IEEE庫定義了四個(gè)常用的程序包:

?std_logic_1164(std_logictypes&relatedfunctions)?std_logic_arith(arithmeticfunctions)?std_logic_signed(signedarithmeticfunctions)?std_logic_unsigned(unsignedarithmeticfunctions)三、程序包、庫37§3.2VHDL簡介

2)STD庫(默認(rèn)庫)

庫中程序包為:standard,定義最基本的數(shù)據(jù)類型:

Bit,bit_vector,Boolean,

Integer,Real,andTime

注:TypeBit2logicvaluesystem(‘0’,‘1’)

3)面向ASIC的庫

4)WORK庫(默認(rèn)庫)

5)用戶定義庫3、庫的種類

三、程序包、庫38§3.2VHDL簡介4、庫及程序包的使用

庫及程序包的說明總是放在實(shí)體單元前面,默認(rèn)庫及程序包可不作說明。用關(guān)健字library

說明要使用的庫,用關(guān)健字

use說明要使用的庫中的程序包。庫及程序包的作用范圍:僅限于所說明的設(shè)計(jì)實(shí)體。

每一個(gè)設(shè)計(jì)實(shí)體都必須有自已完整的庫及程序包說明語句。三、程序包、庫39§3.2VHDL簡介庫的使用語法:程序包的使用有兩種常用格式:

例:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.conv_integer;

library庫名;

use庫名.程序包名.項(xiàng)目名

use庫名.程序包名.All;40VHDL語言要素四類語言要素:

數(shù)據(jù)對(duì)象(DataObject)

數(shù)據(jù)類型(DataType)

操作數(shù)(Operands)

操作符(Operator)41一、VHDL文字規(guī)則1、數(shù)字型文字;2、字符串型文字(文字串和數(shù)字串);3、標(biāo)識(shí)符;4、下標(biāo)名及下標(biāo)段名;VHDL語言要素42二、數(shù)據(jù)對(duì)象

三種對(duì)象:常量(Constant)變量(Variable)信號(hào)(Signal)

三種對(duì)象的物理含義:

?常量代表數(shù)字電路中的電源、地、恒定邏輯值等常數(shù);

?變量代表暫存某些值的載體,常用于描述算法;

?信號(hào)代表物理設(shè)計(jì)中的某一條硬件連接線,包括輸入、輸出端口。VHDL語言要素43三、VHDL數(shù)據(jù)類型

VHDL是一種強(qiáng)數(shù)據(jù)類型語言。要求設(shè)計(jì)實(shí)體中的每一個(gè)常數(shù)、信號(hào)、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型的量才能互相傳遞和作用。

VHDL數(shù)據(jù)類型分為四大類:

?標(biāo)量類型(SCALARTYPE);

?復(fù)合類型(COMPOSITETYPE);

?存取類型(ACCESSTYPE);

?文件類型(FILESTYPE)。VHDL語言要素44四、VHDL中的表達(dá)式

表達(dá)式:由操作符和操作數(shù)構(gòu)成,完成算術(shù)或邏輯運(yùn)算。

1、操作符

?VHDL操作符的分類:

?邏輯操作符(LogicalOperator)、

?關(guān)系操作符(RelationalOperator)、

?算術(shù)操作符(ArithmeticOperator)、

?重載操作符(OverloadingOperator)

VHDL語言要素452、操作數(shù)

操作數(shù):操作符進(jìn)行運(yùn)算時(shí)所需的數(shù)據(jù)。操作數(shù)的種類:標(biāo)志符;集合;屬性;表達(dá)式;函數(shù)調(diào)用;索引名;文字;限定表達(dá)式;記錄和域;片段名;類型轉(zhuǎn)換;

四、VHDL中的表達(dá)式VHDL語言要素463、重載操作符

VHDL是強(qiáng)類型語言,相同類型的操作數(shù)才能進(jìn)行操作。VHDL自身定義的算術(shù)和布爾函數(shù)僅對(duì)內(nèi)部數(shù)據(jù)類型(standard程序包中的數(shù)據(jù)類型)有效。即:

算術(shù)運(yùn)算符+,-,<,>,<=,>=僅對(duì)integer類型有效。邏輯運(yùn)算符AND,OR,NOT僅對(duì)bit類型有效。

如:variablea,b,c:integer;

variablex,y,z:bit;

c:=a+b;

z:=xandy;四、VHDL中的表達(dá)式VHDL語言要素47§3.2VHDL簡介硬件執(zhí)行:并發(fā)執(zhí)行(VHDL本質(zhì))仿真執(zhí)行:順序執(zhí)行、并發(fā)執(zhí)行分為兩大類:順序(Sequential)描述語句并發(fā)(Concurrent)描述語句

ARCHITECTUREProcessProcessENTITYSequentialProcessCombinationalProcessportsportscomponent4VHDL順序語句(Sequential)48§3.2VHDL簡介順序描述語句:執(zhí)行順序與書寫順序一致,與傳統(tǒng)軟件設(shè)計(jì)語言的特點(diǎn)相似。順序語句只能用在進(jìn)程與子程序中。可描述組合邏輯、時(shí)序邏輯。常用的順序描述語句:賦值語句;if語句;case語句;null語句;loop語句;next語句;exit語句;子程序;return語句;wait語句49§3.2VHDL簡介

5VHDL并發(fā)語句(Concurrent)

Architecture并發(fā)語句并發(fā)語句并發(fā)語句信號(hào)信號(hào)信號(hào)50§3.2VHDL簡介常用的并發(fā)描述語句有:

進(jìn)程(process)語句、

塊(block)語句、

順序描述語句的并行版本、

并行過程調(diào)用語句、

元件例化語句、

生成語句。51§3.2VHDL簡介6VHDL描述風(fēng)格三種描述風(fēng)格:行為描述數(shù)據(jù)流(寄存器傳輸)描述結(jié)構(gòu)描述52一行為描述

行為描述是以算法形式對(duì)系統(tǒng)模型、功能的描述,與硬件結(jié)構(gòu)無關(guān)。抽象程度最高。常用語句:進(jìn)程、過程、函數(shù)。行為描述主要用于:模型仿真、功能仿真。例:8位加法計(jì)數(shù)器VHDL的描述風(fēng)格5354二數(shù)據(jù)流描述:數(shù)據(jù)流描述又稱為寄存器傳輸級(jí)描述(RTL__RegisterTransferLevel)。RTL級(jí)描述是以寄存器為特征,在寄存器之間插入組合邏輯電路。即以描述數(shù)據(jù)流的流向?yàn)樘卣?。VHDL的描述風(fēng)格55三結(jié)構(gòu)化描述:

在多層次的設(shè)計(jì)中,高層次的設(shè)計(jì)模塊調(diào)用低層次的設(shè)計(jì)模塊,構(gòu)成模塊化的設(shè)計(jì)。VHDL的描述風(fēng)格56結(jié)構(gòu)描述是元件互連的描述,使用元件例化語句。一位全加器的原理圖VHDL的描述風(fēng)格57一位全加器的VHDL結(jié)構(gòu)化描述58一位全加器的VHDL結(jié)構(gòu)化描述59§3.3

VerilogHDL簡介一、基本程序結(jié)構(gòu)。二、詞法構(gòu)成。三、模塊的兩種描述方式。60VerilogHDL描述層次行為級(jí):有關(guān)行為和技術(shù)指標(biāo)模塊,容易理解

RTL級(jí):有關(guān)邏輯執(zhí)行步驟的模塊,較難理解門級(jí):有關(guān)邏輯部件互相連接的模塊,很難理解開關(guān)級(jí):有關(guān)物理形狀和布局參數(shù)的模塊,非常難理解61VerilogHDL描述層次描述層次與設(shè)計(jì)流程關(guān)系:行為級(jí)行為綜合RTL級(jí)門級(jí)開關(guān)級(jí)邏輯綜合布局布線綜合前仿真綜合后仿真62VerilogHDL標(biāo)識(shí)符:所謂標(biāo)識(shí)別符就是用戶為程序描述中的Verilog對(duì)象所起的名字;標(biāo)識(shí)符必須以英語字母(a-z,A-Z)起頭,或者用下橫線符(_)起頭。內(nèi)容可以包含數(shù)字、$符和下橫線符;標(biāo)識(shí)符最長可以達(dá)到1023個(gè)字符;

Verilog語言是大小寫敏感的,因此sel和SEL是兩個(gè)不同的標(biāo)識(shí)符。VerilogHDL標(biāo)識(shí)符63VerilogHDL標(biāo)識(shí)符舉例:合法的:非法的:shift_reg_a34net

busa_indexa*b_netbus263

n@263

//不能用數(shù)字開頭//不能含有非字母符號(hào)*//不能含有非字母符號(hào)@64VerilogHDL模塊結(jié)構(gòu)舉例1:65VerilogHDL模塊結(jié)構(gòu)Verilog描述:moduleAOI(A,B,C,D,F)inputA,B,C,D;outputF;assignF=~((A&B)|(C&D));endmodule66VerilogHDL模塊結(jié)構(gòu)端口定義input輸入端口output輸出端口inout端口module名字(端口名);endmodule信號(hào)類型定義wireregparameter邏輯功能定義assignalwaysfunctiontask…..67VerilogHDL模塊結(jié)構(gòu)moduledder4(cout,sum,ina,inb,cin);input[3:0]ina,inb;inputcin;output[3:0]sum;outputcout;assign{cout,sum}=ina+inb+cin;endmodule舉例2:68VerilogHDL模塊結(jié)構(gòu)舉例3:modulecount4(out,reset,clk);output[3:0]out;inputreset,clk;reg[3:0]out;always@(posedgeclk)beginif(!reset)out<=0;//同步復(fù)位

else out<=out+1; //計(jì)數(shù)endendmodule69VerilogHDL模塊結(jié)構(gòu)模塊實(shí)例化(moduleinstances):格式:

<模塊名><例化名>(<端口列表>);70VerilogHDL模塊結(jié)構(gòu)將模塊的實(shí)例通過端口連接起來構(gòu)成一個(gè)大的系統(tǒng)或元件;實(shí)例中端口的次序與模塊定義的次序相同;模塊實(shí)例化與C語言函數(shù)調(diào)用不同,每個(gè)實(shí)例都是模塊的一個(gè)完全拷貝,相互獨(dú)立、并行。71VerilogHDL模塊結(jié)構(gòu)Verilog語言特點(diǎn):Verilog程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都嵌在module和endmodule兩個(gè)關(guān)鍵字之間,每個(gè)模塊實(shí)現(xiàn)特定功能,模塊可以進(jìn)行層次嵌套;每個(gè)模塊首先要進(jìn)行端口定義,并說明端口類型,然后對(duì)模塊的功能進(jìn)行邏輯描述;72VerilogHDL模塊結(jié)構(gòu)Verilog語言特點(diǎn):Verilog程序書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句也可以分多行寫;除了endmodule等少數(shù)語句外,每個(gè)語句的最后必須有分號(hào);可以用/*……*/和//……對(duì)Verilog程序作注釋,好的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。73VerilogHDL數(shù)據(jù)類型定義數(shù)據(jù)類型(DataType)是用來表示數(shù)字電路中的物理連線、數(shù)據(jù)存儲(chǔ)和傳送單元等物理量的。74VerilogHDL數(shù)據(jù)類型

VerilogHDL共有19種數(shù)據(jù)類型:包括wire、integer、parameter、time等;

最基本的是兩類:連線型:wire

寄存器型:reg

最常用:wire、reg、parameter、integer75VerilogHDL數(shù)據(jù)類型數(shù)據(jù)類型分類:常量數(shù)據(jù)類型

integerx和zparameter

變量數(shù)據(jù)類型

netsregister76VerilogHDL數(shù)據(jù)類型integer:完整數(shù)字表達(dá)式:<位寬>’<進(jìn)制><數(shù)字>舉例:8’b10101000 8’b1010_10008’ha816877VerilogHDL數(shù)據(jù)類型x和z:x表示不確定值舉例:8’b1010xxxx8’haxz表示高阻值舉例:assigni2c_sda=sda_oe?i2c_sda_o:1'bz;78VerilogHDL數(shù)據(jù)類型parameter:格式:parameter

參數(shù)名1=表達(dá)式,…,參數(shù)名n=表達(dá)式;舉例:Parameter

msb=7,f=18;Parameteraverage_delay=(msb+f)/2;79VerilogHDL數(shù)據(jù)類型nets:由模塊或門驅(qū)動(dòng)的連線驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻傳遞到輸出的連線上nets80VerilogHDL數(shù)據(jù)類型種類:

類型功能

wire,tri

對(duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。﹕upply1,supply2

對(duì)應(yīng)于電源線或接地線wor,trior

對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接wand,triand

對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接trireg

對(duì)應(yīng)于有電容存在暫時(shí)存儲(chǔ)電平的連接tri1,tri0

對(duì)應(yīng)于需要上拉或下拉的連接81VerilogHDL數(shù)據(jù)類型wire:

wire是最常用的連線型變量;模塊中的輸入輸出信號(hào)類型缺省時(shí)自動(dòng)定義為wire型;可用作任何表達(dá)式的輸入,也可用作“assign”語句和實(shí)例元件的輸出,在綜合器中,可取四值:0、1、X、Z;格式:wire數(shù)據(jù)名1,…,數(shù)據(jù)名n;wire[n-1:0]數(shù)據(jù)名1,…,數(shù)據(jù)名n;82VerilogHDL數(shù)據(jù)類型register:對(duì)應(yīng)的是具有狀態(tài)保持作用的電路元件;需要被明確賦值,在重新賦值前一直保持原值;須放在過程語句(如initial,always)中,通過過程賦值語句賦值。格式reg數(shù)據(jù)名1,…,數(shù)據(jù)名n;reg[n-1:0]數(shù)據(jù)名1,…,數(shù)據(jù)名n;83VerilogHDL數(shù)據(jù)類型舉例:84VerilogHDL數(shù)據(jù)類型描述modulerw2(clk,d,out1,out2);inputclk,d;outputout1,out2;regout1;wireout2;assignout2=d&out1;always@(posedgeclk)begin out1<=d;endendmodule

85VerilogHDL數(shù)據(jù)類型如何選擇正確的數(shù)據(jù)類型?inoutinout??????86VerilogHDL數(shù)據(jù)類型數(shù)據(jù)類型選擇:輸入口(input)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接;輸出口(output)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接;輸入/輸出口(inout)只可以由網(wǎng)絡(luò)連接驅(qū)動(dòng),且本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接;

如果信號(hào)變量是在過程塊(initial塊或always塊)中被賦值的,必須把它聲明為寄存器類型變量。87VerilogHDL數(shù)據(jù)類型數(shù)據(jù)類型選擇:net/registerinoutinoutnetnetnetnet/registernet88VerilogHDL數(shù)據(jù)類型moduletest1(clk,rst_n,cen16);inputclk,rst_n;outputcen16;regcen16;reg[3:0]count;always@(posedgeclk)begin if(!rst_n) begincen16<=0;count<=0;end elseif(&count) begincount<=0;cen16<=1;end else begincount<=count+1;cen16<=0;endendendmodule

89VerilogHDL數(shù)據(jù)類型moduletest2(clk,rst_n,cen4);inputclk,rst_n;outputcen4;regcen4;reg[1:0]count;always@(posedgeclk)begin if(!rst_n) begincen4<=0;count<=0;end elseif(&count) begincount<=0;cen4<=1;end else begincount<=count+1;cen4<=0;endendendmodule

90VerilogHDL數(shù)據(jù)類型moduletest(clk,rst_n,cen64);inputclk,rst_n;outputcen64;wirecen16;test1test1(clk,rst_n,cen16);test2test2(cen16,rst_n,cen64);endmodule

91VerilogHDL數(shù)據(jù)類型選擇數(shù)據(jù)類型時(shí)常犯的三個(gè)錯(cuò)誤:在過程塊中對(duì)變量賦值時(shí),忘了把它定義為寄存器類型(reg),或已把它定義為連接類型了(wire);把實(shí)例的輸出連接出去時(shí),將它定義為寄存器類型了;把模塊的輸入信號(hào)定義為寄存器類型了。92VerilogHDL運(yùn)算符按功能分:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、縮減運(yùn)算符、條件運(yùn)算符、位運(yùn)算符、移位運(yùn)算符、拼接運(yùn)算符等。按操作數(shù)分:單目運(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符。93算術(shù)運(yùn)算符(Arithmeticoperator)

+加

-減*乘

/除

%求模邏輯運(yùn)算符(Logicaloperator)&&邏輯與

||邏輯或

!邏輯非VerilogHDL運(yùn)算符94VerilogHDL運(yùn)算符ABA&&BA||B!A!B11110010010101011000001195位運(yùn)算符(Bitwiseoperator)~按位取反&按位與

|按位或^按位異或^~,~^按位同或VerilogHDL運(yùn)算符96VerilogHDL運(yùn)算符設(shè)a=4’b0011,b=4’b1010,c=3’b011,d=4’b11x0則:~a//按位取反,結(jié)果是4’b1100b&c//按位與運(yùn)算,結(jié)果是4’b0010a^~d//按位同或運(yùn)算,結(jié)果是4’b00x0a&&b//邏輯與運(yùn)算,等價(jià)于1&&197關(guān)系運(yùn)算符(Relationaloperator)<小于<=小于或等于

>大于>=大于或等于注意:“<=”操作符還用于信號(hào)的一種賦值VerilogHDL運(yùn)算符98縮位運(yùn)算符(Reductionoperator):~&與非

&與

|或

~|或非

^異或

^~,~^同或VerilogHDL運(yùn)算符99縮位運(yùn)算符縮位運(yùn)算符與位運(yùn)算符的邏輯運(yùn)算法則一樣,但縮位運(yùn)算是對(duì)單個(gè)操作數(shù)進(jìn)行與、或、非遞推運(yùn)算,它放在操作數(shù)前面??s位運(yùn)算符將一個(gè)矢量縮減為一個(gè)標(biāo)量如:reg[3:0]a;

b=&a;

等效于:b=((a[0]&a[1])&a[2])&a[3];VerilogHDL運(yùn)算符100移位運(yùn)算符(Shiftoperator)VerilogHDL運(yùn)算符移位操作符只有兩個(gè):左移和右移用法:

A>>n或A<<n;

表示把操作數(shù)右移或左移n位,移出的位用0添補(bǔ)

>>右移<<左移101條件運(yùn)算符(Conditionaloperator)VerilogHDL運(yùn)算符這是一個(gè)三目運(yùn)算符,對(duì)3個(gè)操作數(shù)進(jìn)行運(yùn)算。用法:signal=condition?true_expression:flase_expression;

即:信號(hào)=條件?表達(dá)式1:表達(dá)式2;條件成立時(shí),信號(hào)取表達(dá)式1的值,反之取2。

?102條件運(yùn)算符舉例VerilogHDL運(yùn)算符01selin0in1out103位接運(yùn)算符VerilogHDL運(yùn)算符

{}用法:{信號(hào)1的某幾位,信號(hào)2的某幾位,…,信號(hào)n的某幾位}舉例:assign{cout,sum}=a+b+cin;104運(yùn)算符優(yōu)先級(jí)!~*/%+-<<>><<=>>===!====!==&~&^^~|^~&&||?:105VerilogHDL語句分類過程語句塊語句賦值語句條件語句循環(huán)語句編譯向?qū)?06類別語句可綜合性過程語句always√initial塊語句串行塊begin-end√并行塊fork-join

賦值語句持續(xù)賦值assign√過程賦值=、<=√條件語句if-else√case√

循環(huán)語句for√repeat

while

forever

編譯向?qū)define√`include√`ifdef,`else,`endif√107VerilogHDL語句過程語句:alwaysalways@(<敏感信號(hào)>)begin//過程賦值//if-else,case選擇語句end108VerilogHDL語句敏感信號(hào)類型:@(a)@(aorb)@(posedgeclock)@(negedgeclock)@(posedgeclkornegedgereset)109VerilogHDL語句舉例:DFFmoduleDFF(d,clk,reset,q,qb);outputq,qb;inputclk,reset,d;regq,qb;always@(posedgeclk)beginif(!reset)beginq<=0;qb<=1;endelsebeginq<=d;qb<=~d;endendendmodule110VerilogHDL語句特點(diǎn):只有兩種狀態(tài):執(zhí)行狀態(tài)和等待狀態(tài);一般由敏感信號(hào)的變化來啟動(dòng),敏感信號(hào)可以是電平觸發(fā),也可是邊沿觸發(fā);各個(gè)always間通過信號(hào)線進(jìn)行通信;一個(gè)always中只允許描述對(duì)應(yīng)于一個(gè)時(shí)鐘信號(hào)的同步時(shí)序邏輯;always之間是并發(fā)執(zhí)行的;111VerilogHDL語句塊語句:beginend總是在always內(nèi)部按順序執(zhí)行regqa,qb,qc;always@(posedgeclk)beginqa<=d;qb<=qa;qc<=qb;end舉例:112VerilogHDL語句賦值語句:持續(xù)賦值語句:assignc=a&b;過程賦值語句:非阻塞賦值“<=”

阻塞賦值“=”

分為兩步驟:右式計(jì)算、左式更新113VerilogHDL語句非阻塞賦值:當(dāng)前語句的執(zhí)行不會(huì)阻塞下一語句的執(zhí)行語句之間并發(fā)執(zhí)行左式更新在塊結(jié)束后才進(jìn)行114VerilogHDL語句舉例

:modulenonblocking(clk,reset,a,b);inputclk,reset;input[3:0]a;output[3:0]b;reg[3:0]b;reg[3:0]y;always@(posedgeclkornegedgereset)beginif(!reset) begin y<=0;b<=0; endelse begin

y<=a;b<=y;

endendendmodule115VerilogHDL語句結(jié)果

:116VerilogHDL語句阻塞賦值:當(dāng)前語句的執(zhí)行會(huì)阻塞下一語句的執(zhí)行;語句之間順序執(zhí)行;右式計(jì)算和左式更新同時(shí)進(jìn)行;117VerilogHDL語句舉例

:moduleblocking(clk,reset,a,b);inputclk,reset;input[3:0]a;output[3:0]b;reg[3:0]b;reg[3:0]y;always@(posedgeclkornegedgereset)beginif(!reset) begin y=0;b=0; endelse begin

y=a;b=y;

endendendmodule118VerilogHDL語句結(jié)果

:119VerilogHDL語句阻塞與非阻塞的使用原則:有clock的always進(jìn)程要使用non-blockingalways@(posedgeclkornegedgereset_n)beginif(!reset_n)counter<=8'b00;elsecounter<=counter+1;end120VerilogHDL語句阻塞與非阻塞的使用原則:always@(seloraorb)begincase(sel)2'b00:c=a;2'b01:c=b;endcaseend無clock的always進(jìn)程使用blocking121VerilogHDL語句阻塞與非阻塞的使用原則:continuousassignment使用blocking一個(gè)always進(jìn)程中不要同時(shí)使用blocking與non-blockingassigny=a&b;122VerilogHDL語句條件語句:ifelsecaseendcase123VerilogHDL語句ifelse:

if(表達(dá)式)語句1;

if(表達(dá)式)語句1;else語句2;

if(表達(dá)式1)語句1;

elseif(表達(dá)式2)語句2;

elseif(表達(dá)式3)語句3;

……elseif(表達(dá)式n)語句n;

else語句n+1;124VerilogHDL語句特點(diǎn):不完整的ifelse容易導(dǎo)致產(chǎn)生latch;總是在always內(nèi)部按順序執(zhí)行;Latch與DFF比較:latch由電平觸發(fā),DFF由時(shí)鐘沿觸發(fā);latch容易產(chǎn)生毛刺(glitch),DFF則不易產(chǎn)生毛刺;latch消耗的門資源比DFF要少,但耗費(fèi)的LE資源要多;latch將靜態(tài)時(shí)序分析變得極為復(fù)雜;125VerilogHDL語句caseendcase:case(敏感表達(dá)式)

值1:語句1;值2:語句2;

……

值n:語句n;

default:語句n+1;endcase126VerilogHDL語句特點(diǎn):不完整的caseendcase容易導(dǎo)致產(chǎn)生latch;總是在always內(nèi)部根據(jù)敏感量執(zhí)行;兩者之間的比較:ifelse帶有優(yōu)先級(jí);caseendcase延時(shí)??;127VerilogHDL語句舉例:四位選擇器always@(sel)beginif(sel==2'b00)out=in0;elseif(sel==2'b01)out=in1;elseif(sel==2'b10)out=in2;elseout=in3;endalways@(sel)begincase(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;default:out=in3;endcaseend128VerilogHDL語句舉例:七段數(shù)碼管顯示譯碼器129moduledecode4_7(decodeout,indec);output[6:0]decodeout;input[3:0]indec;reg[6:0]decodeout;always@(indec)begin

case(indec) 4'd0:decodeout=7'b1111110;4'd1:decodeout=7'b0110000;4'd2:decodeout=7'b1101101;4'd3:decodeout=7'b1111001;4'd4:decodeout=7'b0110011;4'd5:decodeout=7'b1011011;4'd6:decodeout=7'b1011111;4'd7:decodeout=7'b1110000;4'd8:decodeout=7'b1111111;4'd9:decodeout=7'b1111011;default:decodeout=7'b1111111;

endcaseendendmodule130VerilogHDL的兩種描述方式一、行為描述方式;通過行為語句來描述電路要實(shí)現(xiàn)的功能,表示輸入與輸出間轉(zhuǎn)換的行為,不涉及具體結(jié)構(gòu)行為建模是一種“高級(jí)”的描述方式。二、結(jié)構(gòu)描述方式;是將硬件電路描述成一個(gè)分級(jí)子模塊相互連的結(jié)構(gòu)。通過對(duì)組成電路的各個(gè)子模塊間相互連接關(guān)系的描述,來說明電路的組成。各個(gè)模塊還可以對(duì)其他模塊進(jìn)行調(diào)用,也就是模塊的實(shí)例化。131VerilogHDL的兩種描述方式一、行為描述方式;//這是一個(gè)2選1數(shù)據(jù)選擇器,名為mux_2_to_1modulemux_2_to_1(a,b,out,outbar,sel);inputa,b,sel; //定義該模塊的輸入端口為a,bseloutputout,outbar; //定義該模塊的輸出端口為outoutbarassignout=sel?a:b;//如果sel=1,將a賦值給out //如果sel=0,將b賦值給outassignoutbar=~out;//將out取反后賦值給outbarendmodule //模塊描述結(jié)束01selin0in1out132VerilogHDL的兩種描述方式結(jié)構(gòu)描述方式;在結(jié)構(gòu)描述中,門和MOS開關(guān)是電路最底層的結(jié)構(gòu),在VerilogHDL中有26個(gè)內(nèi)置的基本單元,又稱基元?;诸惢噍斎腴Tand,nand,or,nor,xor,xnor多輸出門buf,not三態(tài)門bufif0,bufif1,notif0,notif1上拉、下拉電阻pullup,pulldownMOS開關(guān)cmos,nmos,pmos,rcmos,rnmos,rpmos雙向開關(guān)tran,tranif0,tranif1,rtran,rtranif0,rtranif1133VerilogHDL的兩種描述方式結(jié)構(gòu)描述方式;//這是一個(gè)2選1數(shù)據(jù)選擇器,名為muxgatemodulemuxgate(a,b,out,outbar,sel);inputa,b,sel; //定義該模塊的輸入端口為a,bseloutputout,outbar; //定義該模塊的輸出端口為outoutbarwireout1,out2,selb; //定位內(nèi)部的三個(gè)連接點(diǎn)out1,out2,selbanda1(out1,a,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論