第一章绪论
作业
1、EDA的英文全称是什么?EDA的中文含义是什么?
答:EDA的英文全称是Electronic Design Automation;中文含义是电子设计自动化。
5、FPGA和CPLD各包含几个基本组成部分?
答:FPGA和CPLD均包含三个部分:可编程逻辑单元阵列、可编程互连、可编程I/O单元。CPLD内部的可编程逻辑单元以乘积项阵列为主,而FPGA内部采用LUT加寄存器结构。
6、FPGA和CPLD各有什么特点?二者在存储逻辑信息方面有什么区别?在实际使用中,在什么情况下选用CPLD?在什么情况下选用FPGA?
答:特点:CPLD内部的可编程逻辑单元以乘积项阵列为主,触发器数量相对FPGA要少,规模和复杂度较低。FPGA内部采用LUT加寄存器结构,触发器数量多,规模和复杂度较高。
在存储逻辑信息方面,CPLD主要采用PROM存储信息;FPGA主要采用SRAM存储信息。
在实际使用中,一般规模逻辑设计,以控制功能为主的情况下优先选用CPLD。对于复杂逻辑设计,需要存储大量数据的情况下优先选用FPGA。
10、对于目标器件为FPGA/CPLD的VHDL设计,其工程设计包括几个主要步骤?每步的结果是什么?
答:主要设计步骤:(1)设计输入:采用HDL语言、原理图、状态图等方式,结果为设计的源代码。(2)逻辑综合:将RTL级描述转换为优化过的具有特定工艺的门级实现,产生网表文件。
(3)目标器件的布线/适配:将综合器产生的网表文件映射到目标器件中,产生最终的下载文件。(4)目标器件的编程/下载,得到具有特定功能的电路。
(5)硬件仿真、测试,
11、名称解释
逻辑综合、逻辑适配、行为仿真、功能仿真、时序仿真
答:逻辑综合:将RTL级描述转换为优化过的具有特定工艺的门级实现,即网表文件。
逻辑适配:将综合器产生的网表文件映射到目标器件中,产生最终的下载文件。
行为仿真:将源程序直接送到VHDL仿真器中所进行的仿真。
功能仿真:将综合后的网表文件送到VHDL仿真器中所进行的仿真。
时序仿真:将适配器产生的网表文件送到VHDL仿真器中所进行的仿真。
习题
CAA:计算机辅助分析
CAD:计算机辅助设计
CAE:计算机辅助工程
EDA:电子设计自动化
SOC:片上系统
SOPC:片上可编程系统
HDL:硬件描述语言
VHDL:超高速集成电路硬件描述语言
PLD:可编程逻辑器件
CPLD:复杂可编程逻辑器件
FPGA:现场可编程门阵列
ASIC :专用集成电路
IEEE:电气电子工程师协会
FSM:有限状态机
RTL:寄存器传输级
IP:知识产权包
选择题
【】下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程( )。
A. 原理图/HDL文本输入→适配→综合→功能仿真→编程下载→硬件测试
B. 原理图/HDL文本输入→功能仿真→综合→适配→编程下载→硬件测试
C. 原理图/HDL文本输入→功能仿真→综合→编程下载→→适配硬件测试;
D. 原理图/HDL文本输入→功能仿真→适配→编程下载→综合→硬件测试
【】基于VHDL设计的仿真包括有①门级时序仿真、②行为仿真、③功能仿真和④前端功能仿真这四种,按照自顶向下的设计流程,其先后顺序应该是()。
A.①②③④ B.②①④③C.④③②①D.②④③①
【】综合是EDA设计流程的关键步骤,在下面对综合的描述中,( )是错误的。
A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件
B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束
C. 综合是纯软件的转换过程,与器件硬件结构无关
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。
E.综合就是把抽象设计层次中的一种表示转化成另一种表示的过程
【】综合时,VHDL源程序不需要经过下面哪个层次的转化()。
A.行为级
B.系统级
C.RTL级
D.门级
【】当前最流行的并成为IEEE标准的硬件描述语言包括VHDL和()。
A. Verilog HDL语言
B.ABEL语言
C.AHDL语言
D.C语言
【】下列硬件描述语言中最适合于描述门级电路的是()。
A.VHDL
B.ABEL
C.System Verilog
D. System C
【】以下哪种语言不属于硬件描述语言()。
A.AHDL语言
B.VHDL 语言
C.Verilog HDL语言
D.C语言
【】下列硬件描述语言中成为IEEE标准的是()。
A.VHDL
B.ABEL
C.System Verilog
D. System C
【】下列EDA软件中,哪一个不具有逻辑综合功能:( )。
A.Max+Plus II
B.ModelSim
C.Quartus II
D.Synplify
第三章VHDL基础
作业
2、VHDL程序一般包含几个组成部分?每个部分的作用是什么?
答:(1)库、程序包的使用说明:使该库的指定程序包中所声明/定义的内容,在当前源程序中可见。(2)实体描述:包括类属参数说明和端口说明,描述所设计电路的对外接口。
(3)结构体描述:描述所设计电路的内部行为、功能、结构。
(4)配置说明:描述所设计电路实体和结构体之间的连接关系,以及元件和实体-结构体对之间的连接关系(层与层之间的连接关系)
5、在VHDL中常用的预定义的程序包有哪几个?怎样使用这些程序包?
答:Standard程序包:定义了一些基本的数据类型和函数。
Textio程序包:定义了一些支持文本文件操作的类型和子程序
std_logic_1164:定义了多值逻辑类型及相关函数
std_logic_arith:在std_logic_1164包的基础上扩展了unsigned、signed、small_int三个类型,及相关算术运算和转换函数。
std_logic_ unsigned、std_logic_ signed:定义integer和std_logic、std_logic_vector混合类型的算术运算,并定义了一个由std_logic_vector转换为integer类型的函数。
程序包的使用方法:
Library 库名; --定位库的位置
Use 库名.程序包名.项目名/ALL; --使得包中的项目(item)可见
6、VHDL语言中数据对象有几种?各种数据对象的作用范围如何?各种数据对象的实际物理含义是什么?
答:(1)数据对象有常量、变量和信号三种。
(2)常量的作用范围取决于其所定义的位置。若在程序包中定义,则可以用在调用该程序包的所有设计实体中。若定义在实体中,则可在这个实体的所有结构体中使用。若定义在结构体中,则只能用于该结构体。若定义在进程/子程序中,则只能用于该进程/子程序。
变量属于局部量,作用范围仅限于所定义的进程或子程序内部。
信号属于全局量,作用范围取决于其所定义的位置。若在程序包中定义,则可以用在调用该程序包的所有设计实体中。若定义在实体中,则可在这个实体的所有结构体中使用。若定义在结构体中,则只能用于该结构体。
(3)信号表示硬件中的连线,用于各并行语句模块之间的通信。变量一般用于存储局部/临时数据。常量表示电路中的恒定电平,可使代码中常数易于阅读和修改。
8、信号和变量在描述和使用时有哪些主要区别?
答:(1)变量只能在进程或子程序内部定义,用于存储局部/临时数据。信号只能在进程或子程序的外部定义,表示硬件中的连线,用于各并行语句模块之间的通信。
(2)信号用signal关键字定义,赋值符号为”<=”。变量用variable关键字定义,赋值符号为”:=”(3)信号赋值,可以设定延时量,需要延时一段时间后才执行;变量赋值立即执行。
13、VHDL语言有哪几类操作符?在一个表达式中有多种操作符时应该按怎样的准则进行运算?下列三个表达式是否等效:①A<=NOT B AND C OR D;②A<=(NOT B AND C) OR D;③A<=NOT B AND (C OR D)。
答:VHDL语言有算术操作符、逻辑操作符、关系操作符、符号操作符。
在一个表达式中有多个操作符时,应先运算带括号的,然后按不同运算符的优先级进行运算。
这三个表达式不等效。①式表达错误,对同一优先级的不同运算符应加上括号。②和③式的运算顺序不同。
18、VHDL程序设计中的基本语句系列有几种?它们特点如何?它们各使用在什么场所?它们各自包括些什么基本语句?
答:VHDL中基本语句系列分为并行语句和顺序语句2种。
并行语句的执行与书写顺序无关,各语句是同时执行的,在执行过程中各并行语句之间可通过信号进行通信,同步运行;也可以互为独立、互不相关,异步运行。并行语句在结构体中使用,包括块(block)、进程(process)、信号赋值、子程序调用、元件例化等语句。
顺序语句的执行与它们的书写顺序基本一致(指仿真或逻辑上的顺序执行),但实际上硬件电路是并行工作的。顺序语句用在进程和子程序的内部,包括变量/信号赋值语句,流程控制语句(if,case,loop,next,exit),等待语句,子程序调用语句,返回语句,空操作语句等。
21、转向控制语句有几种?它们各用在什么场所?使用它们时特别需要注意什么?
答:if,case,loop,next,exit。
(1)if 条件表达式1 then 顺序语句;
elsif 条件表达式2 then 顺序语句;
else 条件表达式n then 顺序语句;
end if;
if语句可根据一个或多个布尔条件,有选择的执行指定的顺序语句。
others是什么使用时应注意:①关键字then后可包含一个或多个顺序语句。② elsif子句可以有多个或没有,每个elsif 子句执行时具有向前与的作用。③else子句可以没有。④关键字then后的顺序语句可以是if语句,即if语句可以嵌套。
(2)case选择表达式is
when 选择值1 => 顺序语句;
when 选择值2 => 顺序语句;
......
end case;
case语句可根据一个表达式的不同取值执行不同的顺序语句。
使用时应注意:①表达式的值可以是整型或枚举型的,或是这些数据类型构成的数组。②选择值可以是单个取值,如4;也可以是一个取值范围,如2 to 5;也可以是多个并列的取值,如2|6;还可以是以上三种取值方式的混合。③ case语句执行时,根据选择表达式的值来选择执行哪个顺序语句,选择的结果和每个选择值的顺序无关,只要求对于选择表达式
的每个可能取值,有且仅有一个选择值与之匹配即可。④常用when others表示其它未列出的选择值。⑤”=> “后面的顺序语句可以有多个。
(3)[标号:] for 循环变量in 范围loop
顺序语句;
end loop [标号]; [标号:] while 条件loop
顺序语句;
end loop [标号];
for循环用于循环次数已知的情况;while 循环用于循环次数未知的情况。
使用时应注意:for循环中的循环变量无需事先定义,可自动加/减1。
(4)next; 无条件中止当前循环,返回循环起点,开始下次循环。
exit; 无条件退出当前循环。
next loop标号; 无条件中止LOOP标号标明的循环,返回LOOP标号处,开始下次循环。
exit loop标号; 无条件退出LOOP标号标明的循环。
next loop标号when 条件; 条件为真时中止LOOP标号标明的循环,返回LOOP标号处,开始下次循环。
exit loop标号when 条件; 条件为真时退出LOOP标号标明的循环。
22、case语句中,在什么情况下可以不要when others语句?在什么情况下一定要when others语句?
答:case语句执行时,根据选择表达式的值来选择执行哪个顺序语句,要求对于选择表达式的每个可能取值,有且仅有一个选择值与之匹配。因此,当已列出的选择值能够覆盖选择表达式的所有可能取值时,可以不要when others语句。否则,要用when others表示其它未列出的选择值。
23、for循环语句应用于什么场合?循环变量怎样取值?是否需要事先在程序中定义?
答:for循环用于循环次数已知的情况。循环变量无需事先定义,其初值为循环范围的左边界值,每次循环后其值自动加/减1。
30、进程的启动条件是什么?如果进程敏感信号列表中有二个敏感信号,其中一个由‘0’变‘1’,等待一段时间后再由‘1’变‘0’;而另一个只由‘1’变‘0’改变一次,,请问该进程将执行几遍?答:进程的启动条件:敏感信号列表中的任何一个敏感信号的值发生变化,或者wait语句中的条件为真。该进程将执行3遍。
32、并行信号赋值语句有几类?比较其异同。
答:三类:简单信号赋值、条件信号赋值、选择信号赋值。
共同点:赋值目标都是信号,都是并行语句,都相当于一个隐含的进程语句(信号赋值语句中的所有读入信号都作为该进程的敏感信号)。
不同点:简单信号赋值语句是最简单的并行语句,执行时直接将表达式的值赋给信号。
条件信号赋值语句的功能与if语句相同,在执行时按书写的先后顺序测试每个条件,一旦条件为真,则将表达式的值赋给信号。
选择信号赋值语句与case语句相似。当关键字with后的选择表达式的值发生变化时,就将该值和每个选择值进行比较,将选择值匹配的子句中的表达式的值赋给信号。
33、分别用条件信号赋值语句、选择信号赋值语句设计一个4——16线译码器,并使用EDA软件进行时序仿真和逻辑综合结果分析。
答:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DECODER IS
PORT(A, B, C,D:IN STD_LOGIC;
Y: OUT BIT_VECTOR (15 DOWNTO 0));
END ENTITY DECODER;
ARCHITECTURE ART1 OF DECODER IS
SIGNAL SR: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
SR<= D&C&B&A;
Y(0)<='1' WHEN SR="0000" ELSE '0';
Y(1)<='1' WHEN SR="0001" ELSE '0';
Y(2)<='1' WHEN SR="0010" ELSE '0';
Y(3)<='1' WHEN SR="0011" ELSE '0';
Y(4)<='1' WHEN SR="0100" ELSE '0';
Y(5)<='1' WHEN SR="0101" ELSE '0';
Y(6)<='1' WHEN SR="0110" ELSE '0';
Y(7)<='1' WHEN SR="0111" ELSE '0';
Y(8)<='1' WHEN SR="1000" ELSE '0';
Y(9)<='1' WHEN SR="1001" ELSE '0';
Y(10)<='1' WHEN SR="1010" ELSE '0';
Y(11)<='1' WHEN SR="1011" ELSE '0';
Y(12)<='1' WHEN SR="1100" ELSE '0';
Y(13)<='1' WHEN SR="1101" ELSE '0';
Y(14)<='1' WHEN SR="1110" ELSE '0';
Y(15)<='1' WHEN SR="1111" ELSE '0';
END ARCHITECTURE ART1;
ARCHITECTURE ART2 OF DECODER IS
SIGNAL SR: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
WITH SR SELECT
Y<= “0000_0000_0000_0001”WHEN “0000”,
“0000_0000_0000_0010”WHEN “0001”,
“0000_0000_0000_0100”WHEN “0010”,
“0000_0000_0000_1000”WHEN “0011”,
“0000_0000_0001_0000”WHEN “0100”,
“0000_0000_0010_0000”WHEN “0101”,
“0000_0000_0100_0000”WHEN “0110”,
“0000_0000_1000_0000”WHEN “0111”,
“0000_0001_0000_0000”WHEN “1000”,
“0000_0010_0000_0000”WHEN “1001”,
“0000_0100_0000_0000”WHEN “1010”,
“0000_1000_0000_0000”WHEN “1011”,
“0001_0000_0000_0000”WHEN “1100”,
“0010_0000_0000_0000”WHEN “1101”,
“0100_0000_0000_0000”WHEN “1110”,
“1000_0000_0000_0000”WHEN OTHERS;
END ARCHITECTURE ART2;
习题
一、VHDL语言要素
【】VHDL基本标识符书写必须遵循哪些规则?
【】VHDL实数型文字表达正确的是()。
A.19E6
B.3.14
C. 16#E#E1
D.100pf
【】关于VHDL中的数字,请出以下数字中最大的一个( )。
A.2#1111_1110#
B.8#276#
C.10#170#
D. X#75# 【】VHDL的数值型文字不包括()。
A.数字型
B.字符串型
C.整型
D.位串型【】下列关于VHDL标识符的说法正确的是()(多选)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论