VHDL编程风格
华为_VHDL设计风格和实现

VHDL 设计风格和实现, 2000年6月10日 第 14 页
异步设计的更多例子(禁止)
INPUT CLOCK
Async R Counter D Q1 Q0
INPUT CLOCK
Counter D TC
DATA D
CE
S Q
R
这些例子有什么问题 ?
VHDL 设计风格和实现, 2000年6月10日 第 15 页
3.1 Flop A D Q 3.6 Flop B D Q 3.3 Flop C D Q
CLOCK
3.0
12.1
3.6
VHDL 设计风格和实现, 2000年6月10日 第 19 页
时延级数怎么算?
FPGA的时延通常 布线占50%,逻辑占50% 不要忘记了时钟到输出的时间 (tco,输出时间)和时钟 到建立的时间 (tsu,建立时间)
- 只要能满足时延要求,就可以确保下游逻辑单元 能正确采样到上游数据.
异步设计:上游数据发生变化的时机是不确 定的,甚至会出现中间态.
- 下游逻辑对上游数据的采样是不确定的,会发生 数据传递的错误.
VHDL 设计风格和实现, 2000年6月10日 第 4 页
为什么要做同步设计 ?
异步设计可能会产生以下问题:
VHDL 设计风格和实现, 2000年6月10日 第 18 页
时延中包括时钟歪斜(Skew)
下面逻辑中,数据时延很小(最大3.6ns),如果时钟歪斜较小 ,该逻辑可以跑200MHz以上. 由于存在时钟歪斜,Flop B到Flop C的实际时延为 3.3+12.1-3.6=11.8ns,在100MHz下就不能工作. 计算速度时要考虑时钟歪斜的影响. 使用全局驱动,可以减少时钟歪斜. INPUT
VHDL语言介绍

VHDL语言介绍VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路的结构和行为。
它是一种高级编程语言,用于描述数字系统中的硬件功能。
VHDL是一种被广泛应用于数字系统设计的硬件描述语言,它可以用于描述数字系统的结构和功能,并且允许进行仿真、综合和验证。
VHDL最初是由美国国防部(DoD)为了应对不同供应商生产的不同硬件之间互通性的问题而开发的。
它提供了一种用于描述数字电路的方法,可以在不同供应商的工具之间进行交换。
VHDL已成为一种行业标准,在数字系统设计领域被广泛应用。
VHDL的语法类似于Ada编程语言,它使用关键字、运算符和数据类型来描述数字系统中的硬件元素。
VHDL中的关键概念包括实体(entity)、架构(architecture)和过程(process)。
实体描述了数字系统的接口和功能,架构描述了数字系统的内部结构和行为,而过程描述了数字系统中的操作和控制。
VHDL主要有两种用途,一是用于模拟和验证数字系统的功能,二是用于综合数字系统的设计,生成实际的硬件电路。
在模拟和验证阶段,设计师可以使用VHDL描述数字系统的功能,并通过仿真工具对其进行验证。
在综合阶段,设计师可以使用VHDL描述数字系统的结构,并通过综合工具生成对应的硬件电路。
VHDL的优点在于其强大的表达能力和灵活性。
设计师可以使用VHDL描述各种复杂的数字系统,包括处理器、通信接口、存储器等。
VHDL还提供了丰富的数据类型和运算符,使设计师可以轻松地描述数字系统中的各种操作。
除了描述数字系统的结构和行为,VHDL还提供了丰富的标准库和模块化编程的方法。
设计师可以使用标准库中提供的各种功能模块来加速开发过程,并且可以将自己设计的模块封装成库以便重复使用。
VHDL还支持面向对象的设计方法,设计师可以使用面向对象的技术来组织和管理复杂的数字系统。
通过使用面向对象的方法,设计师可以将数字系统分解成多个模块,每个模块都有自己的接口和功能,并且可以通过继承和复用来简化设计过程。
第8讲 VHDL的描述风格

