第六讲VHDL的可综合性(精)

合集下载

VHDL课件VHDL语言及其应用

VHDL课件VHDL语言及其应用

二选一 用 …⏐… 表示
定义为 用 ::= 表示
语句分隔 用分号 “;” 表示
特殊要强调的内容 用黑体表示
注释
用 “--” 前缀
7பைடு நூலகம்
第二部分 VHDL语言的学习基础 (2)
•书写规定与基本句法单元
▲ 标识符
基本标识符 由VHDL’87支持, 长度不能超过32 个有效字符序列, 字符集:0~9,a~z, A~Z和下划线“_”
--实数0.5的表示
注意:在相邻数字之间插入下划线只为增加可读性,对数值无影响。
9
第二部分 VHDL语言的学习基础 (4)
•书写规定与基本句法单元
▲字符、串、位串
字符: 用单引号括起来,例如,‘A’、‘a’、‘%’
串:用双引号括起来。串内包含双引号字符时,用双写双引号来表示。串长
度超过一行, 用运算符“&”把两个子串连接起来, 例如,
• 信号 抽象描述电路的导线,起保持改变的数值和连接子元件的作用。 信号总是在元件的端口连接元件,元件间交换的信息仅通过信号传送 信号赋值不意味着立即更新其保持的原有内容,因为任何对信号 的赋值操作只能作为预定数值存储在信号的驱动器中,仅当模拟时间 经过起同步作用的语句或再一次启动了进程时才会发生更新动作。 允许利用属性存取过去和当前的数值,可以接受来自变量的赋值
扩展标识符 由VHDL’93,VHDL2001支持,首尾用反斜杠“\”定界, 区分大小写,总与基本标识符不同,字符集:ASCII码, 反斜杠字符要双写,允许任意字符,包括保留字、类型字
▲ 保留字 类型字 专用字
保留字 预留用于专门用途的标识符,VHDL’87,VHDL’93和VHDL2001有差别 类型字 用于表示数据类型的标识符 专用字 用于表示特别信息和常量的标识符

可综合VHDL描述的一些技巧

可综合VHDL描述的一些技巧

end process;
process(C, prev_cond, CTRL_is_late_arriving, Z1, Z2) begin if ((C(4) = ’1’) and (CTRL_is_late_arriving = ’0’)) then if (prev_cond) then Z <= Z1; else Z <= Z2; end if; else Z <= Z1; end if;
end if; ----特点:路径最长,使用的选择器最多,都是2选1;数据 到达电路不同时
总结signal if
if (cond = cond1) then
statement1; elsif (cond = cond2) then statement2; elsif (cond = cond3) then statement3; else statement4;--如果不是刻意描述latch,一定要有或者用缺省赋 值代替 end if;
end process;
就是将CTRL_is_late_arriving抽取到出口处, 对应的电路图:
对应的电路
不同的描述风格会导致不同的 电路
下面以一个N位数据的每一位做异或 (比如用来作奇偶校验)
entity XOR_reduce is
generic (N: natural := 5); port (data_in: in std_logic_vector(N-1 downto 0); data_out: out std_logic); end XOR_reduce; architecture one of XOR_reduce is
对应的电路
另外一种改法
• 可不可以通过改变if对的位置,将

关于VHDL中的时钟是不是可综合的问题

关于VHDL中的时钟是不是可综合的问题

关于VHDL中的时钟是不是可综合的问题1。

VHDL综合器中把通过边沿触发其他信号的东西统统定义为时钟信号。

比如说,一个信号B的变化需要A的下降沿来触发,那么在相应的进程中就把A看作是时钟信号,即使A可能只变化了这一次。

2。

明确了1,就来看2。

任意一个信号或者变量只能有一个时钟驱动。

多时钟驱动的信号或变量会在综合时报错。

比如说,如下语句在一个进程中:if (clk'event and clk = '1') thenB <= '1';end if;if (A'event and A = '0') thenB < = '0';end if;这里面的B就叫做被时钟clk和时钟A同时驱动了,虽然我们平时不习惯把A 也叫做时钟,但是它在综合时似确实被这样认为的。

因此,这就要求我们在写程序之前,要把所有的信号都拼尽全力的用不多于一个时钟来驱动,当然不用时钟也是可以的。

同时也引申出一点,就是一个进程的敏感表表示的是进程间的驱动关系,这个需要极其认真地考虑,要弄清楚进程间究竟是用什么通信的,尤其牵扯到时钟的时候,到搞懂究竟是哪个时钟触发了信号。

切不可随意添加信号,在仿真时可能问题不大,但是综合的时候可能会有大问题。

这个从物理上也好理解,一个又边沿触发的信号物理上就是用一个D触发器实现的,无论这个触发信号是变化很长时间还是只变化一次,只要是牵扯到检测边沿,就需要一个D触发器。

而一个信号只能对应一个D触发器,一个D触发器只能由一个时钟驱动,所以以上语句是无法综合的。

也就是说,两个时钟同时触发的D触发器现阶段无法实现。

为什么无法实现呢?留个问题。

3。

