版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章VHDL程序设计,在硬件电子电路设计领域中,设计自动化工具已被广大硬件电子工程师所接收,它必将取代人工设计方法,成为主要设计手段。目前,作为硬件记述语言之一的VHDL已经成为各家EDA工具和集成电路厂家所普遍认同和共同推广的标准化硬件记述语言。掌握VHDL语言,学会用VHDL语言设计硬件电子电路,是系统设计必须掌握的一项技能。 本书在第5章重点介绍了CPLD器件结构原理,并介绍了具体系列的CPLD系列芯片,如何基于CPLD器件做应用设计,VHDL的掌握是设计关键。本章简要介绍VHDL的基本语法,应用系统开发的手段及开发流程,具体开发工具软件的使用方法等。,6.1 VHDL简介,目前最主要
2、的硬件记述语言是VHDL和Verilog HDL。VHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件记述语言,语法较自由。 VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。国外电子专业很多会在本科阶段教授VHDL,在研究生阶段教授verilog。从国内来看,VHDL的参考书很多,便于查找资料,而Verilog HDL的参考书相对较少,这给学习Verilog HDL带来一些困难。 VHDL的英文全名是VHSIC(Very High Speed Integrated Ci
3、rcuitHardware Description Language),于1983年由美国国防部(DOD)发起创建,由IEEE(The Institute of Electrical and Electronics Engineers)进一步发展,并在1987年作为“IEEE标准1076”发布。从此,VHDL成为硬件记述语言的业界标准之一。此后VHDL在电子设计领域得到了广泛应用,并逐步取代了原有的非标准硬件记述语言。,VHDL作为一个规范语言和建模语言,后期出现了一些支持该语言的行为仿真器。由于创建VHDL的最初目标是用于标准文档的建立和电路功能模拟,其目的是在高层次上记述系统和元件的行为。
4、VHDL不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具;可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。这种方法显然对于电路设计是一个极大的推进。很快,电子设计领域出现了第一个软件设计工具,即VHDL逻辑综合器,它可以标准地将VHDL的部分语句记述转化为具体电路实现的网表文件。 VHDL语言具有很强的电路记述和建模能力,能从多个层次对数字系统进行建模和记述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为记述和系统记述的能力,并在语言易读性和层次化结构化设计方
5、面,表现了强大的生命力和应用潜力。 在CPLD的开发应用中,硬件电路构成的数据必须写入CPLD芯片内部。对硬件电路构成的设计就要使用相应的工具。VHDL就能很好的实现硬件设计。本节将详细介绍VHDL的概念及使用。,应用VHDL进行工程设计的优点是多方面的。 1)与其他的硬件记述语言相比,VHDL具有更强的行为记述能力,从而决定了他成为系统设计领域最佳的硬件记述语言。强大的行为记述能力是避开具体的器件结构,从逻辑行为上记述和设计大规模电子系统的重要保证。 2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 3)VHDL语句的行为
6、记述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。 4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL记述设计转变成门级网表。 5)VHDL对设计的记述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。,6.2 VHDL设计基础,一般情况下,一个完整的VHDL语言程序通常被称作一个设计实体,它是VHDL语言设计中的基本单元。在硬件电路设计中,设计实体既可以记述像微处理器那样的复杂电路,也可以
7、记述像门电路那样简单的电路,从而体现了VHDL语言记述的灵活性。 在一个设计实体中,它通常包括库(library),程序包(pachage),实体说明(entity declaration),结构体(architecture body)和配置(configuration)5个部分,其中实体说明和结构体是设计实体所必需的,而库、程序包和配置不是必需的,他们一般是根据设计需要来添加的。这里只讲述实体和结构体。,6.2.1 RTL记述法,对即将开发的系统 (System) 来讲,VHDL能够对系统进行非常抽象的记述(即描述),一般对实体的逻辑电路设计时通常采用寄存器传输记述方法 (Register
8、Transfer Level)。 在使用VHDL对实体记述时,设计电路由寄存器(Register)和逻辑电路连接接续而成。简单用图表示如图6.1所示,图中所有寄存器由相同时钟驱动动作称为同步电路。 图6.1 RTL记述法顺序框图,6.2.2 VHDL记述的基本构成,由上述RTL记述法,使用VHDL可决定书写的构成、结构。基本构成有两大部分即实体(entity)和结构体(architecture)。如再加入一些相应的各种定义,宣言部分即可构成完整的全体构造图,如图6.2所示。以下对各部分进行详细说明。 实体部是定义设计电路的输入输出条件 (Port定义),位的长短等参数。结构体部是设计电路的逻辑
9、中心。二者关系及实例如图6.3所示。 1宣言,定义 什么叫程序包(Pakage)?程序包就是运算符,标准函数的集合定义,符合IEEE的标准。VHDL语言的程序包括两个部分:程序包说明部分和程序包包体部分。其中程序包说明主要是对数据类型、子程序、常量、元件、属性和属性指定进行说明,也就是这里所讲的宣言及定义,主要实现程序包的指定。程序包包体部分由程序包说明指定的过程和函数的程序体组成,即用来规定程序包的实际功能。宣言及定义是记述时必须使用的。另外还有别的算术运算符指定。,图6.2 全体构成图,图6.3 实体和结构体,一般经常使用的标准格式如下所示 必须的Library library IEEE
10、; use IEEE.std_logic_1164.all ; - 基本函数 算术运算需要的Library use IEEE.std_logic_unsigned.all ; - 无符号运算函数 use IEEE.std_logic_arith.all ; - 算术运算函数 在以上标准格式中,.all 表示该Library内部所有函数使用可能。 2实体说明 实体即为该CPLD与外部的输入输出端口的定义,也即为CPLD的端口引脚的信号的定义。实体说明主要记述的是一个设计的外貌。定义CPLD与外部的端口通常定义为Port,其标准格式如下所示。在最后行不需 ; ,且最后由 ) ; 结束。 entit
11、y is port ( , : ; , : ; , : ) ; end ;,在VHDL的实体书写中,型的指定非常重要。在运算中如果型指定不一致会出现错误。在VHDL中,虽然型的指定类型非常多,但经常使用的有两种如下: std_logic : 标准逻辑 std_logic_vector (n downto 0) : n+1位宽 另外信号的输入输出方向有以下三种选择 in : 输入 out : 输出 inout : 双向 例1: port ( a,b,c : in std_logic ; a,b 和c为标准逻辑输入口 y : out std_logic ); y为标准逻辑输出口 例2: 配列 po
12、rt ( a,b : in std_logic_vector (2 downto 0) ; y : out std_logic_vector (2 downto 0) ;,另外在实体中还有属性定义 (attribute),以下详细介绍。在Xilinx Project Navigator中能使用的属性有很多种,如下 attribute PIN_ASSIGN of object : object_type is pin_name ; attribute LOC of object_list : object_type is function_block_name ; attribute KEEP
13、of object_list : object_type is TRUE ; attribute DONT_OPTIMIZE of object_list : object_type is TRUE ; attribute FAST/SLOW of object_list : object_type is TRUE ; attribute BUFG of object_list : object_type is CLK / OE / SR ; attribute INIT of object_list : object_type is S / R ; attribute PWR_MODE of
14、 object_list : object_type is LOW / STD ; attribute REG of object_list : object_type is CE / TFF ; attribute TNM of object_list : object_type is string ; 在属性定义前还必须定义 attribute attribute_name : string ; 关于对Pin端口的配置和其属性定义,可由下例详细说明。,例3: A,B,Y 端口分配至 1,2,3 Pin端口 library ieee ; use ieee。std_logic_1164.all
15、 ; entity Ex1 is port (A : in std_logic ; B : in std_logic ; Y : out std_logic) ; attribute pin_assign : string ; attribute pin_assign of A : signal is 1 ; attribute pin_assign of B : signal is 2 ; attribute pin_assign of Y : signal is 3 ; end architecture SAMPLE of Ex1 is begin Y = A nand B ; end S
16、AMPLE ;,T T T T T T V T I I I I I I C I E E E y b a E E E C E - /6 5 4 3 2 1 44 43 42 41 40 TIE | 7 39 | TIE TIE | 8 38 | TIE TIE | 9 37 | TIE GND | 10 36 | TIE TIE | 11 XC9536-5-PC44 35 | TIE TIE | 12 34 | TIE TIE | 13 33 | TIE TIE | 14 32 | VCC TDI | 15 31 | GND TMS | 16 30 | TDO TCK | 17 29 | TIE
17、 18 19 20 21 22 23 24 25 26 27 28 / - T T T V T G T T T T T I I I C I N I I I I I E E E C E D E E E E E,结构体 设计实体中的结构体主要用来记述设计的行为和结构,即用来记述设计实体的具体功能。结构体(Architecture)是CPLD设计的中心工作,它是CPLD内部逻辑实际动作的设计。一般来说,结构体记述了实体硬件的结构、硬件的类型和功能、元件的互连关系、信号的传输和变幻以及动态行为等方面。在architecture内有很多种记述,也有很多规定。其基本的格式如下: architecture
18、of is begin end ; 其中定义文对信号signal名、常数、函数component等进行定义。例4说明它的信号signal定义文。 例4: library ieee use ieee.std_logic_1164.all ; entity Ex2 is port (A : in std_logic ; B : in std_logic ; C : in std_logic ; D : in std_logic ; Y : out std_logic) ; end ;,architecture SAMPLE of Ex2 is signal S0,S1 : std_logic ;
19、begin S0 = A nand B ; S1 = S0 nand C ; Y = S1 and D ; end SAMPLE 在例4中,S0和S1仅为CPLD内部使用的信号,另外可看到信号的定义与Port的定义一样需设置类型。 6.2.3 VHDL程序的记述方法 VHDL程序的记述方法有两种,即同时处理 (并列处理) 集合和顺序处理(过程处理) 集合。根据一般开发经验,同时处理文比较适合于简单的组合逻辑电路的设计,而顺序处理文适合于复杂的组合逻辑电路设计。以下小节将分别介绍这两者的特点和使用。同时处理 (并列处理)文的处理与时间无关同时处理。顺序处理则根据程序的次顺进行处理。无论是书写同时
20、处理还是顺序处理都必须付合书写文法规定。下面先介绍这些规定。,1. 说明性文字 在定义文中如需书写说明文字时,如下列所示书写2个以上记号即可在记号后至行尾书写说明文。用此方法,可从行开头,行中间任何地方自由地加入说明文。 例 Select Clock Decimal Counter Block 等 2. 标识名 在书写VHDL程序时,均能对信号等定义名称。标识及定义名称的限制如下 (1)大小写无区别 (2)最初文字必为英文字 (3)能使用的文字限英文字母,数字等 (4)VHDL专用语使用禁止 3.信号的类型和文字常数的用法 在VHDL中使用的信号种类除1、0外还有不定(X)、高阻(Z)等近10
21、种类型。在本书中仅使用了1、0、不定(X)和高阻(Z) 等4种。在用文字列来表示信号的种类时,请参照以下说明。,在采用 X 表示信号不定时,文字常数就有大小写区别。在表示不定信号时请一定使用大写文字 X。同样,Z也是使用大写文字。如下所示 例 1位信号 0 1 X Z 多位信号 0000101 XXXXXXXXZZZZ 6.2.4 信号代入和运算符 VHDL文中进行信号代入时使用 = 记号。如下例所示信号的代入和代入运算结果的处理文。 例 clkout = inclk ; A = B + C ; 在实体中定义的输出(out)端口(port)输出信号时,该信号在过程中并非直接输出,而是使用内部定
22、义的信号进行输出。如下例所示,这样做使得的开发软件工具能自动在外部信号端口附加缓冲器(Buffer),目的是可获的稳定的输出信号。 Port 名 = signal名 ; 例 signal_out = int_sig ; 设计书写VHDL文可使用的运算符有如表6.1所示4种,即逻辑运算符、关系运算符、算术运算符和连接子。请注意它们的使用特点和限制。,表6.1VHDL运算符集合,1.算术运算符 在std_logic和std_logic_vector使用时由于没有定义标准,所以算术运算符不能使用。在此种类型下如要使用算术运算符,需要追加软件运算库如下 use IEEE.std_logic_unsig
23、ned.all ; 在追加了以上库(Library)后,矢量(Vector)变量和Scalar (通常的数值)都能进行各种运算。 2乘、除运算 实际设计中由于均为逻辑电路,在用除和Mod (剩余) 算术运算时分母均是2幂,所以除实际上是位移(Bit Shift)动作。于是通常不使用除算术运算符。还有请注意在使用 * (乘运算),在位较长时单纯的计算会产生很长的逻辑,这在实际实装时会出现困难,所以在特殊情况外也不使用。 6.2.5 矢量型(Vector) 在使用std_logic_vector Library时,由于是多位幅被称为矢量型。在下例中通过 (n downto m) 来指定位幅。 例
24、A,B : in std_logic_vector (7 downto 0) ; ( 定义8位幅外部数据总线 A和B ) signal DA,DB : std_logic_vector (15 downto 0) ; ( 定义 16位幅的内部数据 DA和DB ) 在实际运算中由于会对每位进行运算,所以在对不同位幅的数据运算实行时会产生错误(Error)。但是可以有以下指定位幅运算。例如上例中进行加法运算时只使用长位幅数据的一部分与短数据匹配也可进行运算。如下例所示:,例 B = DB ( 7 downto 0 ) + A 另外也可使用连接算符增加位符使短位符数据匹配长位幅数据,这样处理后也可进
25、行运算。例上例中A和DB的加算中,由于A的位幅不足,可用定数的8位幅与A相连接。如下示: 例 DA = DB + ( 00000000 when 值 : 值 : 值 = 顺序处理文 ; when 值 to 值 = 顺序处理文 ; when others = 式 ; end case ; 如上case所示,虽然全部条件式被同时执行,但同一个值不能多处使用。下面介绍具体IF和CASE的使用例如下。 例5: 3/8 输出解码器(Demultiplexer如74LS138等),T T T T T T V T I I I I I I C I E E E y b a E E E C E - /6 5 4
26、3 2 1 44 43 42 41 40 TIE | 7 39 | TIE TIE | 8 38 | TIE TIE | 9 37 | TIE GND | 10 36 | TIE TIE | 11 XC9536-5-PC44 35 | TIE TIE | 12 34 | TIE TIE | 13 33 | TIE TIE | 14 32 | VCC TDI | 15 31 | GND TMS | 16 30 | TDO TCK | 17 29 | TIE 18 19 20 21 22 23 24 25 26 27 28 / - T T T V T G T T T T T I I I C I N
27、 I I I I I E E E C E D E E E E E,图6.4 XC9536 引脚配置,图6.5 内部逻辑图,020 begin 021 IN_DATA Y Y Y Y Y Y Y Y Y = XXXXXXXX; - Illegal condition 034 end case; 035 else 036 Y = 11111111; - Gate OFF condition 037 end if; 038 end process; 039 end SAMPLE;,例5完成了3位二进制位输入到8输出的解码器设计,其功能如74LS138的集成芯片。上例仅是一个简单练习,实际使用时 74
28、LS138的使用较经济。图6.4为引脚配置图,图6.5为内部逻辑图,下面对上述VHDL程序作些具体说明如下。,6.2.7 同步电路设计,在实际CPLD使用中,基本上采用同步逻辑电路设计。为避免逻辑电路动作的不协调,同步电路即是与时钟(Clock)同步动作以形成稳定的逻辑电路。根据此点,在使用VHDL记述时比须要有意识地注意进行同步电路设计。具体在设计中首先在过程记述内需记述时钟上升沿或下降沿动作记述。它的记述格式如下。 同步电路设计 - Sycronous Circuit process ( clk ) begin if ( clk event and clk =1 ) then - - 顺序
29、处理文的记述 - end if ; end process ; 用例6来具体说明同步电路的设计。例6是4位二进制计数器的VHDL设计记述,它采用CLK时钟上升沿触发同步动作。此中复位(RESET)信号为非同步强制复位信号,使输出为全0000。这样做虽能使RESET信号也与CLK时钟同步,但在无CLK时钟信号时需要用RESET信号复位时采用非同步方式更好。在对计数器记述时需使用算术运算符所以在最初追加有运算Library。由于计数器的输出需要通过CPLD 端口输出,在最后有内部输出COUNT_IN记述由COUNT=COUNT_IN来输出。另外在外部输出端口还插入有缓冲器电路。,例6:4位二进制计
30、数器 library ieee use ieee.std_logic_1164.all ; use ieee.std_logic_unsigned.all ; entity counter is port ( CLK,RESET : in std_logic ; COUNT : out std_logic_vector ( 3 downto 0 ) ) ; end entity ; architecture RTL of counter is signal COUNT_IN : std_logic_vector ( 3 downto 0 ) ; begin process ( CLK,RESE
31、T ) begin if ( RESET = 1) then COUNT_IN = 0000 ; elsif ( CLKevent and CLK =1 ) then COUNT_IN = COUNT_IN + 1 ; end if end process COUNT = COUNT_IN ; end RTL ;,例7是移位寄存器的设计,它的设计方法请见如下VHDL记述,该设计为16位的内部移位寄存器,对外不输出任何信号。 移位寄存器的VHDL记述中,Clock时钟sclk的上升沿时16位寄存器的低15位均前移一位。最低位是0或1由外部输入数据决定。为完成移位寄存器的设计,VHDL记述中采用了
32、矢量Slice记述和位的连接子记述。另外,复位信号为1时对移位寄存器的全16位清0。 例7:16位内部移位寄存器VHDL记述例 entity shftreg is port ( sdata : in std_logic ; sclk : in std_logic ; reset : in std_logic ) ; end entity ; architecture RTL of shftreg is signal sn : std_logic_vector ( 15 downto 0 ) begin - shift register process ( sclk,reset ) begin
33、if ( reset = 1 ) then sn = 0000000000000000 ; elsif ( sclkevent and sclk = 1) then sn = sn(14 downto 0) ,6.2.8 Component记述,如经常使用的C+,Fortran等程序设计时常用子程序来设计多处需要完成的相同的功能。在VHDL记述中同样可使用如子程序的部分,对此可独立设计记述。与很多设计语言一样,这样设计同样可以节省设计时间,阅读容易,且可靠性好。 在结构体的层次化设计中,采用结构记述方式就是通过条用库中的元件或者已设计好的模块来完成设计实体功能的记述。在机构体中,功能记述像网表
34、一样来标识元件(或者模块)和元件(或者模块)之间的互连。当设计人员引用库中不存在的元件时,必须首先进行元件的创建,其次将其放在工作库中,接下来便可以通过条用工作库来引用元件。 在VHDL语言中,引用元件或者模块的说明采用Component语句,它的作用就是在结构体的说明部分说明引用的元件或者模块。 Component记述接构也称构造化记述,下面介绍其定义和记述规定等。 这里需要注意的是,如果所调用的模块在元件库中不存在,设计人员必须首先进行元件的创建,然后将其放入工作库中,最后通过工作库来引进该元件。,1.Component定义 为使用Component记述,首先需要对定义Component。
35、在前介绍architecture定义时,虽说明了需仅定义信号名,在需使用Component时还需追加定义Component。Component的构造如实体的构造相同如下。 Component记述构造 component port ( , : ; , : ; , : ) ; end component ; 在此如做以上追加定义后,在后续的VHDL程序记述中中即可用如Conponent Instance的形式使用。,Component Instance记述 实际使用时用以下的记述文 Label名 : Component名 port map ( 信号名, ) ; 在此Label名是使用Compone
36、nt时附加名,在结构体定义中必须唯一。在port map中定义的信号名及顺序均应与Component记述中定义的信号和顺序要相对应。也就是在相同的Component中可输入完全不同的输入输出信号就会产生完全不同的设计,其电路结构都可不一样。对Component的使用法如下例所示。在下例中,half_adder为定义的Component名,使用该Component设计生成full_adder电路。记述中,U0和U1为两处使用该Component的Label名。half_adder的处理文由别的VHDL记述文件构成。 Component例 library IEEE use IEEE.STD_LOG
37、IC_1164.ALL ; entity fulladder is port ( A : in std_logic ; B : in std_logic ; CRY : in std_logic ; S : out std_logic ; CO : out std_logic ; end fulladder ;,architecture RTL of fulladder is component half_adder port ( A,B : in std_logic ; S,CO : out std_logic ) ; end component ; signal CO0,S0,CO1 :
38、in std_logic ; begin U0 : half_adder port map (A,B,S0,CO0) ; U1 : half_adder port map (S0,CRY,S,CO1) ; CO = CO0 or CO1 ; end RTL 6.2.9 数据的类型及类型变换 1数据的种类 在VHDL记述中,信号定义 (signal)、变量定义 (variable)、常数定义 (constance)时均需要指定数据类型。在使用时如采用不同的数据类型代入时会产生Errors。VHDL使用中有固定的标准数据类型,也有可以由设计者自己定义制作的数据类型。为使用方便,VHDL也提供数据类
39、型变换用的函数。,2VHDL标准数据类型 在表6.2中列有VHDL可使用的标准数据类型。 表6.2 标准数据类型表,3.设计者自定义数据类型 VHDL允许设计者自定义需要使用的数据类型。使用时通常需用type,subtype等定义。下面逐一介绍它们的使用。 1)型定义 type使用type文来完成新的型定义。它的记述有以下几种。 type 数据型名 is ( 要素,要素, ) 例 一星期为单位的型定义 WEEK type WEEK is ( SUN,MON,TUE,WED,THU,FRI,SAT ) 例 std_logic的定义 该std_logic的定义是最常用的型。关于它的IEEE 的Pa
40、ckage中就有如下型的定义 type std_logic is ( U,X,0,1,Z,W,L,H,-) ; 用Integer类型range对值的范围进行指定。如不指定,就自动使用32位长,使的作成的逻辑电路规模庞大。 type 数据型名 is integer range i to j ; 例 BCD型 digit 定义 type digit is integer range 0 to 9 ;,3)配列型 配列是新的型定义的一种。它可把同样型的数据归纳在一起定义作为一种新的型。它的记述格式如下: type 数据型名 is array 范围 of 原型名 ; 在上记述格式中,范围指定项有多种型
41、可使用。如不指定型就自动作为integer指定。 例 type WORD is array (1 to 8) of std_logic ; type WORD2 is array (integer 1 to 8) of std_logic ; 例 std_logic_vector的型定义。该定义在IEEE的std_logic_1164中有以下记述定义 type std_logic_vector is array (Natural range ) of std_logic ; 对多个范围进行组合来指定,它就变成了多次元配列。 例 2次元配列例 type memarray is array (0
42、to 5,7 downto 0) of std_logic ;,例 使用上记所用型的ROM作成 constant ROMDATA : memarray : = (0,0,0,0,0,0,0,0),(0,1,1,1,0,0,0,1),(0,0,0,0,0,1,0,1),(1,1,0,0,0,1,1,0),(1,1,1,1,1,1,1,1), 在型定义时,由于原型的配列就形成新的配列。此新的配列就称为配列的多重定义。如下例所示,在std_logic_vector的型中对WAVE型进行了定义。对WAVE的元型又定义了新的配列ROM。例中采用了该新ROM型来定义了定数Sine,然后它的初值用 := 以
43、后定义。形成了6 位长,64个并列的配列。该配列6位的分解能力指定了正弦的1周期的数据量。,例 多重定义例 Sin正弦 4型变换 严格来讲,VHDL记述要求使用的型一致。不同型的变量运算,代入均被视为非法。所以在代入、运算时对不同的型变量需采用型变换。在VHDL中规范了型的变换文法及型变换函数供设计人员使用。具体使用的型变换函数如表6.3所示。,表6.3 型变换函数,6.3 设计开发手段和开发流程,基于VHDL的CPLD应用开发是目前广泛采用的硬件开发手段,它采用软件的方法来记述电子系统的逻辑功能、电路结构和连接关系。VHDL作为电子设计主流硬件的记述语言,具有很强的电路记述能力,能从多个层次
44、对数字系统进行建模和记述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。VHDL支持各种模式的设计方法,这样设计者可以专心致志于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。 传统的电子设计技术通常是自下而上的设计方法,即首先确定系统的最底层的电路模块或元件的结构和功能,然后根据主系统的功能要求,将其组合成更大的功能模块,使它们的结构和功能满足高层次系统的要求。依此流程,逐步向上递推,直到完成整个目标系统的设计。由于设计只能采用系统仿真仪、逻辑分析仪和示波仪进行仿真和调试。因此,只有在系统设计完成以后才能进行仿真和调试。系统存在的问题只有在设计后期才能发现。一
45、旦考虑不周,往往需要全部重新设计,使设计周期大大增加。,对于专用电路的设计,则是根据系统的功能要求,首先从绘制硅片版图开始,逐级向上完成版图级、门级、RTL级、行为级、功能级,直至系统级的设计。在这个过程中,任何一级发生问题,通常都不得不返工重来。 在硬件电路设计应用中,自顶向下的设计方法就是在整个设计流程中各设计环节逐步求精的过程。一个项目的设计过程包括从自然语言说明到VHDL的系统行为记述、系统的分解、RTL模型的建立、门级模型产生,到最终的可以物理布线实现的底层电路,就是从高抽象级别到低抽象级别的整个设计周期。后端设计还必须包括涉及硬件的物理结构实现方法和测试(仍然利用计算机完成)。 应
46、用VHDL进行自顶向下的设计,就是使用VHDL模型在所有综合级别上对硬件设计进行说明、建模和仿真测试。主系统及子系统最初的功能要求在VHDL里体现为可以被VHDL仿真程序验证的可执行程序。由于综合工具可以将高级别的模型转化为门级模型,所以整个设计过程基本是由计算机自动完成的。人为介入的方式主要是根据仿真的结果和优化的指标来控制逻辑综合的方式和指向。因此,在设计周期中,要根据仿真的结果进行优化和升级,以及对模型及时的修改,以改进系统或子系统的功能,更正设计错误,提高目标系统的工作速度,减小面积耗用,降低功耗和成本等。或者启用新技术器件或新的IP核。在这些过程中,由于设计的下一步是基于当前的设计,
47、即使发现问题或作新的修改而需从头开始设计,也不妨碍整体的设计效率。 在CPLD设计应用中,采用自上而下的设计方法,即从系统总体出发,自上而下地逐步将设计内容细化,最后完成系统设计。,根据系统对硬件的要求,详细编制技术规格书,并根据技术规格书,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图。它包括如下设计阶段。 1提出设计说明书,即用自然语言表达系统项目的功能特点和技术参数等。 2建立VHDL行为模型,这一步是将设计说明书转化为VHDL行为模型。在这一项目的表达中,可以使用满足IEEE标准的VHDL的所有语句而不必考虑可综合性。这一建模行为的目标是通过VHDL仿真器对整个系统进行
48、系统行为仿真和性能评估。 3VHDL行为仿真。这一阶段可以利用VHDL仿真器(如ModelSim)对顶层系统的行为模型进行仿真测试,检查模拟结果,继而进行修改和完善。这一过程与最终实现的硬件没有任何关系,也不考虑硬件实现中的技术细节,测试结果主要是对系统纯功能行为的考察,其中许多VHDL的语句表达主要为了方便了解系统在各种条件下的功能特性,而不可能用真实的硬件来实现。 4VHDL-RTL级建模。如上所述,VHDL只有部分语句集合可用于硬件功能行为的建模,因此在这一阶段,必须将VHDL的行为模型表达为VHDL行为代码(或称VHDL-RTL级模型)。 5前端功能仿真。在这一阶段对VHDL-RTL级
49、模型进行仿真,称为功能仿真。尽管VHDL-RTL级模型是可综合的,但对它的功能仿真仍然与硬件无关,仿真结果表达的是可综合模型的逻辑功能。 6逻辑综合。使用逻辑综合工具将VHDL行为级记述转化为结构化的门级电路。在ASIC设计中,门级电路可以由ASIC库中的基本单元组成。,7测试向量生成。这一阶段主要是针对ASIC设计的。FPGA设计的时序测试文件主要产生于适配器。对ASIC的测试向量文件是综合器结合含有版图硬件特性的工艺库后产生的,用于对ASIC的功能测试。 8功能仿真。利用获得的测试向量对ASIC的设计系统和子系统的功能进行仿真。 9结构综合。主要将综合产生的表达逻辑连接关系的网表文件,结合
50、具体的目标硬件环境进行标准单元调用、布局、布线和满足约束条件的结构优化配置,即结构综合。 10门级时序仿真。在这一级中将使用门级仿真器或仍然使用VHDL仿真器(因为结构综合后能同步生成VHDL格式的时序仿真文件)进行门级时序仿真,在计算机上了解更接近硬件目标器件工作的功能时序。对于ASIC设计,被称为布局后仿真。在这一步,将带有从布局布线得到的精确时序信息映射到门级电路重新进行仿真,以检查电路时序,并对电路功能进行最后检查。这些仿真的成功完成称为ASIC sign off。接下去的工作就可以将设计提供给硅铸造生产工序了。 11硬件测试。这是对最后完成的硬件系统(如ASIC或FPGA)进行检查和
51、测试。 与其他的硬件记述语言相比,VHDL具有较强的行为仿真级与综合级的建模功能,VHDL能远离具体硬件,基于行为记述方式的硬件记述语言恰好满足典型的自顶向下设计方法,解决现代电子设计应用中出现的各类问题。,作为一个基于PIC的应用系统,外围电路采用CPLD实现,就必然涉及对CPLD的设计方法、CPLD内部存储器的编程问题及CPLD的开发工具等。这其中一个合理的CPLD的开发顺序犹为重要。由于从最初的系统PIC,CPLD的功能分担考虑到最终对CPLD编程写入均可在CPLD的综合开发软件环境中实现,这个CPLD 综合开发环境,(有MAXPlusII、WebPACK 3.1WP1.X版)。根据软件
52、环境,对于CPLD的开发,总结了以下如图6.6所示开发顺序,这里以供参考。,图6.6 CPLD开发顺序流图,6.4 开发工具(WebPack)的使用法,本节中从简单的模块实例出发介绍Xilinx公司的CPLD开发环境 (Xilinx Project Navigator)的使用。其开发环境功能很多,且新版本的开发软件也在不断出现,但基本使用是相同的。在此仅介绍它的最基本的功能使用。 使用开发环境软件 Projector Navigator : Release Version : WebPACK 3.1 WP1.X Application Version : build + D20+0 JTAG
53、Programmer : Release Version : WebPACK 3.1 WP1.X Application Version : D.20 6.4.1 Xilinx Project Navigate启动 首先使用启动开发Software Xilinx Project Navigate,后进入以下Windows窗口,如图6.7所示。在该窗口中有多个小窗口,如Sourses in Project (表示 Device芯片名,Sourse模式名等),Processes for Current Sourse (各种功能选择窗口),右侧的HDL Editor workspace window
54、 (表示Sourse码窗口)及最下面的Transcript window (处理过程Log窗口)。 这里以10输入与逻辑电路设计为例讲解软件工具的使用。其设计的逻辑电路外部图如图6.7所示。,图6.7 10输入与逻辑电路,图6.8 Xilinx Project Navigate启动界面,5.6.2 目标项目(Projector)的生成,如开发综合环境MPLAB IDE一样,设计开发项目由Projector来综合管理各种设计作业。在此基础上即可在设计CPLD的设计开发的各环节。 1项目子目录生成 在进行设计开发前事先生成存放文件的子目录。这样以后使用会更加方便。子目录名生成如 C:/MP_XLI
55、NX/Project/Test/test/,在其中存放相关文件,具体如图6.9所示。,图6.9 Project子目录生成,1.项目生成方法 可使用下方法生成新的Project。首先打开File后选New Project后,会弹出Project 文件File生成窗口6.10如下。在此窗口中,有Project name和Project存放子目录场所选择,使用Device芯片及使用语言选项等设置。在完成相应设置后,在Project Navigator主菜单窗口中的Sourse in Project小窗口中表示如下。,图6.10 项目生成,2.项目标题的登录 在主菜单窗口如图6.11中选择Sourse
56、到Properties或在上窗口的Untitled处用鼠标双激后弹出以下登录窗口。在上登录窗口中设定title为test后,在主菜单窗口中的Sourse Project小窗口中Untitled变为test。窗口显示如下图6.12。,图6.11 项目标题的登录,图6.12 Project Title设置完成后的窗口,6.4.3 源文件的生成 在主菜单中选Sourse到New选择或菜单中第二行第5个Mark用鼠标双激后弹出Sourse类型设置窗口如图6.13所示。在此表示的窗口中请选择 VHDL Module。如使用其它种开发语言时请选择相应语言。在输入完File Name文件名后,确认存储Location后请选 Next选项。,图6.13源文件生成界面,在上设置窗口中完成选Next选项后,弹出以下Define VHDL Sourse设置窗口如图6.14所示。,图6.14 VHDL源程序定义窗口,在以上设置窗口中的Entity Name和Architecture Name 中输入相应名。此时就能指定各Port端口。在的例中将在VHDL记述文中指定Port端口。所以在此设置窗口中不设定后选Next选项。选后弹出以下窗口,在此窗口中显有的各种设置。请确认好自己的设置无误后请选择Finish后退出。此时在Project Navigator的主菜单窗口中的右
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026医学生模拟面试题及答案
- 2026英山学校面试题目及答案
- 2026全球mRNA疫苗生产设备供应链安全研究
- 2026中国智能农业设备产业发展现状竞争格局分析投资评估研究
- 5月份思想报告(3篇)
- 2026中国新能源汽车产业链现状供需格局及未来增长市场研究报告
- 2026马来西亚锂电池负极材料市场分析供需情况投资机会策划研究分析报告
- 2027届河南省洛阳市廛河回族区六上数学期末检测模拟试题含解析
- 通河县2027届六年级数学第一学期期末质量检测模拟试题含解析
- 2026中国投资行业市场热点分析及投资收益研究报告
- 2026年哈尔滨城市发展投资集团面向社会招聘53人笔试模拟试题及答案详解
- 2026中秋国庆备货趋势洞察-尼尔森iq-202607
- 2026交管12123学法减分题库(含完整答案解析全国)
- 2025-2030商业航天产业发展政策环境与市场增长空间报告
- 乙醇(酒精)化学品安全技术说明书(MSDS-SDS)
- 2026年四川省成都市公安招聘辅警考试真题及答案
- 2026年人教版(新教材)初中英语八年级下册期末模拟测试卷及答案(二套)
- 企业年度评优与表彰管理办法
- 弱电智能化工程系统培训计划
- 电控配电用电缆桥架(JBT 10216-2025)
- 手术室护理实践指南2025解读
评论
0/150
提交评论