EDA技术课后参考答案陈炳权曾庆立.docx
《EDA技术课后参考答案陈炳权曾庆立.docx》由会员分享,可在线阅读,更多相关《EDA技术课后参考答案陈炳权曾庆立.docx(27页珍藏版)》请在冰豆网上搜索。
![EDA技术课后参考答案陈炳权曾庆立.docx](https://file1.bdocx.com/fileroot1/2022-12/7/b19f38ec-8af3-4773-82da-90bbada6f2a4/b19f38ec-8af3-4773-82da-90bbada6f2a41.gif)
EDA技术课后参考答案陈炳权曾庆立
《EDA技术及实例开发教程》课后习题
第一章绪论(7题)
1.EDA的英文全称及其中文含义是什么?
答:
EDA是ElectronicDesignAutomation,其中文含义是“电子设计自动化”。
2.什么叫EDA技术?
简述EDA技术的发展历程。
答:
EDA技术有狭义和广义之分,狭义EDA技术就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术,或称为IES/ASIC自动设计技术。
3.简述用EDA技术设计电路的设计流程。
答EDA设计流程包括:
设计准备、设计输入、设计处理、设计校验、器件编程、器件测试和设计验证。
4.什么叫”综合”和”网表文件”?
答:
(A)在电子设计领域中综合的概念可以表示为:
将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransportLevel,RTL),即从行为域到结构域的综合,即行为综合。
(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。
(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
综合在电子设计自动化中处于核心地位。
(B)网表文件是描述电路的连接关系的文件,一般以文本文件的形式存在。
英文为netlistfile格式有cdl,spice,aucdl...等
5.从使用的角度来讲,EDA技术主要包括几个方面的内容?
这几个方面在整个电子系统的设计中分别起什么作用?
答:
EDA技术的学习主要应掌握4个方面的内容:
①大规模可编程逻辑器件;②硬件描述语言;③软件开发工具;④实验开发系统。
6.目前流行的主流厂家的EDA的软件工具有哪些?
比较这些EDA软件的差异。
答:
(1)目前比较流行的主流厂家的EDA的软件工具有Altera的MAX+plusII、QuartusII、Lattice的ispEXPERT、Xilinx的FoundationSeries。
(2)Max+plusII是A1tera公司推出的一个使用非常广泛的EDA软件工具,它支持原理图、VHDL和Verilog语言的文本文件,以及波形图与EDIF等格式的文件作为设计输入,并支持这些文件的任意混合设计。
它具有门级仿真器,可以进行功能仿真和时序仿真,能够产生精确的仿真结果。
在适配之后,Max+plusII生成供时序仿真用的Edif、VHDL和Verilog3种不同格式的网表文件。
Max+plusII界面友好,使用便捷,被誉为业界最易学易用的EDA软件,并支持主流的第三方EDA工具,支持除APEx20K系列之外的所有A1tera公司的FPGA/CPLD大规模逻辑器件。
QuartusII是A1tera公司新近推出的EDA软件工具,其设计工具完全支持VHDL和Verilog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。
第三方的综合工具,如LeonardoSpectrum、Synplifypro和FPGACompilerII有着更好的综合效果,QuartusII可以直接调用这些第三方工具,因此通常建议使用这些工具来完成VHDL/Verilog源程序的综合。
同样,QuartusII具备仿真功能,也支持第三方的仿真工具,如Modelsim。
此外,QuartusII为A1teraDSP开发包进行系统模型设计提供了集成综合环境,它与MATLAB和DSPBuilder结合可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
QuartusII还可与SOPCBuilder结合,实现SOPC系统开发。
ispExPERT是Lattice公司的主要集成环境。
通过它可以进行VHDL、Verilog及ABEL语言的设计输入、综合、适配、仿真和在系统下载。
ispExPERT是目前流行的EDA软件中最容易掌握的设计工具之一,它界面友好、操作方便、功能强大,并与第三方EDA工具兼容良好。
FoundationSeries是Xilinx公司较成熟的集成开发EDA工具。
它采用自动化的、完整的集成设计环境。
Foundation项目管理器集成Xilinx实现工具,并包含了强大的书馆SynopsysFPGAExpress综合系统,是业界最强大的EDA设计工具之一。
7.简要阐述EDA技术的发展趋势和应用领域
答:
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
EDA的范畴包括:
机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
第二章VHDL硬件描述语言
1、简述实体(ENTITY)、结构体(ARCHITECTURE)与原理图的关系。
答:
结构来说实体就是原理图的外观,结构体中的具体程序就是原理图中的具体实现。
2、子程序调用与元件例化有何区别,函数与过程在具体使用上有何不同。
答:
从硬件角度讲,一个子程序的调用类似于一个元件模块的例化,VHDL综合器为子程序的每一次调用都生成一个电路逻辑块。
所不同的是,元件的例化将产生一个新的设计层次,而子程序调用只对应于当前层次的一部分。
函数和过程的不同在于:
函数只有一个输出,只能通过函数体内的RETURN语句来实现,函数体内不能有信号赋值语句;而过程却可以有不止一个输出,而且是通过过程体内的信号赋值语句或者变量赋值语句来实现的,过程体内的RETURN语句没有用处,因此不少过程都将其省略了。
函数的调用只能通过表达式来实现,过程的调用则是通过过程调用语句来实现的。
3、什么是重载函数?
重载算符有何用处?
如何调用重载算符函数。
答:
(1)什么是重载函数?
根据操作对象变换处理功能。
(2)重载算符有何用处?
用于两个不同类型的操作数据自动转换成同种数据类型,并进行运算处理。
(3)如何调用重载算符函数?
采用隐式方式调用,无需事先声明。
4、在VHDL程序中配置有何用处?
答:
配置可以把特定的结构体关联到一个确定的实体,正如配置一词本身的含义一样。
配置语句就是用来为较大的系统设计提供管理和工程组织的。
配置也是VHDL设计实体中的一个基本单元,在综合或仿真中,可以利用配置语句为确定整个设计提供许多有用信息。
总之用于设置VHDL的工作参数以及工作模式。
配置用来选择实体的多个结构体的哪一个被使用。
5.嵌套BLOCK的可视性规则是什么?
以嵌套BLOCK的语句方式设计三个并列的3输入或门。
答:
BLOCK是VHD中具有的一种划分机制,这种机制允许设计者合理地将一个模块分为数个区域,在每个块都能对其局部信号、数据类型和常量加以描述和定义。
任何能在结构体的说明部分进行说明的对象都能在BLOCK说明部分中进行说明。
相关参考代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtriple_inputIS
PORT(A:
INSTD_LOGIC;
B:
INSTD_LOGIC;
C:
INSTD_LOGIC;
OUTA:
OUTSTD_LOGIC
);
ENDtriple_input;
ARCHITECTUREADOOFtriple_inputIS
BEGIN
OUTA<=AANDBANDC;
ENDADO;
6.简述函数与过程的异同点,过程与进程的异同点。
答:
子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。
函数和过程都是串行的。
它们的区别在于:
过程的调用可以通过其界面获得多个返回值,而函数只能返回一个值;在函数入口中,所有参数都是输入参数,而过程有输入参数、输出参数和双向参数;过程一般被看作一种语句结构,而函数通常是表达式的一部分;过程可以单独存在,而函数通常作为语句的一部分调用。
过程和进程的相同点:
只能使用顺序语句,可以单独存在。
不同点:
过程不能像进程那样可以从本结构体的其他块或进程结构中直接读取信号值或者信号赋值。
7、判断下列VHDL标识符是否合法,如果不合法则指出原因:
16#0FA#,10#12F#,8#789#,8#356#,2#0101010#,74HC245,\74HC574\,CLR/RESET,\IN4/SCLK\,D100%。
答:
识符用法规定:
(1)只能包含英文字母,数字,下划线
(2)标识符的首字符只能是字母。
故:
(1)16#0FA#错在首字符是数字,且包含非法字符“#“。
10#12F#、8#789#,8#356#,2#0101010#,74HC245也是犯同一错误。
(2)\74HC574\,CLR/RESET,\IN4/SCLK\,D100%都是非法,包含非法字符….
8、讨论数据对象信号与变量间的异同处,说明它们的使用对所形成的硬件结构有何影响。
答:
在VHDL中,对象是指用来保持数据的一些客体单元。
信号跟变量是VHDL中的重要客体。
信号是指在设计实体中数据交换的一种手段,采用信号对象可以把设计实体连接在一起形成模块。
在硬件电路中代表一条硬件连线,有时信号会被综合成一个寄存器。
变量主要是对暂时数据进行局部存储,它是一个局部量。
信号与变量在使用前都必需先声明后使用,否则会产生编译错误。
信号可以architecture、package、entitiy中声明,是全局量可以在全局使用。
变量可以process、function、procedure中声明,也只能在process、function、procedur中使用不是全局变量。
他们之间的主要区别有:
信号赋值至少要有δ延时;而变量赋值没有。
信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。
进程对信号敏感而不对变量敏感。
信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。
信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。
变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。
从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。
例如在满足一定条件的进程中,综合后它们都能引入寄存器。
这时它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性。
9.运算符重载函数通常要调用转换函数,以便能够利用已有的数据类型。
下面给出一个新的数据类型AGE,并且下面的转换函数已经实现:
functionCONV_INTEGER(ARG:
AGE)returnINTEGER;请仿照本章中的例子,利用此函数编写一个“+”运算符重载函数,支持下面的运算:
SIGNALa,c:
AGE;
...
c<=a+20;
答:
function“+”(L:
AGE,R:
integer)returnAGEis
Begin
returnCONV_AGE(L+CONV_INTEGER(R));
End;
10、设计16位比较器,比较器的输入是2个待比较的16位数:
A=[A15…A0],B=[B15…B0],输出是D、E、F。
当A=B时,D=1;当A>B时,E=1;当A
用常规的比较器设计方法,即直接利用关系操作符进行编程设计,或者利用减法器来完成,通过减法运算后的符号和结果来判别两个被比较值的大小)。
答:
略
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity compare is
port(a:
in std_logic_vector(3 downto 0);
b:
in std_logic_vector(3 downto 0);
X,Y,Z:
out std_logic);
end compare;
architecture behave of compare is
begin
process(a,b)
begin
if (a > b) then
X <='1';
Y <='0';
Z <='0';
elsif(a < b) then
X <='0';
Y <='1';
Z <='0';
ELSE
X <='0';
Y <='0';
Z <='1';
end if;
end process;
end behave;
11.在VHDL编程中,为什么应尽可能使用子类型对类型的取值范围给予限定。
答:
由于子类型与其基本数据类型属同一数据类型,因此属于子类型的和属于基本数据类型的数据对象间的赋值和被赋值可以直接进行,不必进行数据类型的转换。
利用子类型定义数据对象的好处是,除了使程序提高可读性和易处理外,其实质性的好处还在于有利于提高综合的优化效率,这是因为综合器可以根据子类型所设的约束范围,有效地推知参与综合的寄存器的最合适的数目。
12、判断下面3例VHDL程序中是否有错误,若有错误则指出错误原因:
程序1
SignalA,EN:
std_logic;
Process(A,EN)
VariableB:
std_logic;
Begin
ifEN=‘1’then
B<=A;
endif;
endprocess;
程序2
Architectureoneofsampleis
variablea,b,c:
integer;
begin
c<=a+b;
end;
程序3
libraryieee;
useieee.std_logic_1164.all;
entitymux21is
port(a,b:
instd_logic;
sel:
instd_logic;
c:
outstd_logic;);①
endsam2;②
architectureoneofmux21is
begin③
ifsel='0'thenc:
=a;elsec:
=b;endif;④
⑤
endtwo;⑥
答:
程序1:
将“B<=A”改成“B:
=A”
程序2:
-将“c<=a+b”改成“c:
=a+b”
程序3:
①将“;)”改成“)”②将“sam2”改成“entitymux21”③增加“process(a,b,sel)begin④ifsel='0'thenc:
=a;elsec:
=b;endif;--应改成“ifsel='0'thenc<=a;elsec<=b;endif;”⑤增加“endprocess;”⑥将“two”改成“architectureone”
13、分别用CASE语句和IF设计3-8译码器。
答:
CASE语句:
moduledecoder38(
input[2:
0]code,
outputreg[7:
0]result
);
always@(*)
begin
case(code)
3'b000:
result=8'h01;
3'b001:
result=8'h02;
3'b010:
result=8'h04;
3'b011:
result=8'h08;
3'b100:
result=8'h10;
3'b101:
result=8'h20;
3'b110:
result=8'h40;
3'b111:
result=8'h80;
endcase
end
endmodule
IF语句:
moduledecoder38(
input[2:
0]code,
outputreg[7:
0]result
);
always@(*)
begin
if(code[2])
if(code[1])
if(code[0])
result=8'h80;
else
result=8'h40;
else
if(code[0])
result=8'h20;
else
result=8'h10;
else
else
if(code[1])
if(code[0])
result=8'h08;
else
result=8'h04;
else
if(code[0])
result=8'h02;
else
result=8'h01;
else
end
endmodule
14、若在进程中加入WAIT语句,应注意哪几个方面的问题。
答:
应注意以下问题:
①已列出敏感信号的进程中不能使用任何形式的WAIT语句;②一般情况下,只有WAITUNTIL格式的等待语句可以被综合器所接受,其余语句格式只能在VHDL仿真器中使用;③在使用WAITON语句的进程中,敏感信号量应写在进程中的WAITON语句后面;④在不使用WAITON语句的进程中,敏感信号量应在开头的关键词PROCESS后面的敏感信号表中列出。
15、图2.15中的f_adder是一位全加器,cin是输入进位,cout是输出进位。
试给出此电路的VHDL描述。
图2.15习题15图
答:
略
16.设计5位可变模数计数器。
设计要求:
令输入信号M1和M0控制计数模,即令(M1,M0)=(0,0)时为模19加法计数器,(M1,M0)=(0,1)时为模4计数器,(M1,M0)=(1,0)为模10加法计数器,(M1,M0)=(1,1)时为模6计数器。
答:
Entitymod_calis
Port(M1,M0:
inbit;
Count:
outstd_logic_vector(4downto0);
Clk:
instd_logic);
Endentity;
Architecturebehavofmod_calis
Signalcount1:
std_logic_vector(4downto0);
Begin
Process(clk,M1,M0)
Variableselisbit_vector(1downto0);
Begin
Sel:
=M1&M0;
Ifclk’eventandclk=’1’then
Count1<=Count1+1;
Caseselis
When“00”=>ifCount1=”10011”thenCount1<=”00000”;
Endif;
When“01”=>ifCount1=”00100”thenCount1<=”00000”;
Endif;
When“10”=>ifCount1=”01010”thenCount1<=”00000”;
Endif;
When“11”=>ifCount1=”00110”thenCount1<=”00000”;
Endif;
Endcase;
Endif;
Endprocess;
Count<=count1;
Endbehav;
17.什么是VHDL结构体的行为描述风格,叙述行为描述的优缺点。
答:
如果VHDL的结构体只描述了所希望电路的功能或者说电路行为,而没有直接指明或涉及实现这些行为的硬件结构,包括硬件特性、连线方式、逻辑行为方式,则称为行为风格的描述或行为描述。
优点:
抽象程度最高,最能体现VHDL描述高层次结构和系统的能力。
缺点:
只表示输入与输出间转换的行为,它不包含任何结构信息。
18.结构化描述与调用子程序有何异同点,VHDL程序中是如何进行结构化描述的?
结构化描述需要哪些语句?
答:
略
19.试举一例,在一个结构体中同时含有3种不同描述风格的VHDL语句结构。
答:
略
20.以数据流的方式设计一个2位比较器,再以结构描述方式将已设计好的比较器连接起来构成一个8位比较器
答:
略
21.采用VHDL进行数字系统设计有哪些特点?
答:
HDL系统设计的基本点:
(1)与其他硬件描述语言相比,VHDL具有以下特点:
(2)功能强大、设计灵活。
(3)强大的系统硬件描述能力。
(4)易于共享和复用。
22.VHDL的基本程序结构由几部分组成?
各部分的功能是什么?
答:
由5个部分组成,包含实体、结构体、配置、程序包和库。
实体作为一个设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述。
结构体(ARCHITECTURE)是设计实体的一个重要部分,结构体将具体实现一个实体。
在利用VHDL进行工程设计中,为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,有必要将一些有用的信息汇集在一个或几个库中以供调用,这些信息可以是预先定义好的数据类型、子程序等设计单元的集合体(程序包)或预先设计好的各种设计实体(元件库程序包)。
因此可以把库看成是一种用来存储预先完成的程序包、数据集合体和元件的仓库。
已在设计实体中定义的数据类型、子程序或数据对象对于其它设计实体是不可用的,或者说是不可见的。
为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多的VHDL设计实体方便地访问和共享,可以将它们收集在一个VHDL程序包中,多个程序包可以并入一个VHDL库中,使之适用于更一般的访问和调用范围,这一点对于大系统开发多个或多组开发人员同步并行工作显得尤为重要。
配置可以把特定的结构体关联到一个确定的实体,正如配置一词本身的含义一样。
配置也是VHDL设计实体中的一个基本单元,在综合或仿真中,可以利用配置语句为确定整个设计提供许多有用信息。
23.说明端口模式BUFFER与INOUT有何异同点?
答:
INOUT为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。
也可以从此端口读入数据,即输入。
BUFFER为缓冲端口,