关于信号与变量
结构描述
VHDL 结构型描述风格是基于元件例化语句或生成 语句的应用,利用这种语句可以用不同类型的结构来完 成多层次的工程,即从简单的门到非常复杂的元件,包 括各种已完成的设计实体子模块来描述整个系统。 结构描述就是表示元件之间的互连这种描述,允许 互连元件的层次式安置像网表本身的构建一样。
ARCHITECTURE STRUCTURE OF COUNTER3 IS COMPONENT DFF PORT(CLK, DATA: IN BIT; Q: OUT BIT); END COMPONENT; COMPONENT AND2 PORT(I1, I2: IN BIT; O: OUT BIT); END COMPONENT; COMPONENT OR2 PORT(I1, I2: IN BIT; O: OUT BIT); END COMPONENT; COMPONENT NAND2 PORT(I1, I2: IN BIT; O: OUT BIT); END COMPONENT; COMPONENT XNOR2 PORT(I1, I2: IN BIT; O: OUT BIT); END COMPONENT; COMPONENT INV PORT(I: IN BIT; O: OUT BIT); END COMPONENT; SIGNAL N1, N2, N3, N4, N5, N6, N7, N8, N9: BIT;
层次化设计
详细地定义设计中的模块,使多个设计 者之间并行工作 对于每个模块,便于减少错误和Debug 可对每个模块单独仿真 分阶段完成设计
层次化设计举例
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY BCD_Disply IS PORT ( Clrn,Clk : IN STD_LOGIC; s1,s0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ; ARCHITECTURE one OF BCD_Disply IS COMPONENT cnt10 PORT(Clrn,Clk: IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Co : OUT STD_LOGIC); END COMPONENT; COMPONENT decl7s PORT ( a : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Led : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END COMPONENT;
论VHDL语言的程序结构和描述风格

图4结构化描述法 的VHDL程序示 例 4.3结构( st r uc t ur al ) 描述
VHDL结构描述即逻辑元器件的连接描述, 它采用 并行处理 语句描述 设计实体 内的结构 组织 和元件 互连关系 。构造体 的结构化 描述法是 数字 系统层次化设计[ 2] 中常用的一种方法,其主要特点 如下:
( Ar c hi t ec t ur e) 描述一个设计的结构或行为,建立 设计的输入与输出之间的逻辑关系;利用配置 ( Conf i gur at i on) 技术,可以选取不同的结构体,这 样就 可以对同 一设计 任务进行 多种配 置的性能 实 验, 从而 选取性 能最优 的逻辑 实现 。
I SEND
得无从下手。 硬件描述语言主要有两个方面的应用【l ~2] :用
文档 语言的 形式描 述数字 设计以 及用于 系统的 仿 真、验证和设计综合等。目前应用最广泛的主要有 两种语言:Ver i l og- HDL和VHDL。Ver i l og- HDL 是一 种专门 为复杂 数字逻 辑电路 和系统 的设计 仿 真而开发的HDL语言,也可以说Ver i l og-HDL是 在应用最广泛的C语言的基础上发展起来的一种 硬件描述语言,由Cader i ce 公司1990年公开,并成 立了OVI ( Open Ver i l ogI nt er n at i ona l ) 组织来负责 其发展。VHDI 。语言是在20世纪80年代后期由 美国国防部开发的,美国军方研制专用集成电路所 指定的硬件描述语言。这两种语言均是I EEE的 工业标准硬件描述语言,且得到众多EDA公司的 支持,在电子工程领域,已成为事实上的通用硬件 描述语言。本文主要讨论VHDL语言。
VHDL代码设计规范

签名签名编制审核部门部门签名审核签名审核加盖受控章部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门审批批准生效日期:签名签名文件编号文件标题现行版本VHDL 代码设计规范V1.0版次编制日期更改内容(条款)文件编号:编制:审核:文件编号:编制:审核:可靠性审核:标准化:批准:........................................................................................................................................................................................................................................................................................................................................................................................................5.1. 书写规范 (3)5.1.1. 命名规范...................................................................... 3..5.1.2. 注释规范...................................................................... 5..5.1.3. 其他书写规范..................................................................6..5.2. 设计规范 (6)5.2.1. 复位..........................................................................6..5.2.2. 时钟.......................................................................... 7..5.2.3. 状态机........................................................................ 7..5.2.4. 异步信号...................................................................... 7..5.2.5. 其他设计规范.................................................................. 8..5.3. 设计常识 (9)................................................................................6.1. 例子说明(规范详细解释) (9)6.2. 代码模板 (18)规范 VHDL 的设计风格,保证代码的可读性、重用性及与现有 EDA 工具的一致性,从而形成对设计代码的标准化管理。
VHDL与Verilog语言

VHDL与Verilog语言VHDL(VHSIC hardware description language)和Verilog是用于电子系统设计的硬件描述语言(HDL)。
这两种语言被广泛应用于数字逻辑设计和仿真,以及硬件描述、验证和综合。
1. VHDL(VHSIC hardware description language)VHDL是一种结构化的硬件描述语言,最初由美国国防部高速集成电路计划办公室(VHSIC,Very High Speed Integrated Circuits)开发。
VHDL以其强大的功能和灵活性而闻名,并被广泛用于数字系统的设计和验证。
VHDL的编写包括实体(Entity)和体(Architecture)两个主要部分。
实体部分描述了数字系统的输入输出接口、信号和组件的声明,而体部分描述了实体的内部结构、信号处理和逻辑功能。
VHDL具有丰富的数据类型、运算符和控制结构,可以方便地描述数字电路的行为和结构。
它还提供了强大的仿真和验证功能,使设计人员能够在开发和测试阶段快速迭代和调试设计。
2. VerilogVerilog是一种硬件描述语言,最初由Gateway Design Automation公司(现在是Cadence Design Systems的一部分)开发。
Verilog以其简洁的语法和易学易用的特性而受到广泛欢迎,并成为工业界标准。
Verilog的设计由模块(Module)组成,每个模块描述了一个黑盒子,包含输入和输出端口以及内部的逻辑功能。
模块可以进行层次化组合,从而实现较复杂的系统级设计。
Verilog的语法类似于C语言,具有类似的数据类型、运算符和控制结构。
它还提供了时序建模的能力,使设计人员能够描述数字电路的时序行为。
3. VHDL与Verilog的比较VHDL和Verilog在语法和功能上有一些区别,但它们都可以用于数字电路的设计和仿真。
以下是它们之间的一些比较:3.1 语法风格VHDL采用结构化的编程风格,需要明确的体、过程和信号声明,可以更好地控制和描述系统的结构和行为。
VHDL四位全加器三种语言编程

VHDL四位全加器三种语言编程四位全加器的三种VHDL语言描述方式:一:数据流描述方式libraryieee;use ieee.std_logic_1164.all;entity add1 isport(a,b,cin:instd_logic;s,cout:outstd_logic);end add1;architecture dataflow of add1 isbegins<=(a xor b) xorcin;cout<=((a xor b)and cin)or(a and b);end dataflow;二:行为描述方式libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity add22 isport(a,b,cin:instd_logic;s,co:outstd_logic);end add22;architecture dataflow of add22 issignaltmp:std_logic;beginprocess(a,b,cin)variable n:integer range 0 to 3;constants_vector:std_logic_vector(3 downto 0):="1010"; constantco_vector:std_logic_vector(3 downto 0):="1100"; beginn:=0;if a='1' then n:=n+1;end if;if b='1' then n:=n+1;end if;ifcin='1' then n:=n+1;end if;s<=s_vector(n) after 10 ;co<=co_vector(n);end process;end dataflow;三:结构描述方式Library ieee;Use ieee.std_logic_1164.all; Entity and_2 is port(a,b: in std_logic;c: out std_logic);End and_2;Architecture behave of and_2 is beginc<= (a and b);End behave;Library ieee;Use ieee.std_logic_1164.all; Entity or_2 is port(a,b: in std_logic;c: out std_logic);End or_2;Architecture behave of or_2 is beginc<= (a or b);End behave;Library ieee;Use ieee.std_logic_1164.all; Entity xor_2 isport(a,b: in std_logic;c: out std_logic);End xor_2;Architecture behave of xor_2 is beginc<= (a xor b);End behave;Library ieee;Use ieee.std_logic_1164.all; Entity add33 isport(A,B,Cin: in std_logic; Co,S: out std_logic);End add33;Architecture structure of add33 is component and_2port(a,b: in std_logic;c: out std_logic);End component;component or_2port(a,b: in std_logic;c: out std_logic);End component;component xor_2port(a,b: in std_logic;c: out std_logic);End component;signal tmp1,tmp2,tmp3:std_logic; beginu1:xor_2 port map(A,B,tmp1);u2:and_2 port map(tmp1,Cin,tmp2); u3:xor_2 port map(tmp1,Cin,S);u4:and_2 port map(A,B,tmp3);u5:or_2 port map(tmp2,tmp3,Co); End structure;。
第2章 VHDL语言基础

End 实体名;
端口名
端口模式
数据类型
(2)ENTITY
端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)
IN
OUT
BUFFER
INOUT
二输入与门电路设计范例
Library std; Use std.standard.all;
(4)CONFIGURATION定义区
定义格式: Configuration 配置名 of 实体名 is for 选用的结构体名 end for; end configuration 配置名 ;
二输入与门电路设计范例
a c
b电Leabharlann 真值表abc
0
0
0
1
0
0
0
1
0
1
1
1
二输入与门电路设计范例
Architecture Na of and2 is
‘1’; 符号<=为信号直接赋值符。
End Na;
--结构体Na
Architecture Nb of and2 is
Begin
c <= a and b;
--and 为逻辑与操作
End Nb; --结构体Nb
Library ieee; Use ieee.std_logic_1164.all;
Entity half_adder is Port( x,y : in std_logic;sum,carry : out hlf_adder); End half_adder;
(4)CONFIGURATION定义区
一个完整VHDL电路设计必须有一个实体 和对应的结构体,即实体和结构体对构成一个 完整的VHDL设计。
VHDL的描述风格

