第一篇:EDA期末复习总结1
面向FPGA的开发流程
综合:由高层次描述自动转换为低层次描述的过程。是EDA技术的核心。
综合器:能够自动将一种设计表示形式向另一种设计表示形式转换的计算机程序。Xilinx公司推出FPGA;Altera公司推出EPLD,Lattice公司提出CPLD和ISP。
VHDL程序的基本结构:库、程序包,实体,结构体,进程,配置。VHDL的本质:并行语句。
不完整IF语句形成时序逻辑电路,完整IF语句形成组合逻辑电路。
常用逻辑门符号与现有国标符号的对照:
第三章VHDL的基础
3.1 VHDL基本语法
实体:描述器件的端口构成及信号端口的基本性质。表达式:entity e_name is port(p_name:port_m data_type;
„„
p_namei:port_mi data_type); end entity e_name;
结构体:描述电路器件的内部逻辑功能和电路结构。
表达式:architecture arch_name of e_name is [说明语句] „„定义或说明数据对象、数据类型、元件调用声明 begin(功能表述语句)end architecture arch_name;
一个可综合的、完整的VHDL程序结构必须包含实体和结构体两个最基本的语言结构。把一个完整的可综合的VHDL程序设计称为设计实体,而其程序代码常被称为VHDL的RTL描述。
4种端口模式:IN,OUT,INOUT,BUFFER。
4种数据类型:integer(整数),boolean(逻辑),std_logic,bit。bit的取值范围是‘1’和‘0’,可以参与逻辑运算或算术运算,其结果仍是位的数据类型。
赋值符号“<=”:
例如y<=a,表示输入端口a的数据向输出端口y传输,或信号a向信号y赋值。赋值操作并非立即发生,而要经历一个模拟器的最小分辨时间δ,δ可以看作实际电路存在的固有延时量。“<=”两边的信号的数据类型必须一致。
数据比较符号“=”:
例如s=‘0’,“=”没有赋值的含义,只是一种数据比较符号。S=‘0’输出结果的数据类型是布尔数据类型BOOLEAN,BOOLEAN数据类型取值是TRUE(真)和FALSE(伪),VHDL仿真器和综合器分别用‘1’和‘0’表达TRUE和FALSE,布尔数据不是数值,只能用于逻辑操作或条件判断。
7种逻辑操作符:and与、or或、not非、nand与非、nor或非、xor异或、xnor同或。
逻辑操作符所要求的操作数的数据类型有3种,即bit、boolean和std_logic。
条件语句:用IF_THEN_ELSE表示VHDL顺序语句。
IF语句表达式:if 条件句 then 顺序语句 else 顺序语句 end if
WHEN_ELSE 条件信号赋值语句:一种并行赋值语句
表达式:赋值目标<=表达式 WHEN 赋值条件 ELSE 例:z<= a when p1=’1’ else
表达式 WHEN 赋值条件 ELSE b when p2=’1’ else
„ c;
表达式; 条件信号赋值语句的第一句具有最高赋值优先。
进程语句:由Process引导的语句: 表达式:Process(a,b,s)
在VHDL中,所有合法的顺序语句都必须放入进程语句中。在结构体中,可以有很多进程语句,所有的进程语句都是并行语句,而由任一进程Process引导的语句结构属于顺序语句。进程语句定义的是变量。描述数字电路时,推荐使用Process语句。
文件取名和存盘
文件名可以由设计者任意给定,但文件后缀扩展名必须是“.vhd”,建议程序的文件名尽可能与该程序的实体名一致,文件名原则上不分大小写,但推荐用小写。
3.2 时序电路描述
VHDL主要通过对时序器件功能和逻辑行为的描述,而非结构上的描述使得计算机综合出符合要求的时序电路。
标准逻辑位数据类型STD_LOGIC:
STD_LOGIC定义:TYPE STD_LOGIC IS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)
使用库和程序包的一般定义表达式: LIBRARY <设计库名>;
USE <设计库名>.<程序包名>.ALL;
信号定义:signal q1:std_logic 数据对象:信号(signal)、变量(variable)、常量(constant)
信号属性函数:EVENT。所谓信号属性函数是用来获得信号行为信息的函数。测定信号的跳变情况:<信号名>’EVENT 上升沿检测表式为:<信号名>’EVENT AND <信号名>=’1’ 时钟上升沿检测表式为:clk’event and clk=‘1’ 确保clk的变化是一次上升沿的变化:
if clk'event and(clk='1')and(clk'last_value='0')if clk='1' and clk'last_value='0' 3.3
※CASE语句:
case语句属于顺序语句,因此必须放在进程语句中使用。
一般表达式:case <表达式> is when <选择值或标识符>=><顺序语句>;„;<顺序语句>;when <选择值或标识符>=><顺序语句>;„;<顺序语句>;„
when others=><顺序语句>;--一般用null,表示不作任何操作。end case;
并置操作符&:表示将操作数或是数组合并起来形成新的数组。如abc<=a&b。
例化语句:
第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,其表达式为:component 元件名
port(端口名表);
end component 第二部分则是此元件与当前设计实体中元件间及端口的连接说明,语句的表达式为:
例化名:元件名port map([端口名=>]连接端口名,„);
相关语法说明:
1、变量
variable cqi:std_logic_vector(3 downto 0);变量与信号的区别: 信号:全局量
用于architecture、package、entity中 赋值符号为<= 变量:局部量
用于process、function、procedure中 赋值符号为:=
2、省略赋值操作符(others=>x)
全加器的VHDL描述(书P55)
3.6 数据对象
数据对象: 常量(constant):代表数字电路中电源、地和恒定的逻辑值。
常数定义语句:
变量(variable):代表暂存某些值的载体,常用于描述算法。
变量定义语句:
信号(signal):代表物理设计中的某硬件连接线,包括输入输出端口。
信号定义语句:
信号赋值语句:
变量与信号的差异(总结): 1)赋值方式的不同:
变量:= 表达式;
信号 < = 表达式;
2)硬件实现的功能不同:
信号代表电路单元、功能模块间的互联,代表实际的硬件连线;
变量代表电路单元内部的操作,代表暂存的临时数据。
3)有效范围的不同:
信号:程序包、实体、结构体;全局量。
变量:进程、子程序;局部量。4)赋值行为的不同:
信号赋值延迟更新数值、时序电路;
变量赋值立即更新数值、组合电路。
3.7 IF语句概述
※IF语句:
3.8 进程语句归纳
Process语句结构的一般表达格式如下:
[进程标号:] process [(敏感信号参数表)] [is] [进程说明部分](定义该进程所需的局部数据环境)begin 顺序描述语句(描述该进程的行为)end process [进程标号];
第四章QuartusⅡ的使用
建立工作库文件夹和编辑设计文件,创建工程,编译前设置,全程编译,时序仿真,应用RTL电路图观察器,引脚锁定,配置文件下载,编程配置器件,Signal TapⅡ实时测试。(文本编辑,功能仿真,逻辑综合,布局布线,时序仿真,编程下载)
第五章VHDL状态机
用户自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYOPE实现的
5.1 状态机设计相关语句
TYPE类型定义语句:
VHDL中的枚举数据类型是一种特殊的数据类型,它们是用文字符号来表示一组实际的二进制数。设计者在状态机的设计中,为了利于阅读、编译和VHDL综合器的优化,往往将表征状态的二进制数组用文字符号来代替,即所谓的状态符号化。
枚举类型也可以直接用数值来定义,但必须使用单引号。枚举数据,在综合过程中,都将转化为二进制代码。编码顺序是默认的。编码数值:一般将第一个枚举量编码为‘0’或“0000”,以后依次加1。编码的位矢量长度根据实际情况决定。
子类型subtype是由type所定义的原数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型。子类型并没有定义新的数据类型。
子类型subtype的语句格式:
5.1.3
状态机的结构
最一般最常用的状态机通常包括:说明部分,主控时序进程,主控组合进程,辅助进程。
现态信号current_state,次态信号next_state。
真值表:
5.2 Moore状态机设计
从状态机的信号输出方式上分,有Moore型和Mealy型两类状态机。
Moore型状态机的输出仅为当前状态的函数,这类状态机在输入发生变化时还必须等待时钟的到来,时钟使状态变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。
Mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。
从输出时序上看,Moore属于同步输出状态机,而Mealy属于异步输出状态机。
摩尔(Moore)型状态机的输出仅与当前状态有关:
异步复位:目的在加电时建立一个初始状态,并避免非法状态;
摩尔(Moore)型状态机真值表:
多进程Moore状态机的输出信号是由组合电路发出的,所以在一些特定情况下难免出现毛刺现象。如果这些输出信号用作时钟信号,极易产生错误的操作,需尽力避免。单进程Moore状态机较容易构成能避免出现毛刺现象的状态机。
5.3 Mealy 状态机
Mealy状态机的输出不仅是当前状态的函数,也是输入信号的函数。
Mealy 状态机真值表:
第七章VHDL语句
7.1 VHDL顺序语句(Sequential)
硬件执行:并行执行(VHDL本质)仿真执行:顺序执行、并行执行
分为两大类:顺序(Sequential)描述语句、并行(Concurrent)描述语句
顺序语句只能用在进程与子程序中。可描述组合逻辑、时序逻辑。常用的顺序描述语句:赋值语句; if语句;case语句;loop语句; next语句;exit语句;子程序调用语句; return语句;wait语句;null语句。
7.1.4 LOOP语句
LOOP语句就是循环语句,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定。
LOOP语句的常用表达方式有两种。
(1)单个LOOP语句,其语法格式如下:
[LOOP标号:] LOOP
顺序语句
END LOOP [LOOP标号:];
该语句形式的循环方式需引入其它控制语句(如EXIT语句)才能确定。
(2)FOR_LOOP语句,其语法格式如下:
[LOOP标号:] FOR 循环变量,IN 循环次数范围 LOOP 顺序语句
END LOOP [LOOP标号:];
7.1.5 NEXT 语句
NEXT语句主要用在LOOP语句执行中进 行有条件的或无条件的转向控制,它的语句格式有3种。
(1)第一种语句格式:NEXT;
当LOOP内的顺序语句执行到NEXT语句时,即刻无条件终止当前的循环,跳回到本次循环LOOP语句处,开始下一次循环。
(2)第二种语句格式:NEXT LOOP标号;
在当有多重LOOP语句嵌套时,可以跳转到指定标号的LOOP语句处,重新开始执行循环操作。
(3)第三种语句格式:NEXT LOOP标号 WHEN 条件表达式 ;
分句“WHEN 条件表达式”是执行NEXT语句的条件,如果条件表达式的值为TRUE,则执行NEXT语句,进入跳转操作,否则继续向下执行。但当只有单层LOOP循环语句时,关键词NEXT和WHEN之间的“LOOP标号”可以省去。
7.1.6 EXIT语句
EXIT 语句为LOOP语句的内部循环控制语句,将结束循环状态。
EXIT;--第一种语句格式 EXIT LOOP标号;--第二种语句格式
EXIT LOOP标号 WHEN 条件表达式 ;--第三种语句格式
NEXT语句与EXIT语句的格式与操作功能非常相似,区别是: NEXT语句是跳向LOOP语句的起始点,而EXIT语句则是跳向LOOP语句的终点。
7.1.7 WAIT语句
在进程中,当执行到WAIT(等待)语句时,运行程序将被挂起,直到满足此语句设置的结束挂起条件之后,才重新开始执行进程中的程序。
wait--无限等待
wait on 信号表--敏感信号等待语句 wait until 条件表达式--条件满足(可综合)wait for 时间表达式--时间到,超时等待语句
1、wait on 语句
格式:wait on 信号[,信号];
2、wait until 语句(可综合)
格式:wait until 表达式;
当表达式的值为“真”时,进程被启动,否则进程被挂起。
三种表达方式:
wait until 信号 = value;wait until 信号’event and 信号 = value;wait until not(信号’stable)and 信号 = value;时钟信号 clk 的上升沿的描述:
wait until clk = ‘1’;
wait until rising_edge(clk);wait until clk’event and clk = ‘1’;
wait until not(clk’stable)and clk = ‘1’;
7.1.9
return 语句
return 语句只能用于子程序中,并用来终止一个子程序的执行。
格式:return [表达式];
分为:1)return ;
用于过程,只是结束过程,不返回任何值。2)return 表达式;
用于函数,并且必须返回一个值。
7.1.9
空操作语句
空操作语句不完成任何操作,它唯一的功能就是使逻辑运行流程跨入下一步语句的执行。NULL常用于CASE语句中,为满足所有可能的条件,利用NULL来表示剩余条件下的操作行为。
格式: NULL;
7.2
并行语句(Concurrent Statements)
结构体中可综合的并行描述语句有:
并行信号赋值语句,条件信号赋值语句,选择信号赋值语句,进程语句,块语句,元件例化语句,生成语句,参数传递映射语句,过程调用语句,端口说明语句。
使用格式: ARCHITECTURE 结构体名 OF 实体名 IS 说明语句
BEGIN 并行语句
END ARCHITECTURE 结构体名
名词解释
EDA--------电子设计自动化(Electronic Design Automation)VHDL------超高速集成电路硬件描述语言
(Very-High-Speed Integrated Circuit HardwareDescription Language)CPLD------复杂可编程逻辑器件(Complex Programmable Logic Device)EPLD--------电可编程逻辑器件(Electrically Programmable Logic Device)FPGA------现场可编程门阵列(Field-Programmable Gate Array)
ASIC-------专用集成电路(Application Specific Integrated Circuit)LUT---------显示查找表(Look-Up-Table)ISP----------在系统可编程技术(In_System Programmability Programming)
第二篇:EDA复习总结
一.名词解释
EDA
电子自动化设计
electronic design automation FPGA
现场可编程门阵列
field programmable gate array CPLD
复杂可编程逻辑器件 complex programmable logic device ASIC
特定用途集成电路
application specific integrated circuit IP
知识产权
intellectual property SOC
片上系统
system on a chip FSM
有限状态机
finite state machine MPW
多用途晶圆
multi project wafer
DSP
数字信号处理器
digital signal processor MCU
微程序控制器
micro control unit HDL
硬件表述语言
hardware description language VHDL 超高速集成电路硬件描述语言
very high speed integrated circuit hardware description language
二.简答题
1.top-down方法:从系统硬件的高层次抽象描述向低层次物理描述的一系列转化过程。从顶向下设计由功能级,行为级描述开始;寄存器传输(RTL)级描述为第一个中间结果,再将RTL级描述由逻辑综合网表或电路图;利用EDA工具将网表自动转换换成目标文件下载到现场可编程门阵列|复杂可编程逻辑器件或通过自动布局布线设计成专用集成电路,从而得到电路与系统的物理实现。
2.逻辑综合主要通过综合工具,依据设计人员设定的时序,面积等约束条件,将与工艺无关的RTL级的电路逻辑描述程序,转化为与工艺相关的电路,是将程序设计转化为硬件实现的重要环节。
3.简述可编程器件与ASIC在设计应用成本等方面的优缺点
面向可编程逻辑器件的设计其设计投入资金小,风险小,开发周期短,调试灵活,易学易用,而ASIC设计的设计资金投入大,流片费用都很昂贵,研发投片制作其有一定的失败风险,且其开发周期较长,调试改动设计都比较困难,不过,产品进入大批量生产后,ASIC成品的成本往往低于可编程器件成本。
4.top-down过程分为:行为级描述,寄存器传输(RTL)级描述,逻辑综合,物理实现。
5.VHDL描述方式:行为级描述,RTL级描述方式,结构级描述方式。
6.仿真过程:行为级仿真,RTL仿真,门级仿真,后仿真。
7.Top-down设计方法特点:
1)在系统设计早期就能发现设计中存在的问题,并尽可能在早期设计阶段就能解决问题。
2)自动化
8.top-down优势
1)在系统设计早期发现设计中存在的问题,提高设计的一次成功率。
2)大大缩短了系统设计的周期,减少系统开发所耗用的时间。
3)易于系统划分和项目管理,使几十万乃至几百万的大规模复杂数字电路的设计成为可能。
4)设计效率提高,可减少设计人员。
5)通过设计共享,避免重复设计。
9.HDL:指电子技术高层设计阶段中所采用的硬件描述语言。
特点:
1、HDL以行为级描述见长,它能从比较抽象的角度描述电子实体的行为,能够进行早期仿真。
2、HDL能够进行结构化描述,它能从具体的角度描述电子实体结构,便于存档,便于共享。
3、HDL具备了从比较抽象到比较具体的多个层面上进行混合描述能力,降低了硬件电路设计难度。
4、既能被仿真又能被综合。
10.VHDL特点:
1)通用型好,适用面广
2)重用性好
3)可靠性好
4)以行为级描述见长。
11.IP分为软核,硬核,固核
软核:第二阶段,寄存器级设计结果,且经过RTL级仿真验证。通常以HDL语言形式提交。
固核:第四阶段,经过FPGA实物验证的设计结果。通常以门级网表的形式提交。
硬核:第四阶段,经过ASIC工艺验证的设计结果。通常以版图的形式提交。
三者的价值:
从FPGA角度看固核最有价值
从ASIC角度看硬核最有价值
软核则由于它与工艺和器件均无关,具有高度灵活性,从而具有独特价值。
固核硬化:将固核转化为硬核。
硬核软化:因为硬核必须用过交换或出售才能实现价值最大化。而在硬核交换过程中,为了保护硬核知识产权,IP提供者往往将硬核以黑匣子形式提供给用户,同时能将硬化软化,即采用硬件描述语言对硬核的功能进行行为级描述,通过使用该行为级描述,在保护匣子具体内容的同时,仍可进行IP仿真。
12.FPGA/CPLD在EDA中具有重要作用
1)VHDL程序用过FPGA/CPLD可以得到EDA设计的最终产品,在产品数据较小时快速占领市场。
2)VHDL程序通过FPGA/CPLD验证可以形成固核具有一定商品价值。
3)VHDL程序的FPGA/CPLD验证试验是一种ASIC设计的硬件仿真工具。
13.并行语句和顺序语句在使用上有哪些差异:
1)并发语句只能够出现在并发语句结构中,如结构体,BLOCK等,并发语句的执行与其在程序中的书写顺序无关;
2)顺序语句只能够出现在顺序语句结构中,如PROCESS,过程,函数等结构中,其执行与书写顺序相关,写在前面的语句先执行,写在后面的依据后执行。14.数据类型是用标示符表征某个或某个数值的集合,数据类型按照定义可分为标准预定义数据类型和用户自定义数据类型,还有用户自定义数据类型。在VHDL中若某个对象被声明为某种类型,其值必须在该数据类型所限定的取值范围之中,且只有相同的数据类型才能做赋值或运算,不同数据类型的数据必须通过类型转换一致后,才能运算。故说VHDL语言是强数据类型的描述语言。
15.描述行为语言:信号赋值语言,进程语句,子程序,块语句,断言语句。
描述结构语句:元件语句(COMPONENT),生成语句(GENERATE),参数说明语句(GENERIC)
16.并行信号赋值语句:一般信号赋值,条件信号赋值,选择信号赋值。
17.什么是EDA?
EDA技术是一种以计算机为基本工作平台,利用计算机图形学,拓扑逻辑学,计算数学以及人工智能学等多种计算机应用学科的最新成果而开发出来的一整套软件工具,是一种帮助电子设计工程师从事电子元件产品和系统设计的综合设计,电子设计自动化技术,方法一般采用自顶向下的设计方法,也叫正向设计,它是针对传统的自底向上的设计方法而提出的。
18.什么是IP核?学习VHDL与掌握IP核技术的关系四什么?
IP核是具有知识产权的集成电路芯核的简称,其作用是把一组拥有知识产权的电路设计集合在一起,构成芯片的基本单位,以供设计时“搭积木”之用。
19.信号赋值语句在进程做并行语句,并发执行,与语句所处位置无关。
信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处位置无关。
信号赋值语句符号为“<=” 变量赋值符号位”:=”
用于信号赋值动作,不立即生效
用于变量赋值动作,会立即生效
20.Active—HDL软件工具对VHDL程序进行仿真方法有哪些? 利用Active—HDL软件工具对VHDL程序进行仿真时,常用的三种仿真方法:
1)用图形化界面加激励(或手动测试加激励)方法简单,常用于初学者或简单的小程序仿真。
2)编写测试平台文件(或编写testbench)的仿真方法可以方便地使用VHDL编写做激励文件。常用于工程设计实践,尤其适用于需要反复多次仿真或测试激励的跨平台移植。
3)编写宏文件的仿真方法用命令行,批处理文件方式编写激励,常用于需要多次仿真时,一次性编写激励,多次仿真时反复使用。
21.进程的“敏感信号”,也称敏感表,是进程的激活条件,可由一个信号或多个信号组成之间用“,”隔开。
当敏感信号表中的任意一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕后,进程即进入等待挂起状态,直到下一次敏感表中的信号有时间发生,进程再次被激活,如此循环往复。
22.VHDL程序的组成部分包括哪些?
实体:描述设计单元的外围接口信号和内部参数。
构造体:描述设计单元的内部结构和逻辑行为。
配置:为设计单元从多个构造体中选择合适的构造体或从库中选取合适的元件以便于进行设计单元的仿真或综合。
程序包:存放各设计模块都能共享的数据类型,常熟和子程序。
库:存放已经编译了的元件和程序包,以便在设计单元中使用,库可由系统工程师的自信设计或由ASIC芯片制造商提供。
23.端口方向有哪几种? 端口:
In:输入端口,在设计单元内部只可读,在设计单元内不可对其赋值。
Out:输出端口,在设计单元内部只可写,不可反馈至设计单元内部作逻辑电路的输入型号。
Inout:输入通道和输出通道共享引脚的双向端口,在设计单元内部分时可读可写,需要控制信号控制何时读,何时写,输入和输出通道不能同时有效。
Buffer:缓冲输出端口,可反馈至设计单元内部作为逻辑电路的输入信号,故可在设计单元内部可读可写。
Linkage:链接端口,无指定方向,可以与任意方向信号链接。
24.VHDL有哪几种描述方式?分别用于什么场合?
逻辑综合:在top-down流程中,EDA软件可以将源程序自动转换为描述底层逻辑门互联关系的门级网表,从而与最终的可编程器件或ASIC硬件实现相对应。
行为级描述方式是抽象程度最高的电路建模方式,源程序主要描述电路的输出端口随输入变化而变化规律,程序描述贴近人类高级语言,不可被综合。
寄存器级通过描述数据从输入到输出的运算处理按时了电路结构综合。结构描述方式是层次化设计思想的体现,是描述电路硬件连接的建模方式,源程序可否被综合,依赖被调用元件可综合否。
25.什么是数据对象?常用的数据对象有哪些几种? 常用数据对象:信号,变量,常量
在VHDL程序中凡是可以被赋值的对象称为数据对象。
26.信号延时有哪几种?它们有何异同? 信号延时:
传播延时:直接模拟导线上信号的延时。任何信号传入导线的一段,经过一段延时信号必须从导线另一段输出。
惯性延时:模拟某类元件的延时特征,信号传入软件后,在指定时间内输入信号必须保持不变,元件的输出端才会有响应。
27.什么是数据类型?它可以分为哪几大种?每一种类型中包括哪些具体类型? 数据类型:标准数据类型,用户自定义数据类型,用户自定义子类型。
标准数据类是在VHDL预定义库中定义的数据类型,在使用时不需要作参考库和程序包申明。
位、矢量位、整数、自然数。正整数、实数、布尔量、字符、字符串、时间、错误等级。用户自定义数据类型: 在VHDL中用户还可以自己定义所需数据类型。语法格式:Type <数据类型> Is 数据类型定义;
枚举类型、数组类型、存取类型、文件类型、记录类型、时间类型。用户自定义子类型:
用户自定义的子类型,是对已定义数据类型取值范围加以限制得到的子集。语法格式:SUBTYPE <子类型名> IS 原数据类型名 [范围]
28.VHDL中操作符主要有哪几类?它们都分为哪些主要元素?
逻辑运算符: not(非)and(与)or(或)nand(或与)
nor(或非)xor(异或)算数运算符:+ *能够真正被综合,MOD REM 分母的操作数为2乘方的书,逻辑电路综合是可能的。
29.什么是层次化?
层次化设计基于电子系统的结构化建模方式,对系统的功能和结构进行描述,层次化设计奖系统逐级划分,将较独立的功能或逻辑电路单独建模,与参考库中的底层元件一起调用。作为可调用元件,在确保正确的情况下,调入高层次的设计中作为实例使用,在系统设计中,采用层次化设计方法,可以有效地简化设计难度,明确系统架构,促进团队合作和共享。
30.什么是组合逻辑?其VHDL程序设计有何特点?
组合逻辑就是指数字电路在任何时刻仅仅取决于该时刻数字电路的输入,与历史输入无关。
用VHDL描述组合逻辑电路,使用并行语句或使用进程。
31.什么是时序逻辑?其VHDL程序设计与组合逻辑的有何不同?
时序逻辑电路指数字电路在任何时刻的输出不仅取决于该时刻数字电路输入,而且取决于电路原来状态,或者说还与历史输入有关。
用VHDL描述时序电路:必须使用到进程。
32.常用EDA工具:Active-HDL,FPGA-Express,ISE,Cadence,Verilog-XL,NC-verilog,Maxplus-II.33.‘U’初始状态
‘X’不定态
‘0’强0态
‘1’强1态
‘Z’高阻态
‘L’弱0态 ‘H’弱1态
‘W’ 弱补丁太 ‘-’无关态
34.mealy:输出由状态机的输入和状态机的状态共同决定。
Moore:输出仅与状态机的状态有关,与状态机的输入无关。
第三篇:EDA期末总结7
1章 PORT DOWNTO 0);(D:INSTD_LOGIC_VECTOR(11DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
1、常用的硬件描述语言有VHDL、Verilog、ABEL
CLK ,STATUS : IN STD_LOGIC;END AD574A;
2、VHDL自顶向下的设计流程:
LOCK0 : OUT STD_LOGIC;ARCHITECTURE behav OF AD574A IS 1.设计说明书2.建立VHDL行为模型3.VHDL行为仿真4.VHDL-RTL
CS,A0,RC,K12X8 : OUT STD_LOGIC;SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);级建模 Q:OUTSTD_LOGIC_VECTOR(11DOWNTO 0));
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;5.前端功能仿真6.逻辑综合7.测试向量生成8.功能仿真9.结END AD574;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;构综合10.门级时序仿真11.硬件测试12.设计完成 ARCHITECTURE behav OF AD574 IS
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;2章 TYPE states IS(st0, st1, st2, st3,st4);
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;SIGNALcurrent_state,next_state:states :=st0;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;1.一般ASIC设计的流程: SIGNAL REGL:STD_LOGIC_VECTOR(11DOWNTO 0);
SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0);系统规格说明:系统划分:逻辑设计与综合:综合后仿真:版图设SIGNAL LOCK : STD_LOGIC;
SIGNAL LK
: STD_LOGIC;计:版图验证:参数提取与后仿真:制版、流片:芯片测试 BEGIN BEGIN
2、常用EDA工具:
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)设计输入编辑器:HDL综合器:仿真器:适配器(或布局布线器):COM1: PROCESS(current_state,STATUS)
BEGIN 下载器 BEGIN
CASE current_state IS
3、IP核:软IP硬IP固IP
CASE current_state IS
WHEN st0 => next_state <= st1;3章
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
1、CPLD和FPGA的主要区别:
WHEN st2 =>IF(STATUS='1')THENnext state <= st2;
ELSE next_state <= st3;
结构上的不同:集成度的不同:CPLD:500~50000门;FPGA:1K~
ELSE next_state <= st3;
END IF;10M门:应用范围不同:CPLD逻辑能力强而寄存器少(1K左右),END IF;
WHEN st3=> next_state <= st4;
适用于控制密集型系统;FPGA逻辑能力较弱但寄存器多(100多K),WHEN st3 => next_state <= st4;
WHEN st4=> next_state <= st0;适用于数据密集型系统。
WHEN st4 => next_state <= st0;
WHEN OTHERS => next_state <= st0;
使用方法不同
2、FPGA和CPLD的选用(1)CPLD的选用: 逻辑密集型:中小规模(1000~50000):免费软件支持;编程数据不丢失,电路简单;ISP特性,编程加密;布线延迟固定,时序特性稳定;(2)FPGA选用: 数据密集型;大规模设计(5000~数百万门);SOC设计:ASIC的设计仿真:布线灵活,但时序特性不稳定;需用专用的ROM进行数据配置 4章
1、EDA综合工具提供的数据类型为布尔型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整数型(Interger)。
2、VHDL语言描述结构体功能有3种方法:行为描述法:数据流描述法;结构描述法
3、VHDL的库:STD库和WORK库:IEEE库
4、clock’EVENT and clock=‘1检测上升沿;clock’EVENT and clock=‘0’检测下降沿。
5、简述实体、端口概念,端口种类及INPUT与BUFFER的异同。以关键词ENTITY引导,END ENTITY....结束的语句部分成为实体。端口种类4种:IN、OUT、INOUT、BUFFER。INOUT定义的通道确定为输入输出双向端口;、BUFFER在需要输入数据是时,只允许内不回读输出的信号。
6、结构体 以关键词ARCHITECTURE引导,END 结束的语句部分成为结构体。
7、端口: INOUT定义的通道为输入输出双向端口,可以由外向内或由内向外传输数据,而BUFFER定义的通道虽然也是输入输出端口,但它回读的信号不能从外部输入,而是由内部产生,向外输出的信号。IN定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中 OUT定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。INOUT定义的通道确定为输入输出双向端口,可以由外向内或由内向外传输数据。6章
1、说明用原理图输入方法设计电路的详细流程 1.为一项工程设计建立文件夹 2.输入设计项目和存盘 3.将设计项目设置成工程文件 4.选择目标器件并编译 5时序仿真和包装入库 6.设计顶层文件 7章
1、为什么要使用状态机 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。
2、时序进程将次态信号送到现态信号
3、Moore型输出仅与当前状态有关,Mealy型输出是当前状态与所有输入信号 FSM:s_machine current_state clkPROCESSPROCESSREGCOMcomb_outputsreset next_statestate_inputs LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;三进程有限状态机 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY AD574 IS
WHEN OTHERS => next_state <= st0;
END CASE;END PROCESS COM1;COM2: PROCESS(current_state)BEGIN
CASE current_state IS
WHEN st0=>CS<='1';A0<='1';RC<='1';LOCK<='0';WHEN st1=>CS<='0';A0<='0';RC<='0';LOCK<='0';
WHEN st2=>CS<='0';A0<='0';RC<='0';LOCK<='0';WHEN st3=>CS<='0';A0<='0';RC<='1';LOCK<='0';
WHEN st4=>CS<='0';A0<='0';RC<='1';LOCK<='1';
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';
END CASE;END PROCESS COM2;REG: PROCESS(CLK)
BEGIN IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;END IF;END PROCESS REG;LATCH1 : PROCESS(LOCK)BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL <= D;END IF;END PROCESS;
Q <= REGL;
END behav;单进程Moore型有限状态机 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT(DATAIN:INSTD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END MOORE1;ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS(ST0, ST1, ST2, ST3,ST4);
SIGNAL C_ST : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;2进程Mealy型有限状态机的设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK,DATAIN,RESET:IN STD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(4DOWNTO 0));END MEALY1;ARCHITECTURE behav OF MEALY1 IS
TYPE states IS(st0, st1, st2, st3,st4);
SIGNAL STX : states;
BEGIN
COMREG : PROCESS(CLK,RESET)BEGIN
IF RESET ='1' THEN STX <= ST0;
ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN STX <= st1;END IF;
WHEN st1 => IF DATAIN = '0' THEN STX <= st2;END IF;
WHEN st2 => IF DATAIN = '1' THEN STX <= st3;END IF;
WHEN st3 => IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4 => IF DATAIN = '1' THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN Q <= “10000”;
ELSE Q<=“01010”;END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;END IF;
WHEN st3 => IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;END IF;
WHEN st4 => IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;END PROCESS COM1;END behav;状态编码
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT STD_LOGIC_VECTOR(3
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;
9章
1、VHDL有那几种基本的顺序语句? 赋值语句;流程控制语句;等待语句;子程序调用语句;返回语句;空操作语句。
2、什么叫顺序语句,它的适用范围是什么?
执行顺序与它们的书写顺序基本一致的语句叫顺序语句,顺序语句只能出现在进程和子程序中,子程序包括函数和过程。3、VHDL并行语句几种? 并行信号赋值语句;进程语句;块语句;条件信号赋值语句;元件例化语句;生成语句;并行过程调用语句。
4、什么叫并行语句? 在结构体的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。
5、VHDL中具有属性的项目: 类型、子类型、过程、函数、信号、变量、常量、实体、结构体、配置、程序包、元件和语句标号等。
6、综合器支持的属性有: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、EVENT及STABLE。
端口模式:IN单向只读
OUT单向输出
INOUT输入输出双向
BUFFER内部回读输出信号,反馈 数据类型:INTEGER整数数据
BOOLEAN布尔数据
STD_LOGIC标准逻辑位数据
BIT位数据 逻辑操作符:AND与
OR或
NAND与非
NOR或非
XOR异或
XNOR同或
NOT非 数据对象:SIGNAL信号
VARIABLE变量
CONSTANT常量
7、for_loop语句实现一个16位的串行并出移位寄存器
Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity chuan_bing is port(load : in std_logic;
d_in : in std_logic;
d_out:buffer std_logic_vector(15 downto 0);clk :in std_logic);
end chuan_bing;architecture arch of chuan_bing is signal l: std_logic_vector(15 downto 0);
begin process(clk)begin
if(clk'event and clk='1')then
l(0)<=d_in;
if(load='0')then
for i in 14 downto 0 loop
l(i+1)<=l(i);
end loop;
else
d_out<=l;
end if;end if;end process;end arch;
第四篇:EDA第五章复习总结
2.结构体(architecture)部分
67页
IN(输入)、OUT(输出)是表示信号的类别;
BIT是表示信号的类型,BIT是系统定义的类型,即二进位类型,信号只有‘0’和‘1’两种值;
每个VHDL语句都是以“;”结束,包括最后一个语句也不例外;
VHDL中的“注释”是以两个减号“--”开始的。
二、实体描述
ENTITY 实体名 IS PORT(信号名: 类别信号类型;„„„ 信号名: 类别信号类型);END 实体名;同样类别和类型的信号可以用逗号分隔,在一个语句行中说明。
信号的类别主要有以下4种:
IN:此信号是输入信号;
OUT:此信号是输出信号,提供给其他的实体;
:缓冲信号,也是实体的输出信号,但是可以被实体本身的结构体读入;
INOUT:双向信号,既可以输入,也可以输出。
系统预定义的信号类型有:
BIT:二进位型,信号的值只能是‘0’或‘1’。
BIT_VECTOR:二进位向量,实际对应的是二进位数组 ;
BOOLEAN:布尔型,取值只能是true或者false ;
INTEGER:整型,一般都用32位二进制数表示整型数 ;
CHARACTER:字符型,使用8位编码的ASCII字符。
三、结构体描述
ARCHITECTURE 结构体名 OF 实体名 IS <声明部分> BEGIN <描述部分> END 结构体名;对于一个实体来说,可以有几种不同的结构体描述。
5.3 VHDL程序的元素
一、关键字
85页
二、标识符的命名
85页
三、数据类型
91页 预定义:
◆整数Integer:-(2的31次方-1)—2的31次方-1 ◆实数Real:-1.0E+38--+1.0E+38 ◆位Bit:’0’或’1’ ◆位矢量Bit_Vector:”001100” ◆布尔量Boolean:真或假 ◆字符Character:’A’,’C’
◆物理Time:预定义为时间,其他如电压、电流等也为物理型 ◆错误等级:NOTE、WARNING、ERROR、FAILURE ◆自然数(Natural)、正整数(Positive)◆字符串(String),如”morning”
用户自定义类型:
96页
◆枚举型 可以通过枚举类型来定义信号的取值。除了最常用的二值逻辑(已经预定义为BIT型),还可以有三值逻辑(信号有三种取值:‘0’、‘1’和‘z’),九值逻辑等
TYPE枚举类型名 IS(枚举型值表);如
TYPE qit_logic IS('0','1','Z','X')
◆STD_ULOGIC 在IEEE1164标准逻辑包中所定义的std_ulogic类型是一种九值逻辑,也是一种枚举型的数据类型:
TYPE std_ulogic IS('U',--Uninitialized 'X',--Forcing Unknown
'0',--Forcing 0 '1',--Forcing 1 'Z',--High Impedance 'W',--Weak Unknown 'L',--Weak 0 'H',--Weak 1 '-' ,--Don't Care);◆数组类型
TYPE 数组名 IS ARRAY(范围)OF 基类型
1,其中的“基类型”是已经定义过的类型,甚至可以是已经定义过的数组类型。
2,定义中的“范围”,既表示数组的大小,也说明用什么方式表示数组元素的下标。通常,“范围”是用整数表示,也可以用枚举值表示
3,“范围”用整数表示时,整数范围可以是递增表示,也可以是递减表示: TYPE register IS ARRAY(0 TO 7)OF BIT;
TYPE regist_1 IS ARRAY(7 DOWNTO 1)OF BIT;TYPE rom IS ARRAY(0 TO 7)OF register;
类型实际上是用register基类型定义的二维数组,即 TYPE rom IS ARRAY(0 TO 7, 0 TO 7)OF BIT;
数组的范围还可以用已经定义过的枚举型来表示,如: TYPE light_delay IS ARRAY(traffic_light)OF INTEGER;这里的traffic-light是已经定义的枚举类型,有三个取值(“red、yellow、green”)。将来定义的类型为light-delay的数组,也只会有三个元素。
在VHDL中,可以对数组的整体赋值:如定义了regist_1类型的数组信号: TYPE regist_1 IS ARRAY(7 DOWNTO 0)OF BIT;SIGNAL arr_1, arr_2 : regist_1;
以下的赋值操作在VHDL中都是允许的: arr_1 <= “10110110”;arr_2 <=arr_1;◆子类型
97页 希望对某种类型数据的范围加以限制
四、对象
把信号、变量、常量和文件统称为对象。
89页
1.常量的定义
CONSTANT常量名: 类型名 := 常量值;例如:
CONSTANT array_size : INTEGER := 16;CONSTANT gate_delay : TIME := 50ns;
2.变量的定义
变量的定义采用如下的方式:
VARIABLE 变量名: 类型名[:=初值];变量的赋值用“:=”来表示。变量的赋值没有延迟。
3.信号的定义
信号定义的方式:
SIGNAL 信号名: 类型名[:=初值];
信号的赋值用“<=”表示,有延迟,初始化不同于赋值
信号的传送可以规定延迟,也可以不规定延迟。但是VHDL规定,如果没有指定信号传送的延迟,信号的传送也会有一个最小延迟Δ。
信号可以是全局定义的,PORT中定义的信号就是对所有的结构体都有效。但是,信号也可以是局部定义的,在结构体内部定义的信号只对这个结构体有效。
五、词法单元
87页
1.注释
◆以双连符(--)开始直到行末 2.VHDL中的数字
◆八进制:以O开头,如O”340”
◆二进制:以B开头,如B”11100000” ◆十六进制:以X开头,如X”E0”
字符
◆文字字符表示形式为:单引号括起来的ASCII字符,如’A’,’*’
字符串
文字字符串表示形式为:双引号括起来的图形字符序列。如”how are you”,” ”等 5.位串
◆位串表示形式为:双引号括起来的扩展的数字序列,数字序列前冠以基数说明符。如:--长度为八的二进制数,等效245 6.VHDL语句中使用的标点符号 分号(;)是一条语句结束的标志 逗号(,)是对象的分隔符 冒号(:)和原点(.)的用法在每条语句中给出
六、表达式与运算符
102页具体的运算符
和其他程序设计语言中的表达式很相似,一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。
在一个VHDL表达式中,数据的类型应该相同。如果不同的数据类型出现在同一个表达式,VHDL不会进行自动类型的转换,而只会给出错误信息。
支持运算符的重载。例如可以对不同类型的信号各自进行AND运算。
七、VHDL的库和包
1.VHDL库的种类和使用
VHDL的库可以分为三种类型:系统库,IEEE库、用户库。
系统库是VHDL语言本身预定义的库,包括STD库和WORK库。STD库是系统的标准库,所有系统本身预定义的类型和有关的操作都包含在这个库中。WORK库是用户的工作库。对用户都是透明的,也就是随时都可以使用的,不需要在描述中专门说明。
IEEE库是IEEE认可的标准库,其中包括对于STD_LOGIC类型以及有关函数的定义。
用户库就是VHDL软件提供厂商开发的库,应该查询相应软件的说明。
2.程序包
一个VHDL库可以包含许多内容,并且往往以程序包(Package)的形式组织在一起。
一个程序包由两个部分构成:包的说明部分(Package Declaration)和包的主体部分(Package Body)。基本的结构如下:
PACKAGE 程序包名IS 程序包说明部分 END 程序包名;
PACKAGE BODY 程序包名 IS 程序包主体描述 END 程序包名;说明部分可以包括:
常量说明;
信号说明,这里说明的信号可以被所有的结构体使用;
类型说明;
函数或过程说明;
部件(Component)说明,程序包的主体部分则是对所包含的函数、过程、结构体进行具体的描述。
程序包示例
PACKAGE qit_utilities IS TYPE qit IS('0’, ‘1’, ‘Z’, ‘X’);
FUNCTION “AND”(a, b :qit)RETURN qit;
只是声明,有这个函数 FUNCTION “OR”(a, b :qit)RETURN qit;END qit_utilities;
PACKAGE BODY qit_utilities IS FUNCTION “AND”(a, b :qit)RETURN qit IS
对函数的具体过程描述 CONSTANT qit_and_table : qit_2d :=(('0', '0', '0', '0'),('0', '1', '1', 'X'),('0', '1', '1', 'X'),('0', 'X', 'X', 'X'));BEGIN RETURN qit_and_table(a, b);END “AND”;FUNCTION “OR”(a, b :qit)RETURN qit IS
函数的定义方法71页例3-3比较 CONSTANT qit_or_table : qit_2d :=(('0', '1', '1', 'X'),('1', '1', '1', '1'),('1', '1', '1', '1'),('X', '1', '1', 'X'));BEGIN RETURN qit_or_table(a, b);END “OR”;END qit_utilities;以上的程序包中定义了一种4值逻辑及其操作。在说明部分定义了一种新的信号类型qit,也就是一种4值逻辑,还说明了两个函数AND和OR,用来对4值逻辑进行“与”“或”运算。在BODY部分实现了这两个函数。
3.库和程序包的引用
77页
在所有的VHDL源程序都要首先声明使用什么VHDL库。声明要使用关键字LIBRARY,例如,要使用IEEE库,使用这个库中的哪个程序包就应该作以下的声明:
LIBRARY IEEE;
USE 库名.程序包名.ALL;
包中所有内容可用 USE 库名.程序包名.子程序名;
包中选中内容可用
4.函数和过程
前一页程序包的例子
中既可以使用函数,也可以使用过程(Procedure)。两者统称为子程序。函数的定义包括函数说明和函数主体两部分,基本的格式如下:
FUNCTION 函数名(参数表)RETURN 类型IS BEGIN 函数体
END 函数名;
函数体中一定要包括RETURN语句。过程的定义和函数的定义非常相似:
PROCEDURE过程名(参数表)IS BEGIN 过程体
END 过程名;
过程没有返回值。
函数的参数传递总是一个方向的,也就是传入到函数,而过程的参数传递可以是两个方向的。具体在过程执行中参数如何传递,取决于参数的类别(IN、OUT、INOUT等),而对于函数参数的类别,则只能有一种:IN,就是输入到函数。
5.4 VHDL程序的描述语句
可以有许多并行处理语句,这些语句的执行是可以同时进行的。并行语句主要是信号传送语句。传送时可以指定传输延迟。
如果传送时没有指定时延,VHDL会对并行处理语句的执行加上一个最小时延Δ。
一、并行赋值语句
并行赋值语句是最基本的VHDL语句,它的格式是:
信号名<=表达式;
信号名<=表达式 AFTER 延迟时间;例5.4 半加器的数据流描述。ENTITY half_adder IS PORT(a, b: IN BIT;s, c0: OUT BIT);END half_adder;ARCHITECTURE h_adder OF half_adder IS SIGNAL c, d: BIT;BEGIN
信号时非输入输出的中间量相c<= a OR b;d<= a NAND b;
当于下一阶段的输入和上一阶段的输出? c0<= NOT d;s<= c AND d;END h_adder;
二、条件赋值语句
条件赋值语句也是一种信号赋值语句,只是赋给信号的值可以根据条件的不同而不同。
条件赋值语句的格式如下:
信号名<= 表达式1 WHEN 布尔表达式1 ELSE 表达式2 WHEN 布尔表达式2 ELSE „„
表达式n WHEN 布尔表达式n ELSE 表达式;例5.5 用条件赋值语句描述数据选择器。ENTITY mux4_to_1 IS PORT(d0, d1, d2, d3, a, b: IN BIT;y: OUT BIT);
END mux4_to_1;ARCHITECTURE sample_1 OF mux4_to_1 IS
和例5.4比,没有需要中间信号 BEGIN y<= d0 WHEN a='0' AND b='0' ELSE d1 WHEN a='0' AND b='1' ELSE d2 WHEN a='1' AND b='0' ELSE d3 WHEN a='1' AND b='1';END sample_1
三,选择信号赋值语句
选择信号赋值语句可以根据一个表达式的不同取值,给信号或者信号数组赋以不同的结果。
选择信号赋值语句的格式如下:
WITH 表达式SELECT 信号名<= 信号值1 WHEN 表达式值1, 信号值2 WHEN 表达式值2,„„
信号值n WHEN others;例5.6 用信号选择语句描述数据选择器。ENTITY mux4_to_1 IS PORT(d0, d1, d2, d3, a, b: IN std_logic;y: OUT std_logic);END mux4_to_1;ARCHITECTURE sample_2 OF mux4_to_1 IS BEGIN WITH a&b SELECT y<= d0 WHEN “00”, d1 WHEN “01”, d2 WHEN “10”, d3 WHEN “11”, 'X' WHEN OTHERS;END sample_2;
5.4.2 顺序描述语句
并行信号传输语句主要描述硬件电路或系统中信号的传送过程。同时,VHDL还支持顺序描述语句,主要使用于对电路和系统的性能描述。
顺序描述语句的执行就和一般程序设计语言中语句相似,是按照语句的顺序依次执行的。前一条语句的结果会影响到下一条语句的执行。
一、PROCESS语句
132页
尽管PROCESS语句本身是并行描述语句,可以和其他并行语句同时执行,但是PROCESS语句内部的语句都是顺序语句。
PROCESS语句一旦开始执行,就要依次执行其中的顺序语句,一直到最后的END PROCESS为止。
语句的格式如下:
PROCESS(信号1,„,信号k)
用到的信号 变量说明(定义);其他说明;BEGIN 顺序语句 „„ 顺序语句
END PROCESS;
二、分支语句
两分支IF语句的格式:
多分支IF语句的格式:
IF 布尔表达式
IF 布尔表达式 THEN 顺序语句
THEN 顺序语句 ELSE 顺序语句
ELSIF 布尔表达式 END IF;
THEN顺序语句
ELSE 顺序语句 END IF;
例5.7 反向器的顺序描述。ENTITY inverter IS PORT(x: IN BIT;y: OUT BIT);END inverter;ARCHITECTURE behave OF inverter IS BEGIN PROCESS(x)
只用到x作为判断条件 BEGIN IF(x='0')THEN y<=‘1';ELSE y<=‘0';END IF;END PROCESS;END behave;
三、另外一种分支语句CASE语句
CASE语句是从多个可能的分支中选择一个分支进行操作。
语句的格式如下:
CASE 表达式IS
WHEN 值1 => 顺序语句1 „„
WHEN 值k => 顺序语句k
WHEN OTHERS =>顺序语句k+1 END CASE;
例5.8 四选一数据选择器的顺序描述。ENTITY mux4_1 IS PORT(a, b, i0, i1, i2, i3: IN BIT;y: OUT BIT);END mux4_1;ARCHITECTURE behave OF mux4_1 IS SIGNAL sel bit_vector(1 DOWNTO 0);BEGIN sel<=b & a;PROCESS(sel, i0, i1, i2, i3)BEGIN CASE sel IS WHEN “00” => y<=i0;WHEN “01” => y<=i1;WHEN “10” => y<=i2;WHEN “11” => y<=i3;END CASE;END PROCESS;END behave
四、循环语句
中提供了两种形式的循环语句:FOR循环和WHILE循环。FOR循环的格式如下:
FOR 变量IN 范围LOOP 顺序语句 „„ 顺序语句
END LOOP;
其中的“变量”和“范围”应该有相同的类型。例如变量是整型,范围可以是一个整数范围。如果变量是枚举型,则“范围”要限制在枚举类型所定义的取值范围内。WHILE循环的格式如下:
WHILE 布尔表达式LOOP 顺序语句 „„
顺序语句
END LOOP;
循环中的布尔表达式可以是逻辑表达式或者关系表达式。在FOR循环或者WHILE循环中都可以使用NEXT语句来结束本次循环,用EXIT语句来结束循环,到下一条顺序语句继续执行。它们的格式基本相同: NEXT WHEN 布尔表达式;EXIT WHEN 布尔表达式;
5.4.3 VHDL的描述风格
在VHDL中对这一类的描述称为“性能”描述(行为描述),性能描述中一定有PROCESS语句。
VHDL 还有另一种描述,称为“结构”描述。
1.性能描述(行为描述)
这种描述完全是从与非门输入和输出的逻辑关系出发,对与非门性能的一种描述。2.数据流描述(RTL描述)
建立在并行信号赋值语句基础上。当语句中任意一个输入信号的值发生改变时,赋值语句就被激活,从而认为数据从一个设计中“流入”,然后又“流出” 3.结构描述语句
结构描述是VHDL的三种描述方法之一。
结构描述的基础是部件:COMPONENT。所使用的部件应该是事先已经定义过的。可以直接取自某个VHDL库,也可以是用户自定义的存放在WORK库的部件。
所用部件所在的库或程序包,必须在程序开始前声明。
在结构描述中所使用的部件必须首先声明。部件的声明在ARCHTECTURE的声明部分进行。
部件声明语句(Component Declaration)的格式如下:
COMPONENT 部件名
PORT(信号名: 类别 信号类型;„„
信号名: 类别 信号类型);END COMPONENT;部件描述语句
例5.9 全加器的结构描述。
使用前面已经定义过的半加器 ENTITY full_adder IS PORT(x, y, cin: IN BIT;sum, carry: OUT BIT);END full_adder;ARCHITECTURE struct OF full_adder IS COMPONENT half_adder
部件声明 PORT(a, b: IN BIT;s, c0: OUT BIT);END COMPONENT;SIGNAL h1_s, h1_c, h2_c: BIT;BEGIN h1: half_adder PORT MAP(x, y, h1_s, h1_c);
部件描述
(2)下降沿描述: 其物理意义是指时钟信号的逻辑值是从‘1’跳变到‘0’
描述1:
PROCESS(clk)BEGIN IF(clk’EVENT AND clk = ‘0’)THEN ┇
END PROCESS;
PROCESS(clk)BEGIN WAIT UNTIL clk = ┇
END PROCESS; 描述2:
0’; ‘
第五篇:EDA(解答题)EDA期末总结8
1章
ENTITY AD574 IS STD_LOGIC;并行信号赋值语句;进程语句;块语句;条件信号赋值语句;元件例化语
PORT(D :IN STD_LOGIC_VECTOR(11
Q : OUT
1、常用的硬件描述语言有VHDL、Verilog、ABEL 句;生成语句;并行过程调用语句。DOWNTO 0);
STD_LOGIC_VECTOR(4 DOWNTO 0));
2、VHDL自顶向下的设计流程:
4、什么叫并行语句?
CLK ,STATUS : IN STD_LOGIC;--状END MEALY1;1.设计说明书2.建立VHDL行为模型3.VHDL行为仿真4.VHDL-RTL在结构体的执行是同步进行的,或者说是并行运行的,其执行方式
ARCHITECTURE behav OF MEALY1 IS 态机时钟CLK,AD574状态信号STATUS 级建模 与书写的顺序无关。
TYPE states IS(st0, st1, st2, st3,st4);
LOCK0
: OUT STD_LOGIC;5.前端功能仿真6.逻辑综合7.测试向量生成8.功能仿真9.结
5、VHDL中具有属性的项目:
SIGNAL STX : states;
--内部锁存信号LOCK的测试信号 构综合10.门级时序仿真11.硬件测试12.设计完成 类型、子类型、过程、函数、信号、变量、常量、实体、结构体、BEGIN
CS,A0,RC,K12X8 : OUT STD_LOGIC;2章 配置、程序包、元件和语句标号等。
COMREG : PROCESS(CLK,RESET)--AD574控制信号
BEGIN--决定转换状态的进程 1.一般ASIC设计的流程:
6、综合器支持的属性有:
Q : OUT STD_LOGIC_VECTOR(11
IF RESET ='1' THEN 系统规格说明:系统划分:逻辑设计与综合:综合后仿真:版图设LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、DOWNTO 0));--锁存数据输出
STX <= ST0;计:版图验证:参数提取与后仿真:制版、流片:芯片测试 EVENT及STABLE。END AD574;
ELSIF CLK'EVENT AND CLK = '1'
2、常用EDA工具: ARCHITECTURE behav OF AD574 IS
THEN 设计输入编辑器:HDL综合器:仿真器:适配器(或布局布线器):TYPE states IS(st0, st1, st2, st3,st4);
CASE STX IS
SIGNAL current_state, next_state: 下载器
WHEN st0 => IF DATAIN = '1' states :=st0;
3、IP核:软IP硬IP固IP THEN STX <= st1;END IF;
SIGNAL REGL : 3章
WHEN st1 => IF DATAIN = '0' STD_LOGIC_VECTOR(11 DOWNTO 0);
1、CPLD和FPGA的主要区别: THEN STX <= st2;END IF;
SIGNAL LOCK : STD_LOGIC;
WHEN st2 => IF DATAIN = '1' 结构上的不同:集成度的不同:CPLD:500~50000门;FPGA:1K~10M门:应用范围不同:CPLD逻辑能力强而寄存器少(1K左右),适用于控制密集型系统;FPGA逻辑能力较弱但寄存器多(100多K),适用于数据密集型系统。使用方法不同
2、FPGA和CPLD的选用(1)CPLD的选用: 逻辑密集型:中小规模(1000~50000):免费软件支持;编程数据不丢失,电路简单;ISP特性,编程加密;布线延迟固定,时序特性稳定;(2)FPGA选用: 数据密集型;大规模设计(5000~数百万门);SOC设计:ASIC的设计仿真:布线灵活,但时序特性不稳定;需用专用的ROM进行数据配置 4章
1、EDA综合工具提供的数据类型为布尔型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整数型(Interger)。
2、VHDL语言描述结构体功能有3种方法:行为描述法:数据流描述法;结构描述法
3、VHDL的库:STD库和WORK库:IEEE库
4、clock’EVENT and clock=‘1检测上升沿;clock’EVENT and clock=‘0’检测下降沿。
5、简述实体、端口概念,端口种类及INPUT与BUFFER的异同。以关键词ENTITY引导,END ENTITY....结束的语句部分成为实体。端口种类4种:IN、OUT、INOUT、BUFFER。INOUT定义的通道确定为输入输出双向端口;、BUFFER在需要输入数据是时,只允许内不回读输出的信号。
6、结构体 以关键词ARCHITECTURE引导,END 结束的语句部分成为结构体。
7、端口: INOUT定义的通道为输入输出双向端口,可以由外向内或由内向外传输数据,而BUFFER定义的通道虽然也是输入输出端口,但它回读的信号不能从外部输入,而是由内部产生,向外输出的信号。IN定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中 OUT定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。INOUT定义的通道确定为输入输出双向端口,可以由外向内或由内向外传输数据。6章
1、说明用原理图输入方法设计电路的详细流程 1.为一项工程设计建立文件夹 2.输入设计项目和存盘 3.将设计项目设置成工程文件 4.选择目标器件并编译 5时序仿真和包装入库 6.设计顶层文件 7章
1、为什么要使用状态机 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。
2、时序进程将次态信号送到现态信号
3、Moore型输出仅与当前状态有关,Mealy型输出是当前状态与所有输入信号
FSM:s_machine current_state clkPROCESSPROCESSREGCOMreset next_statecomb_outputsstate_inputs
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;
3、三进程有限状态机 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;BEGIN
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)--决定转换状态的进程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=>
next_state <= st4;
WHEN st4=>
next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
END PROCESS COM1;COM2: PROCESS(current_state)--输出控制信号的进程
BEGIN
CASE current_state IS
WHEN st0=> CS<='1';A0<='1';RC<='1';LOCK<='0';--初始化
WHEN st1=> CS<='0';A0<='0';RC<='0';LOCK<='0';--启动12位转换
WHEN st2=> CS<='0';A0<='0';RC<='0';LOCK<='0';--等待转换 WHEN st3=> CS<='0';A0<='0';RC<='1';LOCK<='0';--12位并行输出有效
WHEN st4=> CS<='0';A0<='0';RC<='1';LOCK<='1';--锁存数据
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';--其它情况返回初始态
END CASE;
END PROCESS COM2;
REG: PROCESS(CLK)--时序进程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LATCH1 : PROCESS(LOCK)--数据锁存器进程
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;END behav;
5、单进程有限状态机 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS
PORT(DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END MOORE1;ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS(ST0, ST1, ST2, ST3,ST4);
SIGNAL C_ST : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;
WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;
WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;
WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;
WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;
WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;
6、Mealy型有限状态机的设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK ,DATAIN,RESET : IN THEN STX <= st3;END IF;
WHEN st3=> IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4=> IF DATAIN = '1'
THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;
END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN--输出控制信号的进程
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN
Q <= “10000”;
ELSE Q<=“01010”;
END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;
END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;
END IF;
WHEN st3=> IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;
END IF;
WHEN st4=> IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;
END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;
END PROCESS COM1;
END behav;
7、状态编码
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN
STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT
STD_LOGIC_VECTOR(3 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END AD574A;ARCHITECTURE behav OF AD574A IS SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;
SIGNAL REGL
: STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL LK
: STD_LOGIC;
BEGIN
COM1: PROCESS(current_state,STATUS)
--决定转换状态的进程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=> next_state <= st4;
WHEN st4=> next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)--时序进程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)--数据锁存器进程
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;9章
1、VHDL有那几种基本的顺序语句? 赋值语句;流程控制语句;等待语句;子程序调用语句;返回语句;空操作语句。
2、什么叫顺序语句,它的适用范围是什么? 执行顺序与它们的书写顺序基本一致的语句叫顺序语句,顺序语句只能出现在进程和子程序中,子程序包括函数和过程。3、VHDL并行语句几种?