使用异步电路只有如下一种书写方式可以综合:process(clk,reset)beginif (reset = '1') thenB <= '1';elsif (clk'event and clk = '0') thenB < = '0';end if;end process;下面的语句会在综合中报错:process(clk,reset)beginif (reset = '1') thenB <= '1';end if;if (clk'event and clk = '0') thenB < = '0';end if;end process;报的错误是同步时钟前面存在异步信号。

VHDL的可综合性

VHDL的可综合性
句信况比较复杂,有时是最大延时约束,有时是典型经验值,还有些是人 为加入的,所以现在所有的综合工具都忽略源代码中的延时语句。有些工 具干脆把这些语句处理为语法错误。大部分工具忽略延时语句后,给出警 告提示。而综合时间约束则在综合过程中通过综合命令输入。
(2)支持有限类型。
VHDL具有丰富的类型定义,但是有些类型不具备硬件对应物。不可能被综合,
变量在综合时要根据整体代码决定其处理方式,主要有以下几种方式:①用寄存 器锁存变量,也就是说,变量经过综合后形成了寄存器,但是生命期不重叠的变 量可以共享一个硬件寄存器;②在逻辑优化过程中被消去,即没有硬件对应物; ③作为一根硬件连线出现(由组合逻辑输出)。
2.信号赋值
信号只能在同步语句(显式或隐含的wait语句)之后改变状态。通常,综合后的信 号赋值语句会被化简为最简形式。综合工具处理信号的方式类似于变量,但有以 下区别:①如果信号需要寄存器锁存,那么被锁存的信号能与其他信号共享硬件 寄存器;②比较先进的综合工具可以按照设计师的要求,决定是否保持综合前后 信号的一致性;③出现在形如if CLK=’1‟and CLK„Event和then· · end if之间或 wait until CLK=‘0‟and CLK‟Event这样的时钟沿同步语句之后的信号都要被锁 存,而变量则不一定被锁存。
四、运算符
1.逻辑运算符
逻辑运算符包括表5.4中的not和二元逻辑运算符,其操作数可以是bit和 Std_logic等类型的标量或同长度的矢量对象,也可以是Boolean类型的对象。 这些算符的综合是直截了当的,直接调用逻辑门单元实现即可,但经过优化后 ,这些算符可能被合并或改变。图5.15是对下达VHDL代码中逻辑运算符综合的 结果。
(4)可综合代码应该是同步式的设计。

Verilog可综合与不可综合语句汇总

Verilog可综合与不可综合语句汇总

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。

