EDA技术及应用黑龙江大学物理科学与技术学院 蔡喜平教材:姜雪松,刘东升,硬件描述语言 — VHDL教程,西安交通大学出版社,第 1版,2004年第一章 绪 论
1.1 EDA的基本概念
EDA – Electronic Design Automation
以计算机为工作平台、以 EDA软件工具为开发环境,以电子系统设计为应用方向的电子产品自动化设计过程。
PSPICE,PROTEL,ICAP,Workbench
EDA软件工具:
MAX+plus II
Quartus II For ASIC & PLD
ASIC – Application Specific Integrated Circuit
专用集成电路
PLD – Programmable Logic Device
可编程逻辑器件
-Traditional EDA
1.2 ASIC & PLD
ASIC,为专门用途设计的集成电路
Full Custom 全定制
Semi Custom 半定制
PLD
1.3 PLD的发展概述
1st Generation,二十世纪七十年代初期
PROM – Programmable Read-Only Memory
可编程只读存储器:只能写一次,不可擦除或重写
EPROM – Erasable PROM
E2PROM – Electrically Erasable PROM
2nd Generation:二十世纪七十年代中期
PLA – Programmable Logic Array
3rd Generation:二十世纪七十年代末期 – AMD公司
PAL – Programmable Array Logic
4th Generation:二十世纪八十年代初期 – Lattice公司
GAL – Generic Array Logic
电可擦写,可重复编程,可设置加密位特点,PAL 和 GAL结构简单,易于编程,但规模小,难以实现复杂的逻辑功能
5th Generation:二十世纪八十年代中期 – Altera公司
EPLD – Erasable PLD
集成度比 GAL高很多
6th Generation:
FPGA – Field Programmable Gate Array 现场可编程门阵列
1985年,Xilinx公司推出
CPLD – Complex Programmable Logic Device
复杂可编程逻辑器件
20世纪 90年代初期出现
1.4 CPLD & FPGA
1.4.1 CPLD和 FPGA的基本结构可编程
I / O
单元可编程连线阵列可编程
I / O
单元可 编 程 逻 辑 单 元
CPLD的基本结构框图
1,可编程逻辑单元由与阵列,或阵列,触发器和多路选择器组成
2,可编程连线阵列
3、可编程 I/O单元
4、辅助模块
JTAG(联合测试组)编程模块:用于在系统编程
全局时钟、全局复位 /置位、全局使能模块
1.4.2 CPLD和 FPGA的异同
结构不同:
CPLD基于乘积项结构; FPGA基于查找表加寄存器结构
FPGA中触发器数量比 CPLD中丰富:
CPLD适合于完成组合逻辑电路
FPGA适合于完成时序逻辑电路
CPLD的速度比 FPGA快
FPGA的集成度比 CPLD高,具有更复杂的连线结构和逻辑实现
FPGA比 CPLD在编程上具有更大的灵活性
CPLD比 FPGA使用起来更方便,保密性更强
CPLD适合纯组合逻辑系统的设计
FPGA适合处理复杂的协议,或在设计中使用大量时序元件的情况
1.4.3 Altera公司常用 CPLD/FPGA系列产品分类高密度 FPGA
低成本 FPGA
CPLD
APEX系列
Stratix系列
FLEX系列
ACEX系列
Cyclone系列
Classic系列
MAX系列
EP610,6101,910,9101,1810
300~900门,工作频率 100MHz,“零功率”模式
EPM3032A,3064A,3128A,3256A
600~12000门,工作频率 227.3MHz
EPF10K10,20,30,40,50
10000~250000门,工作频率 204MHz,I/O
兼容 PCI总线,提供锁相环
EP1K10,30,50,100
10000~150000门,I/O兼容 PCI总线,提供锁相环
2910~20060门,提供锁相环
300000~1500000门,最多可提供 4个锁相环高达 79040个逻辑单元,7.5Mb的 RAM,
提供 DSP模块,工作频率高达 420MHz
1.5 Quartus II 软件开发流程设计输入综合布局布线时序分析仿真编程和配置功耗分析调试工程更改管理时序逼近
1.6 Quartus II的使用
1.6.1 设计输入方式原理图输入方式文本输入方式模块输入方式
EDA设计输入工具
1.6.1.1 原理图和图表模块编辑
1.6.1.1.1内附逻辑函数存放位置,\altera\quartus7\libraries\
包含,primitives,others和 megafunctions
1,基本逻辑函数 (Primitives)
buffer:缓冲逻辑单元
logic:基本逻辑单元
other,vcc,gnd等
pin,input,output等
Storage:存储单元
2,参数式函数 (megafunctions)
arithmetic,累加器,加法器,乘法器和 LPM算数函数
gates:多路复用器,LPM门函数
I/O:时钟数据恢复 (CDR),锁相环 (PLL),双数据速率 (DDR)等
storage:存储器,移位寄存器,LPM存储器函数等
3,其它函数 (others)
包含常用逻辑电路
1.6.1.1.2原理图编辑流程
1,建立新工程
File 菜单下的,New Project wizard…”
2) 选择需要加入的文件和库
3) 选择目标器件
1) 指定工程名称
4) 选择第三方 EDA工具
5) 结束设置
2,建立文件单击,File”菜单下的,New”命令在,Device Design Files”中选,Block Diagram/Schematic File”
3,放置元件符号例,primitives? logic? and2
放入 input 和 output
例,primitives? pin? input
4,连接各元器件并命名将输入信号分别命名为 A,B,输出信号命名为 C
5,保存文件
6,编译工程
Processing? Start Compilation
7,建立矢量波形文件
File? New? Other Files? Vector Waveform File
8,添加引脚或节点双击 Name下方的空白处,弹出,Insert Node or Bus”;
9,编辑输入信号并保存文件例:设置 A为时钟信号; B为高电平
10,仿真
功能仿真:忽略延时的仿真;验证逻辑的正确性
时序仿真:加上延时以后的仿真;验证时序是否符合要求
1) 功能仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode”下拉菜单中选择,Functional”;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
2)时序仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode”下拉菜单中选择,Timing”;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
11,引脚分配目的:对所设计的工程进行硬件测试,将输入 /输出信号锁定在器件确定的引脚上
Assignments? Pins
12,下载验证
1) 编译
Processing? Start Simulation
2) 配置下载电缆
1.6.1.2 文本输入方式
VHDL,VerilogHDL或 AHDL
1.6.1.3 混合编辑法第二章 VHDL的基本模型结构硬件描述语言:通过输入对电路的文本描述而完成对数字电路的设计的计算机语言
AHDL –AlteraHardwareDescription Language
VHDL – VHSICHardwareDescription Language
VHSIC – veryhighspeedintegratedcircuit
一个完整的 VHDL程序通常包括:
库 ( Library),程序包 ( Package),实体说明 ( Entity Declaration)
结构体 ( Architecture Body) 和配置 (Configuration)
§ 2.1 设计实体实体:完整系统,电路板,芯片,逻辑单元或门电路实体说明结构体设计实体图 2.1 设计实体的组成例:程序 2.1 设计一个二输入或门电路
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity or_gate is
port(a,b:in bit;
c,out bit);
end or_gate;
architecture cai of or_gate is
begin
c<=a or b;
end cai;
步骤:
1,建立新工程
File 菜单下的,New Project wizard…”
工程名 or_gate
1) 指定工程名称
2) 选择需要加入的文件和库
3) 选择目标器件
4) 选择第三方 EDA工具
5) 结束设置
Cyclone II ; EP2C8T144C8
2,建立文件单击,File”菜单下的,New”命令在,Device Design Files”中选,VHDL File”
3,输入代码
4,保存文件
5,编译工程
Processing? Start Compilation
6,建立矢量波形文件
File? New? Other Files? Vector Waveform File
7,添加引脚或节点双击 Name下方的空白处,弹出,Insert Node or Bus” ;
8,编辑输入信号并保存文件例:设置 A为时钟信号; B为高电平
10,仿真
功能仿真:忽略延时的仿真;验证逻辑的正确性
时序仿真:加上延时以后的仿真;验证时序是否符合要求
1) 功能仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode” 下拉菜单中选择,Functional” ;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
2)时序仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode” 下拉菜单中选择,Timing” ;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
§ 2.2 实体说明目的:说明实体的外部特征,即用来描述数字系统或单元与其它数字系统或单元之间的连接关系 。
结构:
entity 实体名 is
[类属说明 ;]
[端口说明 ;]
[实体说明部分 ;]
[实体语句部分 ;]
end [entity] 实体名 ;
2.2.1 类属说明用于为设计实体和其外部环境通信的静态信息提供通道,可定义端口的大小,实体中元件的数目以及实体的定时特性等书写结构:
generic ([costant]参数名,[in]子类型标识 [:=静态表达式 ]; … );
如:
generic (delay:time:=1ns);
例,library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity or_gate is
generic (delay,time:=1ns);
port(a,b:in bit;
c,out bit);
end or_gate;
architecture cai of or_gate is
begin
c<=a or b after( delay);
end cai;
表示 a和 b两个信号相或后,经过参数 delay指定的延迟时间 1ns后才送到端口 c上 。
2.2.2 端口说明
用于为设计实体和其外部环境的动态通信提供通道 。
结构:
port ([signal]端口名,[模式 ]子类型标识 [:=静态表达式 ]; … ) ;
port(a,b:in bit; c,out bit);例:
a,b,端口名 —— 端口的标识符
in,out,模式 —— 表示数据通过该端口的流动方向
bit:数据类型 —— 说明经过该端口的数据类型
标识符的命名规则:
( 1) 由字母,数字和下划线组成;
( 2) 第一个字符必须是字母;
( 3) 下划线不能连用;
( 4) 最后一个字符不能是下划线;
( 5) 命名不能与保留字一样 。
端口模式:输入,输出,双向,缓冲和链接输入模式 (in):数据和信号只能单方向流入实体端口,不能从实体端口输出;
输出模式 (out):数据和信号只能但方向通过实体端口向外流出;
缓冲模式 (buffer):端口数据或信号既可以向设计实体外部作用而流出端口,同时也可以将流出端口的数据或信号引回到被设计实体,用于实现内部反馈;
双向模式 (inout):数据既可以从实体外部流入实体,也可以由设计实体内向实体外部作用;
链接模式 (linkage):端口无指定方向,可以与任意方向的信号相连 。
数据类型
bit,bit_vector,Boolean,integer,枚举类型和物理类型等最常用类型:
IEEE std_logic_1164所给定的标准逻辑类型 std_logic,std_logic_vector
使用 std_logic和 std_logic_vector时,必须在实体说明前加上语句:
library ieee;
useieee.std_logic_1164.all;
VHDL类型类型 取值 书写规则 例子
BIT 0或 1 单引号 ‘ 0’,‘ 1’
STD_LOGIC U,X,0,1,Z,W,L,H 单引号 ‘ X’,‘ 0’,‘ 1’
INTEGER 整数 无引号 4095,-120
BIT_VECTOR 0和 1的多个实例 双引号? 100110?
STD_LOGIC_V
ECTOR
U,X,0,1,Z,W,L,
H的多个实例 双引号
1001100?
00ZZ11?
ZZZZZZZZ?
‘U’ – 未初始化; ‘ X’ -强未知; ‘ 0’ -强 0; ‘ 1’ - 强 1
‘Z’ – 高阻; ‘ W’ -弱未知; ‘ L’ – 弱 0; ‘ H’ -弱 1;
‘ -’ – 无关态
2.2.3实体说明部分用于定义该设计实体接口中的公共信息,如定义新的数据类型和常量定义例,library ieee;
use ieee.std_logic_1164.all;
entity example is
port(a:in std_ulogic;
b:in std_ulogic;
c,out std_ulogic);
type colour is array (6 downto 0) of std_ulogic;
end example;
2.2.4实体语句部分是设计实体接口的共同部分,它们只能由如下并行语句构成:
并行断言语句;
并行过程调用语句;
被动进程语句 。
1.1 EDA的基本概念
EDA – Electronic Design Automation
以计算机为工作平台、以 EDA软件工具为开发环境,以电子系统设计为应用方向的电子产品自动化设计过程。
PSPICE,PROTEL,ICAP,Workbench
EDA软件工具:
MAX+plus II
Quartus II For ASIC & PLD
ASIC – Application Specific Integrated Circuit
专用集成电路
PLD – Programmable Logic Device
可编程逻辑器件
-Traditional EDA
1.2 ASIC & PLD
ASIC,为专门用途设计的集成电路
Full Custom 全定制
Semi Custom 半定制
PLD
1.3 PLD的发展概述
1st Generation,二十世纪七十年代初期
PROM – Programmable Read-Only Memory
可编程只读存储器:只能写一次,不可擦除或重写
EPROM – Erasable PROM
E2PROM – Electrically Erasable PROM
2nd Generation:二十世纪七十年代中期
PLA – Programmable Logic Array
3rd Generation:二十世纪七十年代末期 – AMD公司
PAL – Programmable Array Logic
4th Generation:二十世纪八十年代初期 – Lattice公司
GAL – Generic Array Logic
电可擦写,可重复编程,可设置加密位特点,PAL 和 GAL结构简单,易于编程,但规模小,难以实现复杂的逻辑功能
5th Generation:二十世纪八十年代中期 – Altera公司
EPLD – Erasable PLD
集成度比 GAL高很多
6th Generation:
FPGA – Field Programmable Gate Array 现场可编程门阵列
1985年,Xilinx公司推出
CPLD – Complex Programmable Logic Device
复杂可编程逻辑器件
20世纪 90年代初期出现
1.4 CPLD & FPGA
1.4.1 CPLD和 FPGA的基本结构可编程
I / O
单元可编程连线阵列可编程
I / O
单元可 编 程 逻 辑 单 元
CPLD的基本结构框图
1,可编程逻辑单元由与阵列,或阵列,触发器和多路选择器组成
2,可编程连线阵列
3、可编程 I/O单元
4、辅助模块
JTAG(联合测试组)编程模块:用于在系统编程
全局时钟、全局复位 /置位、全局使能模块
1.4.2 CPLD和 FPGA的异同
结构不同:
CPLD基于乘积项结构; FPGA基于查找表加寄存器结构
FPGA中触发器数量比 CPLD中丰富:
CPLD适合于完成组合逻辑电路
FPGA适合于完成时序逻辑电路
CPLD的速度比 FPGA快
FPGA的集成度比 CPLD高,具有更复杂的连线结构和逻辑实现
FPGA比 CPLD在编程上具有更大的灵活性
CPLD比 FPGA使用起来更方便,保密性更强
CPLD适合纯组合逻辑系统的设计
FPGA适合处理复杂的协议,或在设计中使用大量时序元件的情况
1.4.3 Altera公司常用 CPLD/FPGA系列产品分类高密度 FPGA
低成本 FPGA
CPLD
APEX系列
Stratix系列
FLEX系列
ACEX系列
Cyclone系列
Classic系列
MAX系列
EP610,6101,910,9101,1810
300~900门,工作频率 100MHz,“零功率”模式
EPM3032A,3064A,3128A,3256A
600~12000门,工作频率 227.3MHz
EPF10K10,20,30,40,50
10000~250000门,工作频率 204MHz,I/O
兼容 PCI总线,提供锁相环
EP1K10,30,50,100
10000~150000门,I/O兼容 PCI总线,提供锁相环
2910~20060门,提供锁相环
300000~1500000门,最多可提供 4个锁相环高达 79040个逻辑单元,7.5Mb的 RAM,
提供 DSP模块,工作频率高达 420MHz
1.5 Quartus II 软件开发流程设计输入综合布局布线时序分析仿真编程和配置功耗分析调试工程更改管理时序逼近
1.6 Quartus II的使用
1.6.1 设计输入方式原理图输入方式文本输入方式模块输入方式
EDA设计输入工具
1.6.1.1 原理图和图表模块编辑
1.6.1.1.1内附逻辑函数存放位置,\altera\quartus7\libraries\
包含,primitives,others和 megafunctions
1,基本逻辑函数 (Primitives)
buffer:缓冲逻辑单元
logic:基本逻辑单元
other,vcc,gnd等
pin,input,output等
Storage:存储单元
2,参数式函数 (megafunctions)
arithmetic,累加器,加法器,乘法器和 LPM算数函数
gates:多路复用器,LPM门函数
I/O:时钟数据恢复 (CDR),锁相环 (PLL),双数据速率 (DDR)等
storage:存储器,移位寄存器,LPM存储器函数等
3,其它函数 (others)
包含常用逻辑电路
1.6.1.1.2原理图编辑流程
1,建立新工程
File 菜单下的,New Project wizard…”
2) 选择需要加入的文件和库
3) 选择目标器件
1) 指定工程名称
4) 选择第三方 EDA工具
5) 结束设置
2,建立文件单击,File”菜单下的,New”命令在,Device Design Files”中选,Block Diagram/Schematic File”
3,放置元件符号例,primitives? logic? and2
放入 input 和 output
例,primitives? pin? input
4,连接各元器件并命名将输入信号分别命名为 A,B,输出信号命名为 C
5,保存文件
6,编译工程
Processing? Start Compilation
7,建立矢量波形文件
File? New? Other Files? Vector Waveform File
8,添加引脚或节点双击 Name下方的空白处,弹出,Insert Node or Bus”;
9,编辑输入信号并保存文件例:设置 A为时钟信号; B为高电平
10,仿真
功能仿真:忽略延时的仿真;验证逻辑的正确性
时序仿真:加上延时以后的仿真;验证时序是否符合要求
1) 功能仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode”下拉菜单中选择,Functional”;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
2)时序仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode”下拉菜单中选择,Timing”;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
11,引脚分配目的:对所设计的工程进行硬件测试,将输入 /输出信号锁定在器件确定的引脚上
Assignments? Pins
12,下载验证
1) 编译
Processing? Start Simulation
2) 配置下载电缆
1.6.1.2 文本输入方式
VHDL,VerilogHDL或 AHDL
1.6.1.3 混合编辑法第二章 VHDL的基本模型结构硬件描述语言:通过输入对电路的文本描述而完成对数字电路的设计的计算机语言
AHDL –AlteraHardwareDescription Language
VHDL – VHSICHardwareDescription Language
VHSIC – veryhighspeedintegratedcircuit
一个完整的 VHDL程序通常包括:
库 ( Library),程序包 ( Package),实体说明 ( Entity Declaration)
结构体 ( Architecture Body) 和配置 (Configuration)
§ 2.1 设计实体实体:完整系统,电路板,芯片,逻辑单元或门电路实体说明结构体设计实体图 2.1 设计实体的组成例:程序 2.1 设计一个二输入或门电路
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity or_gate is
port(a,b:in bit;
c,out bit);
end or_gate;
architecture cai of or_gate is
begin
c<=a or b;
end cai;
步骤:
1,建立新工程
File 菜单下的,New Project wizard…”
工程名 or_gate
1) 指定工程名称
2) 选择需要加入的文件和库
3) 选择目标器件
4) 选择第三方 EDA工具
5) 结束设置
Cyclone II ; EP2C8T144C8
2,建立文件单击,File”菜单下的,New”命令在,Device Design Files”中选,VHDL File”
3,输入代码
4,保存文件
5,编译工程
Processing? Start Compilation
6,建立矢量波形文件
File? New? Other Files? Vector Waveform File
7,添加引脚或节点双击 Name下方的空白处,弹出,Insert Node or Bus” ;
8,编辑输入信号并保存文件例:设置 A为时钟信号; B为高电平
10,仿真
功能仿真:忽略延时的仿真;验证逻辑的正确性
时序仿真:加上延时以后的仿真;验证时序是否符合要求
1) 功能仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode” 下拉菜单中选择,Functional” ;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
2)时序仿真
Assignments? Settings? Simulator Settings;
在,Simulation mode” 下拉菜单中选择,Timing” ;
Processing? Generate Functional Simulation Netlist;
Processing? Start Simulation
§ 2.2 实体说明目的:说明实体的外部特征,即用来描述数字系统或单元与其它数字系统或单元之间的连接关系 。
结构:
entity 实体名 is
[类属说明 ;]
[端口说明 ;]
[实体说明部分 ;]
[实体语句部分 ;]
end [entity] 实体名 ;
2.2.1 类属说明用于为设计实体和其外部环境通信的静态信息提供通道,可定义端口的大小,实体中元件的数目以及实体的定时特性等书写结构:
generic ([costant]参数名,[in]子类型标识 [:=静态表达式 ]; … );
如:
generic (delay:time:=1ns);
例,library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity or_gate is
generic (delay,time:=1ns);
port(a,b:in bit;
c,out bit);
end or_gate;
architecture cai of or_gate is
begin
c<=a or b after( delay);
end cai;
表示 a和 b两个信号相或后,经过参数 delay指定的延迟时间 1ns后才送到端口 c上 。
2.2.2 端口说明
用于为设计实体和其外部环境的动态通信提供通道 。
结构:
port ([signal]端口名,[模式 ]子类型标识 [:=静态表达式 ]; … ) ;
port(a,b:in bit; c,out bit);例:
a,b,端口名 —— 端口的标识符
in,out,模式 —— 表示数据通过该端口的流动方向
bit:数据类型 —— 说明经过该端口的数据类型
标识符的命名规则:
( 1) 由字母,数字和下划线组成;
( 2) 第一个字符必须是字母;
( 3) 下划线不能连用;
( 4) 最后一个字符不能是下划线;
( 5) 命名不能与保留字一样 。
端口模式:输入,输出,双向,缓冲和链接输入模式 (in):数据和信号只能单方向流入实体端口,不能从实体端口输出;
输出模式 (out):数据和信号只能但方向通过实体端口向外流出;
缓冲模式 (buffer):端口数据或信号既可以向设计实体外部作用而流出端口,同时也可以将流出端口的数据或信号引回到被设计实体,用于实现内部反馈;
双向模式 (inout):数据既可以从实体外部流入实体,也可以由设计实体内向实体外部作用;
链接模式 (linkage):端口无指定方向,可以与任意方向的信号相连 。
数据类型
bit,bit_vector,Boolean,integer,枚举类型和物理类型等最常用类型:
IEEE std_logic_1164所给定的标准逻辑类型 std_logic,std_logic_vector
使用 std_logic和 std_logic_vector时,必须在实体说明前加上语句:
library ieee;
useieee.std_logic_1164.all;
VHDL类型类型 取值 书写规则 例子
BIT 0或 1 单引号 ‘ 0’,‘ 1’
STD_LOGIC U,X,0,1,Z,W,L,H 单引号 ‘ X’,‘ 0’,‘ 1’
INTEGER 整数 无引号 4095,-120
BIT_VECTOR 0和 1的多个实例 双引号? 100110?
STD_LOGIC_V
ECTOR
U,X,0,1,Z,W,L,
H的多个实例 双引号
1001100?
00ZZ11?
ZZZZZZZZ?
‘U’ – 未初始化; ‘ X’ -强未知; ‘ 0’ -强 0; ‘ 1’ - 强 1
‘Z’ – 高阻; ‘ W’ -弱未知; ‘ L’ – 弱 0; ‘ H’ -弱 1;
‘ -’ – 无关态
2.2.3实体说明部分用于定义该设计实体接口中的公共信息,如定义新的数据类型和常量定义例,library ieee;
use ieee.std_logic_1164.all;
entity example is
port(a:in std_ulogic;
b:in std_ulogic;
c,out std_ulogic);
type colour is array (6 downto 0) of std_ulogic;
end example;
2.2.4实体语句部分是设计实体接口的共同部分,它们只能由如下并行语句构成:
并行断言语句;
并行过程调用语句;
被动进程语句 。