BEGIN
u1: half_adder PORT MAP (x, y, b, a);
u2: half_adder PORT MAP (c_in, b, sum, c);
u3: or_gate PORT MAP (c, a, c_out);
END structural;
由上例可见,对于一个复杂的电子系统,可以将其分解为若 干个子系统,每个子系统再分解成模块,形成多层次设计。 这样,可以使更多的设计者同时进行合作。在多层次设计中, 每个层次都可以作为一个元件,再构成一个模块或系统,可 以先分别仿真每个元件,然后再整体调试。所以说结构化描 述不仅是一种设计方法,而且是一种设计思想,是大型电子 系统高层次设计的重要手段。
1 10
1
0
1 11
1
1
END IF;
-- (0 TO 3)
sum <= sum_vector (n) AFTER 2*tpd; - - sum_vector初值为“0101”
c_out <= carry_vector (n) AFTER 3*tpd; - - carry_vector初值为“0011”
GENERIC(tpd:TIME:=10 ns); PORT(in1, in2: IN STD_LOGIC;
out1: OUT STD_LOGIC); END or_gate;
ARCHITECTURE rtl OF or_gate IS
BEGIN
out1 <= in1 OR in2 AFTER tpd;
下面结合一个全加器来说明这四种描述风格,全加器的端口 示意图如图所示,其输入输出关系如表所示。
全加器的输入输出关系
全加器框图
VHDL代码书写规范