(2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。

(3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

建立可综合模型的原则要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用initial。

(2)不使用#10。

(3)不使用循环次数不确定的循环语句,如forever、while等。

(4)不使用用户自定义原语(UDP元件)。

(5)尽量使用同步方式设计电路。

(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。

(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。

(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。

(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。

对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。

但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。

(10)不能在一个以上的always过程块中对同一个变量赋值。

VHDL教程

VHDL教程

LE2 进位输出 (到 LAB中的下一个逻辑单元) 27
FLEX 系列的级联链
性能优越, 适合扇入大的逻辑功能
“与”级联链
2.4 ns
“或”级联链
LE 1
0.6 ns
LE1 IN [3..0] LUT
IN [3..0]
LUT
LE2 IN [4..7] LUT IN [4..7] LUT
LE2
16位地址译码速度可达 2.4 + 0.6x3=4.2 ns
23
连续布线和分段布线的比较
连续布线 ( Altera 基于查找表(LUT)的 FPGA )
LAB
LE
24
连续布线 = 每次设计重复的可预测性和高性能
FLEX 10K系列FPGA结构图
IOC IOC IOC IOC IOC IOC IOC IOC
. . .
. . .
. . .
. . .
嵌入式 阵列块
• EAB的大小灵活可变 256x8 512x4 2048x1
1024x2
• 通过组合EAB 可以构成更大的模块 • 不需要额外的逻辑单元,不引入延迟, EAB 可配置为深度达2048的存储器 512x4 512x4
256x8 256x8
256x16
512x8
30
FLEX 10K 系列的EAB
数据宽度 8,4,2,1 地址宽度 8,9,10,11
什么是查找表?
• 一个N输入查找表 (LUT,Look Up Table)可以实现N个输入 变量的任何逻辑功能,如 N输入“与”、 N输入“异或” 等。 • 输入多于N个的函数、方程必须分开用几个查找表( LUT) 实现
输入1 输入2 查黑 找盒 表子

VHDL第六讲_VHDL元件例化语句最新版

VHDL第六讲_VHDL元件例化语句最新版
FOR- GENERATE 模式的生成语句
FOR- GENERATE 模优选式文档生成语句的书写格16
其中循环变量的值在每次的循环中都将发生变化;离散范围用来指定 循环变量的取值范围,循环变量的取值将从取值范围最左边的值开场并且 递增到取值范围最右边的值,实际上也就限制了循环的次数;循环变量每 取一个值就要执行一次GENERATE语句体中的并行处理语句;最后FORGENERATE模式生成语句以保存字END GENERATE [标号:];来完毕 GENERATE语句的循环.
u1:nand_2 port map(a,b,y1);--元件例化 u2:nand_2 port map(c,d,y2); u3:nand_2 port map(y1,y2,y); end one;
优选文档
7
例1:利用2输入与非门元件,设计4输入的与 非与非电路.
方法2:将元件声明放在程序包里进展说明
优选文档
19
思考题
设计一位二进制全加器,然后利用forgenerate生成语句实现4位二进制全加器, 并仿真验证设计结果.
优选文档
优选文档
14
1位D触发器的VHDL程序文件: library ieee; use ieee.std_logic_1164.all; entity shift_reg1 is
port(clk:in std_logic; D:in std_logic; Q:out std_logic);
end entity; architecture one of shift_reg1 is begin
end mynand_4; architecture one of mynand_4 is signal y1,y2:std_logic; begin

第6章 基本逻辑电路的VHDL 语言描述

第6章 基本逻辑电路的VHDL 语言描述

En 1 0
dir X 0
数据传输 高阻态 ba
0
1
ab
双向缓冲器的VHDL程序:
library ieee; use ieee.std_logic_1164.all;
entity tri_bi_buff8b is port(en,dir: in std_logic; a: inout std_logic_vector(7 downto 0); b: inout std_logic_vector(7 downto 0)); end entity tri_bi_buff8b; architecture behav of tri_bi_buff8b is begin process(en,a,dir) begin if en='0' and dir='1' then b<=a;
else b<="ZZZZZZZZ"; end if; end process; process(en,b,dir) begin if en='0'and dir='0' then a<=b; else a<="ZZZZZZZZ"; end if; end process; end architecture behav ;
2、码制变换译码器
A B C D 4-10线 译码器 Y[9..0]
D 0 0 0 … … 1 1
C 0 0 0
B 0 0 1 … …
A 0 1 0
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 1 0 0
… …
0 1 0
0 0 1
… …
0 0 0

VHDL

VHDL

1.3 VHDL的作用
HDL打破软、硬件的界限 传统的数字系统设计分为:
硬件设计(硬件设计人员)
软件设计(软件设计人员) 是硬件设计者和 EDA工具之间的界面
EDA工具及 HDL的流行,使电子系 统向集成化、大规模和高速度等方向发 展。 美国硅谷约有80%的 ASIC和 FPGA/CPLD已采用 HDL进行设计。
一般情况下 USE定义区的格式写成
LIBRARY IEEE; USE IEE.STD_LOGIC_1164.ALL; USE IEE.STD_LOGIC_ARITH.ALL; USE IEE.STD_LOGIC_UNSIGNED.ALL;
2.2 实体声明
实体声明:定义系统的输入输出端口
语法:
ENTITY <entity_name> IS Generic Declarations(类属表); Port Declarations(端口表); END <entity_name>; (1076-1987 version) END ENTITY <entity_name> ; ( 1076-1993 version)
子类型声明;常量声明。
END <包名> ; (1076-1987) END PACKAGE BODY <包名> ; (1076-1993)
例:程序包声明
2、 库
含义:存放预先完成的程序包和数据集合体 的仓库,包含了包或包的汇集 格式:LIBRARY 库名; 种类: STD 库(默认库) IEEE库 WORK库(默认库) 面向ASIC的库 用户定义库
硬件描述语言VHDL
1 概述
1.1 什么是VHDL(HDL)?

VHDL除法运算可综合性分析与除法器设计

VHDL除法运算可综合性分析与除法器设计
为 的一 种 描 述 , 不 能 直 接 对 应 成 电路 的 设 计 信 息 。 行 为 描 但
除法器算 法主要 有两种 : 代法与循 环法 。J 迭 。迭 代法
所提供 的商的最 低位 不准 确。循环算 法是 以减法 运算 为基 础 的算 法 , 需要 多个循 环周 期。该算法 的实 现 比较 简单 , 所 需 的硬件资源较 少 , 常利 于芯 片的设计 。通常情 况下 , 非 高
大小需要 比较器 , 求余 需要 减法器 , 数和余 数的 中间结果 商 必须有寄存器存储 , 一次 比较之 前对余 数移位 需移 位器 , 下
时序控制需要状态机 等等 , 因而上述代码 的运 算不可能在 一 个时钟周 期里完成 。部分 F G P A的配套 E A软件提供 除法 D 的运算模块 , 也只能支持直接调用 , 而且对 除数要求必须是 2 的幂 , 不支持把形 如 “ 瑚 =xy 的语 句综合 成 除法模 块 , 。 /” 因
数 取模 , 然后按 照原码 的计算 方法 求 出商 和余 数 , 根据 符 再
2 40 ) 6 0 1
24 0 ; 6 0 1
3 9 54部 队 , .2 1 山东 烟 台
摘要 : 用 V D 对 H L语言编写除法运算 的可 综合性进行 了分 析研究 , 占用资源 量和计 算时延两 个因素综 合考虑 , 从 设
计 了整数除法器 。除法器通过 被除数与除数循 环相减 , 对减 法操作 的次 数进行 记录 , 以此来 确定每一位 上的数 值。
述可 以基 于 不 同的层 次 , 系统 级 , 如 算法 级 , 寄存器 传输 级
( T ) 门级 等等 。 目前大 部分 E A软件 只能综 合 R L或 RL 、 D T

《VHDL硬件描述语言》课程教学大纲

《VHDL硬件描述语言》课程教学大纲

《VHDL硬件描述语言》课程教学大纲课程代码:ABJD0414课程中文名称: VHDL硬件描述语言课程英文名称:Very-High-Speed Integrated Circuit HardwareDescription Language课程性质:必修课程学分数:2学分课程学时数:32学时授课对象:自动化专业本课程的前导课程:电路,模拟电子,C语言程序设计一、课程简介本课程是电类专业的专业基础课,要求学生通过本课程的学习和实验,初步掌握常用EDA工具的使用方法、FPGA的开发技术以及VHDL语言的编程方法。

能比较熟练地使用QuartusII等常用EDA软件对FPGA和CPLD作一些简单电路系统的设计,同时能较好地使用VHDL语言设计简单的逻辑电路和逻辑系统,学会行为仿真、时序仿真和硬件测试技术,为现代EDA工程技术的进一步学习,ASIC器件设计以及超大规模集成电路设计奠定基础。

作为一门专业基础课,除了为现代电子线路课程,软件无线电课程奠定理论和实践方面的基础外,还是其他一些课程的先修课,如微电子导论、现代ASIC设计、硬件描述语言仿真/综合器设计、大规模集成电路设计等。

二、教学基本内容和要求(一)概论介绍现代EDA技术,VHDL概况,介绍自顶向下的系统设计方法以及FPGA和CPLD的基本技术,要求对现代EDA技术及实现工具的使用方法和发展情况有一初步了解。

重点与难点:EDA技术的设计工具(二)EDA设计流程及工具首先介绍基于EDA软件的FPGA/CPLD开发流程和ASIC设计流程,然后分别介绍与这些设计流程中各环节密切相关的EDA工具软件,最后简述QuartusII的基本情况和IP。

重点与难点:EDA仿真设计流程。

(三)FPGA/CPLD结构与应用主要介绍几类常用的大规模可编程逻辑器件的结构和工作原理。

对CPLD的乘积项原理和FPGA的查找表原理分别进行剖析。

最后介绍相关的编程下载和测试技术。

重点与难点:FPGA/CPLD的工作作原理及编程技术。

第九章 VHDL可综合性

第九章 VHDL可综合性
例如,State_type的4个状态值可以分别校编码为“00”,“01”, “10”和“11”。
VHDL类型
(2)整数类型 可综合的整数类型定义总是有界的,例如:
type My_integer is Integer range 0 to 255; subtype Byte_int is Integer range -128 to 127;
对整数类型进行综合时,综合工具首先将其翻译为位矢量,矢量长 度仍取能够满足需要的最短位宽。
建议类型定义时明确指出整数的范围,以便于综合工具进行优化。 否则大部分综合工具按32位处理。
综合后的电路中,整数以矢量形式出现,但通常只能以整个矢量为 单位访问,即不能单独访问每一位。
VHDL类型
(3)数组类型 现在的综合工具都能够处理一维数组,例如: type Word is arry (31 downto 0) of Bit; type My_RAM is array (1023 downto 0 ) of Word;
variable a1 , a2 :bit_vector (1 downto 0); variable a3 : bit; begin wait until clk = ‘1’ and clk’ event ; a1 := data and k1; a2 := data and k2; a3 := a1(0) or a2(1); z <= a3; end process var; end A
以上Std_ulogic的定义实际是对‘0’‘1’等字符进行了重载,由 于这个定义已经成为IEEE标准,因此综合时不会产生额外硬件。而对于 抽象层次更高的Boolean和 State_type则需要进行状态编码。
一般来说,状态编码是把状态值编码为位矢量(如bit_vector), 矢量长度是能够表示所有状态的最短位宽。

VHDL-6

VHDL-6

基于可编程逻辑器件的设计
在芯片上预先制作可编程逻辑单元阵列、 在芯片上预先制作可编程逻辑单元阵列、可编 可编程逻辑单元阵列 程IO单元及可编程连接线,由用户进行编程设计; IO单元及可编程连接线,由用户进行编程设计; 单元 用户设计不考虑电路实现,只考虑逻辑功能实现; 用户设计不考虑电路实现,只考虑逻辑功能实现; 设计可以反复修改,设计周期和风险最低; 设计可以反复修改,设计周期和风险最低; 目前主要采用FPGA器件进行设计。 目前主要采用FPGA器件进行设计。 FPGA器件进行设计
基于可编程逻辑器件的设计
可编程IO单元的设计 可编程IO单元的设计 IO
通过安排锁存器中数据进行IO控制编程; 通过安排锁存器中数据进行IO控制编程; IO控制编程 输出设计需要考虑大驱动能力及相应缓冲设计。 输出设计需要考虑大驱动能力及相应缓冲设计。
FPGA的基本逻辑单元 FPGA的基本逻辑单元
典型的门阵列形式
通道式门阵列 无通道式门阵列
门阵列上的基Leabharlann 逻辑单元标准晶体管阵列:NMOS和PMOS采用共栅配对 标准晶体管阵列:NMOS和PMOS采用共栅配对
门阵列上的基本逻辑单元
直接利用标准晶体管形成基本逻辑
门阵列上的基本逻辑单元
使用晶体管并联以调整驱动能力
门阵列上的基本逻辑单元
设计传输门时,需要将PMOS和对应的NMOS分离开 设计传输门时,需要将PMOS和对应的NMOS分离开 PMOS和对应的NMOS
逻辑单元分区组织, 逻辑单元分区组织,短程连线与长程连线设计
FPGA的可编程连线设计 FPGA的可编程连线设计
可编程连线占用大半逻辑面积, 可编程连线占用大半逻辑面积,运算速度主要受 连线延迟影响;为满足对连线的驱动, 连线延迟影响;为满足对连线的驱动,逻辑单元的 连线必须分区组织,分割为块内连线、小区间连线、 连线必须分区组织,分割为块内连线、小区间连线、 大区间连线和跨区域连线等, 大区间连线和跨区域连线等,各不同连线的互连点 应设置可编程隔离和缓冲驱动。 应设置可编程隔离和缓冲驱动。

VHDL仿真与综合

VHDL仿真与综合

TEXTIO介绍-类型的定义
| type LINE is access string;
z 定义了LINE为存取类型的变量,它表示该 变量是指向字符串的指针,是TEXTIO中 所有操作的基本单元。
z 读文件时,先按行(LINE)读出一行数据, 再对LINE操作来读取各种数据类型的数据。 写文件时,先将各种的数据类型组合成 LINE,再将LINE写入文件。
| 对于一些复杂的HDL设计可能需要这些 软件专业的仿真功能。
HDL仿真软件
逻辑综合
| 综合
z 针对给定的电路应实现的功能和实现此 电路的约束条件,如速度、功耗、成本、 电路类型等,通过计算机的优化处理, 获得一个满足上述要求的电路设计方案。
逻辑综合(续)
| 逻辑综合就是将较高抽象层次的描述自动地转 换成较低抽象层次描述的一种方法。
| 在该程序中,还使用了类型转换函 CONV_STD_VECTOR( )将整数转换为8位的标准类型。 另外,在程序中定义了变量Dlatch,该变量的作用是 将计算结果与预定结果的比较延迟一个时钟周期结果 比较。
HDL仿真软件
| 对设计进行校验仿真,包括布线以前的 功能仿真(前仿真)和布线以后包含延 时的时序仿真(后仿真)
| 目前数字系统设计常用的验证方法:
z 仿真 z 静态时序分析 z 形式验证
仿真
| 也叫动态仿真
| 测试平台目的是提供测试激励
| 测试平台由行为级VHDL描述,实际设计 使用RTL编码
| 测试执行的次数和测试平台的性能对完
成整个设计测试是重要的
测试平台

入 激
设计

结 果 输 出
形式验证
| 通过证明两个设计在结构和功能上是逻 辑等价的来验证设计

Verilog语言的可综合性

Verilog语言的可综合性

V e r i l o g 语言的可综合性可综合的Verilog HDL 语句都是V e r i l o g H D L 标准( I E E E 1 3 6 4 ) 的一个子集,并且因所用工具不同而异。

在设计中不能采用不可综合的语句( 测试代码除外) 。

下面我们讨论一下大部分综合工具都支持的语句,具体到某种工具的特性还要查看说明文档。

对于数据类型、运算符、赋值语句、基本门级元件等的可综合性问题,因为都有固定的规定,这里就不多讨论了。

组合逻辑和时序逻辑的可综合性: 用a s s i g n 语句对w i r e 型变量进行赋值,综合后的结果是组合逻辑电路。

用a l w a y s @ ( 电平敏感变量表) ,即电平敏感的a l w a y s 块描述的电路综合后的结果是组合逻辑电路或电平敏感的锁存器,此时,a l w a y s 块内赋值语句左边的变量是r e g或i n t e g e r 型,块中要避免组合反馈回路,每次执行a l w a y s 块时,在生成组合逻辑的a l w a y s 块中被赋值的所有信号必须都在敏感电平列表中列出,否则在综合时将会为没有列出的信号隐含的产生一个透明的锁存器,这时综合后的电路已不是纯组合电路了。

用a l w a y s @( p o s e d g e c l o c k ) 或a l w a y s @ ( n e g e d g e c l o c k ) 块描述的电路综合为同步时序逻辑电路,设计同步时序逻辑电路的关键是建立描述该电路状态转移的可综合的有限状态机模型,在V e r i l o g H D L语言中最常用的描述同步时序状态机的结构是a l w a y s 和块内的c a s e . i f 语句,除了紧跟在a l w a y s 后的@( p o s e d g e c l o c k ) , @ ( n e g e d g e c l o c k ) 外,a l w a y s 块中不允许其他的@ ( e v e n t ) 语句,目前大多数综合工具不能综合V e r i l o g H D L描述的异步状态机,所以用V e r i l o g 设计的时序电路应该是同步时序电路。

EDA技术及应用 第六章 VHDL设计进阶

EDA技术及应用 第六章 VHDL设计进阶

6.2 双向和三态电路信号赋值
3. 双向端口电路设计
entity tri_state is port ( inx : in std_logic_vector (0 downto 0); outx : out std_logic_vector (0 downto 0); q : inout std_logic_vector (0 downto 0); control : in std_logic );
6.1 作业
4. 课本第三版P153,习题6-8
变量VARIABLE 程序2: 信号SIGNAL ARCHITECTURE one OF sample IS 基本用法 作为电路中信号连线 作为进程中的局部存储 VARIABLE A,B,C : INTEGER; 使用范围 在整个结构体内适用 只能在所定义的进程中 BEGIN C <= A + B; 变量只能在进程中使用 行为特性 在进程的最后才对信 立即赋值 END PROCESS; 号赋值
6.1 作业
3. 课本第三版P131,例6-4
信号SIGNAL 变量VARIABLE PROCESS(CLK) BEGIN 作为电路中信号连线 作为进程中的局部存储 基本用法 D1 A B Q1 IF CLK’EVENT AND CLK = ‘1’ THEN D1 B Q1 A:=D1; 使用范围 在整个结构体内适用 D1 只能在所定义的进程中 D1 D1 D1 Q1 B:=A; 行为特性 在进程的最后才对信 D1 立即赋值 Q1 Q1<=B; D1 D1 END号赋值 IF; D1 D1 D1 D1 END PROCESS;
6.1 作业
ACHITECTURE bhv OF DFF3 IS 1. 课本第三版P131,例6-1 BEGIN 信号SIGNAL 变量VARIABLE PROCESS(CLK) VARIABLE QQ: 作为进程中的局部存储 基本用法 作为电路中信号连线 STD_LOGIC; BEGIN 使用范围 在整个结构体内适用 只能在所定义的进程中 IF CLK’EVENT AND CLK = ‘1’ THEN QQ:=D1; 行为特性 在进程的最后才对信 立即赋值 END IF; 号赋值 END PROCESS; Q1<= QQ; END

VHDL经典教程(精简快速入门版)

VHDL经典教程(精简快速入门版)

3 VHDL语言VHDL: VHSIC Hardware Description Language.3.1 VHDL语言基础3.2 VHDL基本结构3.3 VHDL语句3.4 状态机在VHDL中的实现3.5 常用电路VHDL程序3.6 VHDL仿真3.7 VHDL综合HDL----Hardware Description Language一种用于描述数字电路的功能或行为的语言。

目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。

优点:HDL设计的电路能获得非常抽象级的描述。

如基于RTL(Register Transfer Level)描述的IC,可用于不同的工艺。

HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。

HDL设计的电路类似于计算机编程。

常用的HDL语言:VHDL 、Verilog HDLØVHDL 是美国国防部在20世纪80年代初为实现其高速集成电路硬件VHSIC 计划提出的描述语言;ØIEEE 从1986年开始致力于VHDL 标准化工作,融合了其它ASIC 芯片制造商开发的硬件描述语言的优点,于93年形成了标准版本(IEEE.std_1164)。

Ø1995年,我国国家技术监督局推荐VHDL 做为电子设计自动化硬件描述语言的国家标准。

VHDL 概述:VHDLVHSIC Hardwarter Description Language Very High speed integrated circuit VHSICVHDL优点:Ø覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言;ØVHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解;ØVHDL语言可以与工艺无关编程;ØVHDL语言已做为一种IEEE的工业标准,便于使用、交流和推广。

VHDL语言的不足之处:设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。

VHDL的优缺点

VHDL的优缺点

• 第三点往往在商业领域被提及。 第三点往往在商业领域被提及。 • 综合技术的成熟过程尤如C编译器所走过 综合技术的成熟过程尤如 编译器所走过 的途径一样。一段时期以前,一般C编译器所 的途径一样。 一段时期以前 , 一般 编译器所 产生成的可执行码往往无效, 产生成的可执行码往往无效,以致不如设计者 自己去写机器码来替代。今天, 自己去写机器码来替代。今天,仍有一些作业 需采用低级语言或机器码来写, 需采用低级语言或机器码来写,但大多数代码 必须用高级语言来写, 编译器已在那些不能 必须用高级语言来写 , C编译器已在那些不能 熟练书写机器码来编程序的工程师中广泛使用。 熟练书写机器码来编程序的工程师中广泛使用。
硬件描述语言VHDL
• VHDL(VHSIC Hardware Description Language)是一种 是一种 标准的硬件描述语言, 它是在20世纪 世纪70~80年代中, 由 年代中, 标准的硬件描述语言, 它是在 世纪 年代中 美国国防部资助的VHSIC(Very High Speed Integrated 美国国防部资助的 Circuit)项目开发的产品。 在这个语言首次开发出来时, 项目开发的产品。 在这个语言首次开发出来时, 项目开发的产品 其目标仅是使电路文本化的一种标准, 其目标仅是使电路文本化的一种标准 , 为了使人们采用 文本方式描述的设计, 能够被其他人所理解。 同时, 文本方式描述的设计, 能够被其他人所理解。 同时, 它 也被用来作为模型语言, 用于进行仿真验证模拟。 也被用来作为模型语言, 用于进行仿真验证模拟。
• 第二点是对于工具的逻辑综合有效性的担心, 第二点是对于工具的逻辑综合有效性的担心, 且往往不是没有根据的。 且往往不是没有根据的。 VHDL编译器并不一 编译器并不一 定总能生成令人满意的设计, 定总能生成令人满意的设计, 因为优化的结果 往往依赖于设计的目标。 往往依赖于设计的目标。 编译器采用一定的算 由标准的设计行为决定设计的实现, 法, 由标准的设计行为决定设计的实现, 而 算法从某种角度出发, 沿一定路径进行, 算法从某种角度出发, 沿一定路径进行, 并 不能发现设计中的所有问题。 有时, 不能发现设计中的所有问题。 有时, 当人们 希望按自己的要求来控制设计实现时, 希望按自己的要求来控制设计实现时,没有什 么能够替代人的创造力。 么能够替代人的创造力。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用信号。
下面用一个例子来说明变量与信号的不同综合结果,其源代码如下。图5.14 分别是结构体A和B对应的综合结果。
三、初值
VHDL中有三种初值;由类型或子类型定义可以得到的默认初值,定义对象 时明确指定的初值和进程入口处显示地赋予对象的初值。
以上三种初值的前两种只在仿真时有意义,在综合时将被忽略。第三种形式将 被综合器处理,形成对应电路。在集成电路设计中,复位时赋予各个信号初值 是很有必要的,否则很有可能出现不定态。因此无论在仿真还是在综合时,都 建议使用系统化的方式给信号和变量赋初值,即上述的第三种形式。
(2)整数类型 可综合的整数类型定义总是有界的,例如:
对整数类型进行综合时,综合工具首先将其翻译为位矢量,矢量长度仍取能 够满足需要的最短位宽。如果使用默认的整数类型,大部分综合工具按32位 处理,因此,建议使用于类型定义(subtype)明确指出整数的范围,以便于 综合工具进行优化。如果是负整数,通常编码为正数的补码。综合后的电路
二.VHDL对象
VHDL语言中有三类对象,常量(constant),变量(Variable),信号
(Signal),它们是VHDL程序中的数据的载体。
1.常量
常量仅被计算一次。在很多情况下,可以通过使用常量引导综合器获 得优化的结果在综合过程中,常量被处理的方式很多,主要有下述情况 。 a)当常量被用来描述真值表、ROM等,或被用于信号赋值,常量在综 合时会形成对应的硬件。
有统一的方法解决。一般来说,状态编码是把状态值编码为位矢量(bitVector,Std-ulogic-Vector或Std-logic-vector),矢量长度是能够表示 所有状态的最短位宽。例如,State-type的4个状态值可以分别校编码为 “00”,“01“,”10“和”11”,Boolean类型编码办’0’和’1’。
(4)记录类型
记录类型在定义复杂数据类型时非常方便,能够把不同数据类型的数据组织在一 起统一访问。但是,EDA工业界对综合工具是否应该支持记录类型还没有统一意 见,因此大多数综合工具不提供这种能力或只能把组合了简单数据类型的记录进 行综合。
2.可综合子集
VHDL在 1989年首次公布时,就提供了两个程序包 (package) :Standard 和 TextI(),其中定义了各种预定义数据类型。这些预定义数据类型中,类 型 Integer , Bit , Bit-Vector , Boolean , Character 和子类型 Natural , Positive是可综合的。类型File,Access和Real则不可被综合。
2.关系运算符
关系算符的综合没有统一的方法,综合工具常利用被比较数的特点作特定的优化 。图5.16是对”<”运算符综合的例子。
3.一元算术运算符
一元算术运算符有三个,即十,一和abs(取绝对值)。对前两个算符,综合工
具大都可以用组合逻辑线路实现,如图5.17的例子。abs算符的处理比较复杂 ,大部分综合工具尚不能提供支持。
一、
VHDL类型
VHDL 语言中的对象有常量 (constant) 、信号 (signal) 和变量 (variable) 三种
,它们都必须定义为如下某种类型。类型定义说明了对象可以使用的数值,并隐 含表示了可以对其进行的操作。
1.可综合类型
面向综合的建摸都支持这样一些类型:枚举类型、整数、一维数组。比较 先进的综合工具现在一般也可以处理二维数组和简单的记录类型。
5.&运算符
&运算行为连接运算,通散用于把一组对象捆绑在一起。由于直到1992年VHDL才 引入移位算符,所以也常用连接运算实现移位运算。综合时,一般是在信号之间 提供额外的连线实现这一运算。
6.移位运算
移位运算符是1992年VHDL再次修订后引入的特征,在综合时有两种处理方式。 对于经过锁存的矢量对象,可以在锁存器之间引入附加的数据通路来实现;对 于不需要锁存的矢量对象,处理方式与&运算符相同。
第六讲 VHDL的可综合性
6.1
VHDL语言结构向硬件的映射
•EDA工业界普遍认为,有效的VHDL建模风格是控制综合结 果最为有力的手段。 •为了建立有效的VHDL代码,设计师应了解VHDL语言结构与 综合结果的关系。
•应该指出的是,由于综合算法的不同,对于同样的硬件描
述,不同的CAD综合工具可能会得到不同的综合结果。
VHDL语言在创立时,主要是为了满足仿真的需要。自从VHDL被用于综合以来, 都是对VHDL的子集进行处理,这就是所谓的可综合的VHDL子集。不同综合工具 支持的可综合子集不尽相同,通常有如下要求:
(1)延时描述(after语句、wait for语句)等被忽略。
仿真时,为了具备一定精度,往往在源代码中含有延时语句。这些延时语
句信况比较复杂,有时是最大延时约束,有时是典型经验值,还有些是人 为加入的,所以现在所有的综合工具都忽略源代码中的延时语句。有些工 具干脆把这些语句处理为语法错误。大部分工具忽略延时语句后,给出警 告提示。而综合时间约束则在综合过程中通过综合命令输入。
(2)支持有限类型。
VHDL具有丰富的类型定义,但是有些类型不具备硬件对应物。不可能被综合,
(1)核举类型
枚举类型通过列出所有可能的取值来定义,例如:
以上Std_ulogic的定义实际是对‘0’‘1‘等字符进行了重载(overload),由
于这个定义已经成为IEEE标淮,并且描述的是电路连线的状态,因此综合
时并不会产生额外硬件。而对于抽象层次更高的BOOLEAN和State-type, 则需要进行状态编码,这也是枚举类型在综合时最主要的问题,现在还没
2004年,IEEE批准了一种修订标准IEEE 1076.6-2004,该标准提供了
VHDL RTL综合子集的重要扩展。新改进版包括VHDL几乎每一个特性,
能被用于在RTL级进行建模并综合。此外还包括触发器和锁存器建模 的扩展语义导引。用户将能够以多种不同风格编写一个RTL模型,每
一种都符合标准。此外,这项标准提供了极为重要的保证,即保证模
如文件类型。通常可综合类型包括枚举类型(包括自定义状态、预定义Bit类
型和IEEE 9值逻辑类型等)、整数、数组等。其余像浮点数类型、记录类型 等只得到有限支持.而时间类型等完全不能被综合。
(3)进程的书写要服从一定的限制。
在仿真时,VHDL进程可以任意书写。而在综合时,通常要求一个进程内只能
有一个有效时钟,有的工具还有进一步的限制。
五、顺序语句
顺序语句只能在进程中出现,而且其出现顺序直接影响到硬件行为。VHDL能够描述非
常复杂的数字电路,很大程度上是由于具有丰富的顺序语句。
1.变量赋值
变量的引入使得VHDL具备了极强的造型能力,能够以类似软件编程的方式描述 硬件,特别是在行为综合时,如果没有变量,则描述复杂的ASIC行为几乎是不 可能的。
3.if语句
if语句是最频繁出现的条件语句。在综合时,if的处理分三种情况,下面分 别讨论。
4.二元算术运算符
现在的综合工具,特别是高层次综合工具,都能够直接把十,一,×运算综合 为相应的运算线路,部分工具也支持除法运算。mod和rem算符通常不被综合工具支持
。如果使用IEEE颁布的标准算术运算程序包Std-logic-arith,那么还可以直接描述对
Bit或Std-logic类型的标量和矢量对象进行算术运算的电路,并进行综合。通常在综 合过程中,综合器先把运算符映射为相应的加法器等综合库提供的专用运算部件,然 后进行优化,如果某些运算可以用简单线路实现,综合器则用简单线路取代专用运算 部件。
(4)可综合代码应该是同步式的设计。
现在的EDA综合工具普遍推荐使用同步式设计风格,即整个芯片电路的
状态只能在时钟信号有效时发生改变,也就是说,电路状态不会在仅有 数据信号变化而时钟处于无效状态时改变,并且电路中的时钟信号应该
都是从同一主时钟经过分频或其他运算得到。当然设计师也可以尝试其
它风格的设计,如异步式电路,但这时综合工具产生的结果往往还需要 设计师的进一步优化或调整
四、运算符
1.逻辑运算符
逻辑运算符包括表5.4中的not和二元逻辑运算符,其操作数可以是bit和 Std_logic等类型的标量或同长度的矢量对象,也可以是Boolean类型的对象。 这些算符的综合是直截了当的,直接调用逻辑门单元实现即可,但经过优化后 ,这些算符可能被合并或改变。图5.15是对下达VHDL代码中逻辑运算符综合的 结果。
变量在综合时要根据整体代码决定其处理方式,主要有以下几种方式:①用寄存 器锁存变量,也就是说,变量经过综合后形成了寄存器,但是生命期不重叠的变 量可以共享一个硬件寄存器;②在逻辑优化过程中被消去,即没有硬件对应物; ③作为一根硬件连线出现(由组合逻辑输出)。
2.信号赋值
信号只能在同步语句(显式或隐含的wait语句)之后改变状态。通常,综合后的信 号赋值语句会被化简为最简形式。综合工具处理信号的方式类似于变量,但有以 下区别:①如果信号需要寄存器锁存,那么被锁存的信号能与其他信号共享硬件 寄存器;②比较先进的综合工具可以按照设计师的要求,决定是否保持综合前后 信号的一致性;③出现在形如if CLK=’1’and CLK‘Event和then· · end if之间 或wait until CLK=‘0’and CLK’Event这样的时钟沿同步语句之后的信号都要被 锁存,而变量则不一定被锁存。
型在众多接受RTL输入的不同工具之间的便携性。”这项标准化将最 终帮助RTL确认。
主要支持以下类型综合: a) BIT, BOOLEAN, BIT_VECTOR b) CHARACTER and STRING c) INTEGER d) STD_ULOGIC, STD_ULOGIC_VECTOR, STD_LOGIC, and STD_LOGIC_VECTOR e) SIGNED and UNSIGNED
相关文档
最新文档