EDA技术课后参考答案陈炳权曾庆立.docx
《EDA技术课后参考答案陈炳权曾庆立.docx》由会员分享,可在线阅读,更多相关《EDA技术课后参考答案陈炳权曾庆立.docx(45页珍藏版)》请在冰豆网上搜索。
EDA技术课后参考答案陈炳权曾庆立
答案由个人做出,可能有不全或错误之处,欢迎大家批评指正。
第一章
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(16 downto 0);
b:
in std_logic_vector(16 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语句:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdecoder38IS
PORT(EN:
INSTD_LOGIC;
A0,A1,A2:
INSTD_LOGIC;
Y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYdecoder38;
ARCHITECTURbhvOFdecoder38IS
SIGNALS:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
S<=A2&A1&A0;
PROCESS(EN,S)
BEGIN
IF(EN=’1’)THEN
CASESIS
WHEN“000”=>Y<=”00000001”;
WHEN“001”=>Y<=”00000010”;
WHEN“010”=>Y<=”00000100”;
WHEN“011”=>Y<=”00001000”;
WHEN“100”=>Y<=”00010000”;
WHEN“101”=>Y<=”00100000”;
WHEN“110”=>Y<=”01000000”;
WHEN“111”=>Y<=”10000000”;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREbhv;
IF语句:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdecoder38IS
PORT(EN:
INSTD_LOGIC;
A0,A1,A2:
INSTD_LOGIC;
Y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYdecoder38;
ARCHITECTURbhvOFdecoder38IS
BEGIN
PROCESS(EN,A2,A1,A0)
BEGIN
IF(EN=’1’)THEN
IF(A2=’0’)THEN
IF(A1=’0’)THEN
IF(A0=’0’)THEN
Y<=’00000001’;
ELSE
Y<=’00000010’;
ELSIF(A1=’1’)THEN
IF(A0=’0’)THEN
Y<=’00000100’;
ELSE
Y<=’00001000’;
ENDIF;
ENDIF;
ELSIF(A2=’1’)THEN
IF(A1=’0’)THEN
IF(A0=’0’)THEN
Y<=’00010000’;
ELSE
Y<=’00100000’;
ENDIF;
ELSIF(A1=’1’)THEN
IF(A0=’0’)THEN
Y<=’01000000’;
ELSE
Y<=’10000000’;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREbhv;
libraryieee;
useieee.std_logic_1164.all;
entitysssis
port(a:
instd_logic_vector(2downto0);
cout:
outstd_logic_vector(7downto0));
end;
architectureoneofsssis
begin
process(a)
begin
ifa="000"thencout<="11111110";
elsifa="001"thencout<="11111101";
elsifa="010"thencout<="11111011";
elsifa="011"thencout<="11110111";
elsifa="100"thencout<="11101111";
elsifa="101"thencout<="11011111";
elsifa="110"thencout<="10111111";
elsifa="111"thencout<="01111111";
endif;
endprocess;
end;
14、若在进程中加入WAIT语句,应注意哪几个方面的问题。
答:
应注意以下问题:
①已列出敏感信号的进程中不能使用任何形式的WAIT语句;②一般情况下,只有WAITUNTIL格式的等待语句可以被综合器所接受,其余语句格式只能在VHDL仿真器中使用;③在使用WAITON语句的进程中,敏感信号量应写在进程中的WAITON语句后面;④在不使用WAITON语句的进程中,敏感信号量应在开头的关键词PROCESS后面的敏感信号表中列出。
15、图2.15中的f_adder是一位全加器,cin是输入进位,cout是输出进位。
试给出此电路的VHDL描述。
图2.15习题15图
答:
libraryieee;
useieee.std_logic_1164.all;
entityffis
port(x,y,clock:
instd_logic;
sum:
outstd_logic);
end;
architectureoneofffis
componentf_adder
port(a,b,ci:
instd_logic;
su,co:
outstd_logic);
endcomponent;
componentdf
port(d,cl:
instd_logic;
q1:
outstd_logic);
endcomponent;
signalcout,tmp:
std_logic;
begin
u1:
f_adderportmap(a=>x,b=>y,ci=>tmp,su=>sum,co=>cout);
u2:
dfportmap(d=>cout,cl=>clock,q1=>tmp);
endarchitectureone;
--底层文件1:
D触发器
libraryieee;
useieee.std_logic_1164.all;
entitydfis
port(d,cl:
instd_logic;
q1:
outstd_logic);
end;
architecturetwoofdfis
signalqq:
std_logic;
begin
process(cl,qq)
begin
ifcl'eventandcl='1'
thenqq<=d;
endif;
endprocess;
q1<=qq;
endarchitecturetwo;
--底层文件2:
全加器
libraryieee;
useieee.