VHDL代码书写规范(定稿)文件编号:编制:审核:可靠性审核:标准化:批准:文件会签页文件历史记录文件编号现行版本V1.0 文件标题VHDL代码书写规范文件履历版次编制日期更改内容(条款)V1.0V1.0目录1.目的 (1)2.范围 (1)3.术语说明 (1)4.书写规范 (1)4.1命名规范 (1)R1.一个文件只包含一个模块,文件命名和实体命名必须相同。
文件名大写,其后缀小写。
(1)R2.顶层文件命名方式使用工程名、器件型号与_TOP结合。
顶层文件的元件实例化,后缀使用_module;第二层文件的元件实例化,后缀使用_block;第三层之后不做定义(若遇到常见的基本逻辑电路或子模块,如:SRAM、FIFO等,那么优先使用具有代表性的名称) (1)R3.代码编写之前,以文档的方式,根据功能分类,分别对FPGA的外部端口进行命名约定。
(2)R4.命名要有实际意义。
(2)R5.命名标识符的首字符必须是字母,包含多个单词的标志符单词之间使用下划线分开。
信号、变量等的命名最后字符也一定要求是字母,中间的可以是数字或者其他合法符号。
(2)R6.模块、信号、变量等的命名不大于64个字符 (2)R7.实体、结构名、端口信号、常量用大写标识 (2)R8.行为级、结构级和数据流级结构命名分别以“BEH_实体名”、“STR_实体名”和“RTL_实体名”区分。
如果是混合使用,或者是分不清使用了那一种结构,那么就是用“ARC_实体名”命名。
(3)R9.单口RAM模块命名以SPRAM作后缀;双口RAM模块命名以DPRAM作后缀;ROM模块命名以ROM作后缀;FIFO模块命名以FIFO_作后缀;数字时钟管理模块命名以DCM作后缀;锁相环模块命名以PLL作后缀;乘法模块命名以MULT作后缀;除法模块命名以DIV作后缀;加法模块命名以ADD作后缀;减法模块命名以SUB作后缀。
(3)R10.模块实例化时,采用‘Un_xx_元件名’标识,cell实例化时使用‘Mn_xx_元件名’标识。
[VHDL Verilog]良好的代码编写风格(二十五条)讲解
![[VHDL Verilog]良好的代码编写风格(二十五条)讲解](https://img.taocdn.com/s3/m/4d7284cab9f3f90f76c61b94.png)
良好代码编写风格可以满足信、达、雅的要求。
在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。
良好代码编写风格的通则概括如下:(1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;(2)使用有意义的信号名、端口名、函数名和参数名;(3)信号名长度不要太长;(4)对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀;(5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;(6)对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。
注意在同一个设计中要使用同一个小写字母表示低电平有效;(7)对于复位信号使用rst 作为信号名,如果复位信号是低电平有效,建议使用rst_n;(8)当描述多比特总线时,使用一致的定义顺序,对于verilog建议采用bus_signal[x:0]的表示;(9)尽量遵循业界已经习惯的一些约定。
如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;(11)使用适当的注释来解释所有的always 进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。
注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;(12)每一行语句独立成行。
VHDL语言介绍

VHDL语言介绍VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language,翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。
它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。
当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
VHDL语言是一种行为描述语言,其编程结构类似于计算机中的C语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。
覆盖面广,描述能力强,是一个多层次的硬件描述语言。
在VHDL 语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。
具有良好的可读性,即容易被计算机接受,也容易被读者理解。
使用期长,不会因工艺变化而使描述过时。
因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。
支持大规模设计的分解和已有设计的再利用。
与其他硬件描述语言相比,VHDL具有以下特点:(1)功能强大、设计灵活VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
电子设计自动化第6章 VHDL的描述语句与描述风格

第6章 VHDL的描述语句与描述风格 如果把该程序改写成例6-5的程序,执行的功能是一样的。
【例 6-5】
USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4bak IS PORT( input: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
第6章 VHDL的描述语句与描述风格
6.1.1 赋值语句 在进程、子程序中的赋值语句包括变量赋值语句与信号赋
值语句两种。变量赋值与信号赋值虽然都是在顺序语句中,但 赋值的过程有不同之处。变量具有局部特征,它的赋值是立即 发生的,是一种时间延迟为零的赋值行为。信号具有全局性特 征,它不但可以作为一个设计实体内部各单元之间数据传送的 载体,而且可通过信号进行实体间通信。信号在顺序语句中的 赋值不是立即发生的,它发生在一个进程结束时或子程序调用 完成以后。信号的赋值过程总有一定的延时,它反映了硬件系 统的重要特性,综合后可以找到与信号对应的硬件结构,如一 根传输导线、一个输入/输出端口或一个D触发器等。变量赋值 与信号赋值的语法格式如下:
第6章 VHDL的描述语句与描述风格
【例6-3】 IF(a=‘1’) THEN
c<=b; ELSE
c<=d; END IF; 如果a='1'则执行c<=b;否则执行c<=d,然后执行后续语句。
第6章 VHDL的描述语句与描述风格
(3) 格式 3: IF 条件 THEN 顺序执行语句; ELSIF 条件 THEN 顺序执行语句; ELSIF 条件 THEN 顺序执行语句; ELSIF 条件 THEN 顺序执行语句;
END mux4; ARCHITECTURE be_mux4 OF mux4 IS
VHDL编程的一些心得体会[初学者必看]
![VHDL编程的一些心得体会[初学者必看]](https://img.taocdn.com/s3/m/fa20d15d27d3240c8447ef8b.png)
VHDL编程的一些心得体会VHDL是由美国国防部为描述电子电路所开发的一种语言,其全称为(Very High Speed Integrated Circuit) Hardware Description Language。
与另外一门硬件描述语言Verilog HDL 相比,VHDL更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为级(寄存器传输级),而且VHDL具有设计重用、大型设计能力、可读性强、易于编译等优点逐渐受到硬件设计者的青睐。
但是,VHDL是一门语法相当严格的语言,易学性差,特别是对于刚开始接触VHDL的设计者而言,经常会因某些小细节处理不当导致综合无法通过。
为此本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。
一.关于端口VHDL共定义了5种类型的端口,分别是In, Out,Inout, Buffer及Linkage,实际设计时只会用到前四种。
In和Out 端口的使用相对简单。
这里,我们主要讲述关于buffer和inout使用时的注意事项。
inout和buffer区别INOUT为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。
也可以从此端口读入数据,即输入;BUFFER为缓冲端口,功能与INOUT类似,区别在于当需要读入数据时,只允许内部回读内部产生的输出信号,即反馈。
举个例子,设计一个计数器的时候可以将输出的计数信号定义为BUFFER,这样回读输出信号可以做下一计数值的初始值。
buffer顾名思义就是缓存,它是作为输出使用的,因为在模块内,是不可以将输出赋值给其他信号的,例如定义b: out std_logic;我们现在要将b赋值给信号a,就会出错,但是如果b的类型为buffer就可以执行操作;inout是双向端口,即可以作为输入也可以作为输出,跟buffer的作用完全不同,要注意的是inout类型的数据在不作为输入使用时必须被置为高阻“Z”状态,否则它作为输出的功能将不能正确执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.并行结构
在VHDL语言描述中,进程中的语句是顺序 执行的。如果要设计一个并行的电路,不 要使用顺序语句,而要使用并行语句。
方法1. Process(A,B,C) begin if C=’0’then Y<=A; Else Y<=B; End if; End process;
方法2. Y<=A when C=’0’else B; 如果电路结构是并行的,那么使用方法 2描述要比方法1好。
状态机的编码在ISE中有6种,其中常用的 是顺序编码和一位热码。在ISE中可以通过 修改综合约束来指定状态机的编码。方法 如下: ①综合前,在Process for current sources 窗口中选中Synthesize,单击鼠标右键,弹 出下拉菜单,选中Properties(属性)。如图 7.1.5所示。
Z <= a+q;
When ‘0’=> q <= b; When ‘1’=> q<=c;
(a)
(b) 图7.1.4 加法器的资源共享
加法器的资源共享
在图中7.1.4框图中加法器的输出Z是A加上C 或者B,A与C、B哪个输入相加由选择信号S决定, 由于在设计中采用了多路选择器(Mux),在结 构上可以得到两种形式。图(b)的框图采用了 两个16位的加法器,两个加法器的结果通过MUX 由S选择输出。而图(a)的框图中只采用了一个 加法器,它将C、B信号通过MUX后的输出送到加 法器的一端,另一端连接A。两种结构都能达到 设计的要求,显然,图(a)框图中的设计占用 的资源要小些。
7.1.2 不同的状态机描述
1. 2. 3. 4.
状态机的选型 状态编码 多进程状态机 单进程状态机
1. 状态机的选型
按状态机的输出方式分类,有限状态机可分为 Mealy型和Moore型。从输出时序上看, Mealy型 状态机的输出是当前状态和所有输入信号的函数, 它的输出是在输入变化后立即发生的,不依赖时 钟的同步。Moore型状态机输出则仅为当前状态 的函数,状态机的输入发生变化还必须与状态机 的时钟同步。
因此,即使最后综合出的电路都能实现相 同的逻辑功能,其电路的复杂程度和时延 特性都会有很大的差别,甚至某些臃肿的 电路还会产生难以预料的问题。 从这些问题出发,很有必要深入讨论在 VHDL设计中如何简化电路结构,优化电路 设计的问题。
7.1.1 描述方法对电路结构的影响
用VHDL进行设计,最终综合出的电路的复杂程度, 除取决于设计要求实现的功能的难度外,还受设 计工程师对电路的描述方法和对设计的规划水平 的影响。 最常见的使电路复杂化的原因之一是在设计中存 在许多本不必要的类似LATCH的结构。而且由于 这些结构通常都由大量的触发器组成,不仅使电 路更复杂,工作速度降低,而且由于时序配合的 原因会导致不可预料的结果。
例子:
type STATE_TYPE is (S1, S2, S3, S4); attribute ENUM_ENCODING: STRING; attribute ENUM_ENCODING of STATE_TYPE: type is "1110 1101 1011 0111"; 上面的四个状态S1,S2,S3,S4其实也是一位热码,是 用‘0’作为热码。选择User编码,那么综合后的实 际状态机编码就是设计者在attribute中描述的状态 码字。
第七章 设计技巧
7.1 VHDL编码风格
VHDL设计是行为级的设计,所带来的问题是设计 者的设计思考与实际电路结构是相脱节的。设计 者主要是根据VHDL的语法规则,对系统目标的逻 辑行为进行描述,然后通过综合工具进行电路结 构的综合、编译、优化,通过仿真工具进行逻辑 功能仿真和系统时延的仿真。 实际设计过程中,由于每个设计工程师对语言规 则、对电路行为的理解程度不同,每个人的编程 风格不同,往往同样的系统功能,描述的方式是 不一样的,综合出来的电路结构更是大相径庭。
仔细观察,在Exam1和Exam2进程中的语句 都有同一个毛病。Exam1进程中的if语句仅仅指 明了A在高电平(1)的时候将B的值传到Q端, 并没有指明A在低电平(0)的时候Q端应该是什 么值。综合工具在综合时,发现这种不完全的状 态描述,会将其综合为锁存(latch)。 在ISE中,综合工具XST会发出一个警告: Found 1-bit latch for signal <q>。锁存是由与或 非逻辑组成的,而这种结构在系统中多半会埋下 不稳定的种ector
在VHDL中,信号一般都使用限制了位数的 std_logic、 std_logic_vector类型,不使用
integer(整型)。如果使用integer,最好 在后面加上约束条件,例如:a:integer range 0 to 7;。 如果使用了integer而没有对其进行位 数的约束,那么在32位的PC机中,综合后 将是一个32bit的信号,会造成大量的浪费。
再看看Exam2进程,有两个输出信号,信号 的值在Case语句中被决定,但是Z的值只在C为 ‘0’时有明确的说明,当C为高‘1’时设计者并没 有明确指出。所以同样会使综合工具理解为锁存。
Q*data*gate+data*gate=Q
Gate=1,Q=data;
Gate=0,Q=Q;
图7.1.1 采用门电路的锁存器原理图
1.不必要的锁存
以下有2段设计,如果单从语法上来看是没有任何错误的,而且编译 时都可以通过,但是如果从电路结构上考虑,它们都存在问题。 Exam1: Process(A,B) Begin If A=’1’ then Q <= B ; 暗指锁存 End if; End process; Exam2: process(C) Begin Case C is When ‘0’=> Q <= ‘1’; Z <= ‘0’; When ‘1’=> Q <= ‘0’; 缺少Z的值 End case; End process;
5.资源共享
如果有可能的话,尽量使资源共享。一块FPGA 芯片中的资源是有限的。如果不有效利用仅有 的资源,将会导致资源不够,系统冗余过多, 稳定性也变会差。 Case s is When ‘0’=> Z <= a+b; When ‘1’=> Z <=a+c;
Case s is
End case; 一个加法器资源共享例如图7.1.4所示。
图7.1.5 综合Properties(属性)
②在弹出的菜单中有3个选项栏,选中HDL options选项栏,如图7.1.6所示。在Properties name(属性名)下的第一项便是FSM Encoding Algorithm(有限状态机编码算法),在Value中打开 下拉菜单,可以看到几种编码方式。其中Auto(自 动)为ISE的缺省值,在一般情况下,如果目标芯 片是FPGA,那么XST会将状态机编码为OneHot(一位热码)。使用One-Hot(一位热码)的好处 是,状态转换快,状态译码简单。
2)方式2 Type mystate is (st0,st1,st2,st3); Signal curren_state,next_state:mystate; 采用方式2定义的状态有具体的状态含义,可读 性好,易于调试和修改。
(3)方式3
Signal curren_state,next_state:std_logic_vector(1downto 0);
D触发器的VHDL描述:
DFF_AR:process(clk,reset)--带异步复位的D触发器 Begin If reset=’1’ then Q <=’0’; Elseif rising_edge(clk) then Q <= A; End if; End process;
DFF_AS:process(clk,preset)--带异步置位的D触发器 Begin If preset=’1’ then Q <=’1’; Elsif rising_edge(clk) then Q <= A; End if; End process;
从上面的例子可以了解到不同的描述对 电路结构的影响,在下面的一个例子中, 有两种不同的加法描述,其电路结构也 是不同的。
(1)Out1<=I1+I2+I3+I4; 其电路结构如图7.1.2所示。
(2)Out2<=(I1+I2)+(I3+I4); 其电路结构如图7.1.3所示
从结构上看,第一种描述中没有使用括号, 电路结构为三层,加法一级一级的进行。它的特 点是,四个输入I1,I2,I3,I4到达加法器的路径不 相等。第二种描述中的使用了括号,电路结构分 为两层,显然它的特点是四个输入信号到达加法 器的路径是相等的。这里并不能简单的评论两种 结构的优劣,必须根据实际应用情况分析。
DFF_SS:process(clk,preset)-- 带同步置位的D触发器 Begin if rising_edge(clk) then If preset=’1’ then Q <=’1’; else Q <= A; End if; End if; End process;
3.使用括号描述想要的结构
在实际工程中,具体电路有具体的设计要求,可 能适应于Moore或Mealy状态机,也可能两种都可 以实现设计,所以设计者必须根据实际情况和经 验综合决定采用哪种状态机。
2. 状态编码
状态编码,是指定义状态机现态和次态,一般 有 3种方式: (1)方式1 signal curren_state:std_logic_vector(1 downto 0) signal next_state:std_logic_vector(1 downto 0) 方式1定义的状态有比较多的毛病。首先,这种方 式定义的状态为逻辑向量,缺乏具体的状态含义,程 序的可读性较差,更重要的是,设计后期调试修改比 较麻烦。