EDA期末考试题大全
附带:
一.问答题
1信号赋值语句在什么情况下作为并行语句?在什么情况下作顺序语句?信号赋值和变量赋值符号分别是什么?两种赋值符号有什么区别?
信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置无关。信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处的位置有关。
信号赋值符号为“<=”变量赋值用“:=”。信号赋值符号用于信号赋值动作,不立即生效。变量,赋值符号用于变量赋值动作,立即生效。
2进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用?
进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。
3什么是库、程序包、子程序、过程调用和函数调用?
库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。若子程序调用的是一个过程,就称为过程调用,若子程序调用的是一个函数,则称为函数调用。过程调用、函数调用都是子程序调用。
二.改错题
1.已知sel为STD_LOGIC_VECTOR(1DOWNTO0)类型的信号,而a、b、c、d、q均为STD_LOGIC
类型的信号,请判断下面给出的CASE语句程序片段:
CASEselIS
WHEN“00”=>q<=a;
WHEN“01”=>q<=b;
WHEN“10”=>q<=c;
WHEN“11”=>q<=d;
ENDCASE;
答案:CASE语句缺“WHENOTH ERS”语句。
2.已知data_in1,data_in2为STD_LOGIC_VECTOR(15DOWNTO0)类型的输入端口,data_out为STD_LOGIC_VECTOR(15DOWNTO0)类型的输出端口,add_sub为STD_LOGIC类型的输入端口,请判断下面
给出的程序片段:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYaddIS
PORT(data_in1,data_in2:ININTEGER;
data_out:OUTINTEGER);
ENDadd;
ARCHTECTUREadd_archOFaddIS
CONSTANTa:INTEGER<=2;
BEGIN
data_out<=(data_in1+data_in2)*a;
ENDaddsub_arch;
答案:常量声明时赋初值的“<=”符号应改用“:=”符号。
3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:
ARCHITECTUREtest_archOFtestIS
BEGIN
SIGNALB:STD_LOGIC;
Q<=B;
ENDtest_arch
答案:信号SIGNAL的声明语句应该放在BEGIN语句之前。
4.已知A和Q均为BIT类型的信号,请判断下面的程序片段:
ARCHITECTUREarchtestOFtestIS
BEGIN
CASEAIS
WHEN‘0’=>Q<=‘1’;
WHEN‘1’=>Q<=‘0’;
ENDCASE;
ENDarchtest;
答案:CASE语句应该存在于进程PROCESS内。
三.程序设计
1@4位二进制并行加法器的源程序ADDER4B.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYADDER4BIS--4位二进制并行加法器
PORT(CIN:INSTD_LOGIC;--低位进位
A:INSTD_LOGIC_VECTOR(3DOWNTO0);--4位加数
B:INSTD_LOGIC_VECTOR(3DOWNTO0);--4位被加数
S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--4位和
CONT:OUTSTD_LOGIC);
ENDADDER4B;
ARCHITECTUREARTOFADDER4BIS
SIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);
SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
AA<='0'&A;--将4位加数矢量扩为5位,为进位提供空间
BB<='0'&B;--将4位被加数矢量扩为5位,为进位提供空间
SINT<=AA+BB+CIN;
S<=SINT(3DOWNTO0);
CONT<=SINT(4);
ENDART;
2@8位二进制加法器的源程序ADDER8B.VHD
LIBRARYIEEE;
USEIEEE_STD.LOGIC_1164.ALL;
USEIEEE_STD.LOGIC_UNSIGNED.ALL:
ENTITYADDER8BIS
--由4位二进制并行加法器级联而成的8位二进制加法器
PORT(CIN:INSTD_LOGIC;
A:INSTD_LOGIC_VECTOR(7DOWNTO0);
B:INSTD_LOGIC_VECTOR(7DOWNTO0);
S:OUTSTD_LOGIC_VECTOR(7DOWNTO0);
COUT:OUTSTD_LOGIC);
ENDADDER8B;
ARCHICTUREARTOFADDER8BIS
COMPONENETADDER4B
--对要调用的元件ADDER4B的界面端口进行定义
PORT(CIN:INSTD_LOGIC;
A:INSTD_LOGIC_VECTOR(3DOWNTO0);
B:INSTD_LOGIC_VECTOR(3DOWNTO0);
S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CONT:OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALCARRY_OUT:STD_LOGIC;--4位加法器的进位标志
BEGIN
U1:ADDER4B--例化(安装)一个4位二进制加法器U1
PORTMAP(CIN=>CIN,A=>A(3DOWNTO0),B=>B(3DOWNTO0),
S=>S(3DOWNTO0),COUT=>CARRY_OUT);
U2:ADDER4B--例化(安装)一个4位二进制加法器U2
PORTMAP(CIN=>CARRY_OUT,A=>A(7DOWNTO4),B=>B(7DOWNTO4),S=>S(7DOWNTO4);CONT=>CONT);
ENDART;
3.@触发器和缓冲器
D触发器:Process(clk)
begin
if(clk’eventandclk=‘1’) then
q<=d;
endif;
endprocess;
缓冲器:Process(clk)
begin
if(clk=‘1’)then
q<=d;
endif;
endprocess;
T触发器:Process(clk)
begin
if(clk’eventandclk=‘1’) then
if(t=‘1’)then
q<=not(q);
else
q<=q;
endif;
endif;
endprocess;
4.@16位锁存器的源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG16BIS --16位锁存器
PORT(CLK:INSTD_LOGIC;--锁存信号
CLR:INSTD_LOGIC;--清零信号
D:INSTD_LOGIC_VECTOR(8DOWNTO0) --8位数据输入
Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));--16位数据输出
ENDREG16B;
ARCHITECTUREARTOFREG16BIS
--16位寄存器设置
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENR16S<="0000000000000000";
--异步复位信号
ELSIFCLK'EVENTANDCLK='1'THEN
--时钟到来时,锁存输入值
R16S(6DOWNTO0)<=R16S(7DOWNTO1);
--右移低8位
R16S(15DOWNTO7)<=D;
--将输入锁到高能位
ENDIF;
ENDPROCESS;
Q<=R16S;
ENDART;
5@8位右移寄存器的源程序SREG8B.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL; --8位右移寄存器
ENTITYSREG8BIS
PORT(CLK:INSTD_LOGIC;LOAD:INSTD_LOGIC;
BIN:INSTD_LOGIC_VECTOR(7DOWNTO0);
QB:OUTSTD_LOGIC);
ENDSREG8B;
ARCHITECTUREARTOFSREG8BIS
BEGIN
PROCESS(CLK,LOAD)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFLOAD='1'THENREG8<=DIN;--装载新数据
ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1);--数据右移
ENDIF;
ENDIF;
ENDPROCESS;
QB<=REG8(0);--输出最低位
ENDART;
6@8位乘法器的源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;--8位乘法器顶层设计
ENTITYMULTI8X8IS
PORT(CLK:INSTD_LOGIC;
START:INSTD_LOGIC;
--乘法启动信号,高电平复位与加载,低电平运算
A:INSTD_LOGIC_VECTOR(7DOWNTO0);--8位被乘数
B:INSTD_LOGIC_VECTOR(7DOWNTO0);--8位乘数
ARIEND:OUTSTD_LOGIC;--乘法运算结束标志位
DOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0));--16位乘积输出
ENDMULTI8X8;
ARCHITECTUREARTOFMULTI8X8IS
COMPONENTARICTL--待调用的乘法控制器端口定义
PORT(CLK:INSTD_LOGIC;START:INSTD_LOGIC;
CLKOUT:OUTSTD_LOGIC;RSTALL:OUTSTD_LOGIC;
ARIEND:OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTANDARITH --待调用的控制与门端口定义
PORT(ABIN:INSTD_LOGIC;
DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);
DOUT:OUT_STD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENT;
COMPONENTADDER8B --待调用的8位加法器端口定义
COMPONENTSREG8B --待调用的8位右移寄存器端口定义
...
COMPONENTREG16B --待调用的16右移寄存器端口定义
...
SIGNALGNDINT:STD_LOGIC;
SIGNALINTCLK:STD_LOGIC;
SIGNALRSTALL:STD_LOGIC;
SIGNALQB:STD_LOGIC;
SIGNALANDSD:STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALDTBIN:STD_LOGIC_VECTOR(8DOWNTO0);
SIGNALDTBOUT:STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
DOUT<=DTBOUT;GNDINT<='0';
U1:ARICTLPORTMAP(CLK=>CLK,START=>START,
CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND);
U2:SREG8BPORTMAP(CLK=>INTCLK,LOAD=>RSTALL.
DIN=>B,QB=>QB);
U3:ANDARITHPORTMAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);
U4:ADDER8BPORT
MAP(CIN=>GNDINT,A=>DTBOUT(15DOWNTO8),
B=>ANDSD,S=>DTBIN(7DOWNTO0),COUT=>DTBIN(8));
U5:REG16BPORTMAP(CLK=>INTCLK,CLR=>RSTALL,
D=>DTBIN,Q=>DTBOUT);
ENDART;
7@有时钟使能的十进制计数器的源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL; --有时钟使能的十进制计数器ENTITYCNT10IS
PORT(CLK:INSTD_LOGIC;--计数时钟信号
CLR:INSTD_LOGIC;--清零信号
END:INSTD_LOGIC;--计数使能信号
CQ:OUTINTEGERRANGE0TO15;--4位计数结果输出
CARRY_OUT:OUTSTD_LOGIC);--计数进位
ENDCNT10;
ARCHITECTUREARTOFCNT10IS
SIGNALCQI:INTEGERRANGE0TO15;
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<=0;--计数器异步清零ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI<9THENCQI<=CQI+1;
ELSECQI<=0;ENDIF;--等于9,则计数器清零
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CQI)
BEGIN
IFCQI=9THENCARRY_OUT<='1';--进位输出
ELSECARRY_OUT<='0';ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
8@)六进制计数器的源程序CNT6.VHD(十进制计数器的源程序
CNT10.VHD与此类似)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT6IS
PORT(CLK:INSTD_LOGIC;
CLR:INSTD_LOGIC;
ENA:INSTD_LOGIC;
CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:OUTSTD_LOGIC);
ENDCNT6;
ARCHITECTUREARTOFCNT6IS
SIGNALCQI:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI=“0101”THENCQI<=“0000”;
ELSECQI<=CQI+'1';ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CQI)
BEGIN
IFCQI=“0000”THENCARRY_OUT<='1';ELSECARRY_OUT<='0';ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
9@十进制计数器
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYcount10IS
PORT(clk:INSTD_LOGIC;
seg:OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDcount10;
ARCHITECTUREa1OFcount10IS
signalsec:STD_LOGIC;
signalq:STD_LOGIC_VECTOR(21DOWNTO0);
signalnum:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
process(clk)----get1hzclockpulse
begin
ifclk'eventandclk='1'thenq<=q+1;endif;
sec<=q(21);--get1hzclockpulse
endprocess;
timing:process(sec)begin
ifsec'eventandsec='1'then
ifnum<9thennum<=num+1;elsenum<="0000";endif;
endif;
endprocess;
B1:block--bcd-7segs
Begin--gfedcba
seg<="0111111"whennum=0else
"0000110"whennum=1else
"1011011"whennum=2else
"1001111"whennum=3else
"1100110"whennum=4else
"1101101"whennum=5else
"1111101"whennum=6else
"0000111"whennum=7else
"1111111"whennum=8else
"1101111"whennum=9else
"0000000";
endblock;
ENDa1;
10@4MHz到1Hz的分频器
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL; ENTITYcountIS
PORT(clk:inSTD_LOGIC;
q:outSTD_LOGIC;
ENDcount;
ARCHITECTUREaOFcountIS
signaltmp:STD_LOGIC_vector(21downto0); Begin
process(clk)begin
ifclk'eventandclk='1'thentmp<=tmp+1;endif; endprocess;
q<=tmp(21);
ENDa;
11@与门
ENTITYshili2is
port(
input1:instd_logic; inptu2:instd_logic; output1:outstd_logic
);
endentity; architectureoneofshili2is begin
output1<=input1andinput2;
endentity;
12@.四输入与门电路
libraryieee;
useieee.std_logic_1164.all ;
entityand4is
port(a,b,c,d:instd_logic;
y:outstd_logic;
endand4;
architectureand4_1ofand4is
begin
y<=aandbandcandd;
endnand4_1;
法二(与非门):
libraryieee;
useieee.std_logic_1164.all
entitynand4is
port(a.b,c,d:instd_logic;
y:outstd_logic);
endnand4;
architecturenand4_2ofnand4 si
begin
p1:process(a,b,c,d)
variabletmp:std_logic_vect or(3downto0);
begin
tmp:=a&b&c&d; casetmpis when"0000"=>y<='1'; when"0001"=>y<='1'; when"0010"=>y<='1'; when"0011"=>y<='1'; when"0100"=>y<='1'; when"0101"=>y<='1'; when"0110"=>y<='1'; when"0111"=>y<='1'; when"1000"=>y<='1'; when"1001"=>y<='1'; when"1010"=>y<='1'; when"1011"=>y<='1'; when"1100"=>y<='1'; when"1101"=>y<='1'; when"1110"=>y<='1'; when"1111"=>y<='1'; whenothers=>y<='x'; endcase; endprocess; endnand4_2;
13@四位全加器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityaddis
port(a,b:instd_logic_vector(3downto0);
cin:instd_logic;
s:outstd_logic_vector(3downto0);
cout:outstd_logic);
endadd;
architecturebehofaddis
begin
process(a,b,cin)
ariablex:std_logic_vector(3downto0);
variablem,n,l:integer;
begin
m:=conv_integer(a);
n:=conv_integer(b);
l:=m+n+conv_integer(cin);
x:=conv_std_logic_vector(l,4);
s<=x(3downto0);
cout<=x(3);
endprocess;
endbeh;
14@N位移位寄存器:page70
15@8位通用寄存器:page137
16@串入串出移位寄存器:page138
17@10位计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,clr:INSTD_LOGIC;
CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYCNT10;
ARCHITECTUREONEOFCNT10IS
BEGIN
PROCESS(CLK,clr)
VARIABLELCQ:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST=‘1’THENLCQ:=“0000”;
ELSIFCLK’EVENTANDCLK=‘1’THEN
IFLCQ<9THENLCQ:=LCQ+1;
ELSELCQ:=“0000”;
ENDIF;ENDIF;
CQ<=LCQ;
ENDPROCESS;
ENDARCHITECTUREONE;
18@八位串行二进制全加器
useieee.std_logic_1164.all;
entityproduct_adder_subtracteris
port(
a,b:instd_logic_vector(7downto0);
s:outstd_logic_vector(8downto0));
end;
architecturebehavioralofproduct_adder_subtracteris begin
behavior:process(a,b)is
variablecarry_in:std_logic;
variablecarry_out:std_logic;
variableop2:std_logic_vector(b'range);
begin
op2:=b;
endif;
forindexin0to7loop
carry_in:=carry_out;
s(index)<=a(index)xorop2(index)xorcarry_in;
carry_out:=(a(index)andop2(index))
or(carry_inand(a(index)xorop2(index)));
endloop;
s(8)<=a(7)xorop2(7)xorcarry_out;
endprocess;
end;
EDA知识要点:
1、目前流行的HDL语言有那些?;
2、什么是ASIC。
3、VHDL是由什么机构制定并公布的。
4、VHDL的两大类基本描述语句是什么。
5、MAX+PLUSⅡ平台上,原理图、仿真波形文件、VHDL文件的扩展
名是什么?
6、结构体常见的功能语句有那些?
7、子程序分为那两类,其结构为什么。
8、信号与变量的赋值有何区别?。
9、可编程器件分为哪些类?
10、VHDL中常见的库有那些?。
11、不完整的条件语句与完整的条件语句生成的电路有何区别
12、VHDL的标识符由什么构成。
13、VHDL中预定义数据类型有那些?。
14、CASE语句使用当中的注意事项。
15、目前国际上较大的PLD器件制造公司有那几家公司。
16、VHDL数据对象有什么
17、赋值语句分哪些类,分别写出一句赋值语句。
18、实现时序电路和逻辑组合电路分别用什么语句实现,分别写出他们的一般表式。
19、简述元件例化语句组成及语句格式。
20、数据对象有哪些种,分别写出定义这些数据对象的一般表述格式。
21、简述进程语句的使用要点?
22、写出VHDL常用的顺序语句的名称。
23、简述VHDL逻辑操作符的种类及所允许的操作数的数据类型。
24、EDA技术的含义。
25、VHDL语言中的逻辑操作符有那些?
26、目前较流行的集成EDA开发环境(软件)有那些?
27、简述EDA技术的CPLD/FPGA的设计流程。
28、写出实体中的PORT语句结构并说明其作用。
29、简述EDA技术经历了那几个发展阶段。
30、写出元件例化语句语句格式,并说明其作用。
31、试比较图形输入法和文本输入法有何优缺点?
32、结构体的语言格式与作用。
33、写出PROCESS语句结构的一般表达格式?
34、EDA技术常用的输入方法有?
35、什么是实体和结构体,其功能是什么?,
36、MAX+pulsⅡ的编辑窗口有那几种,分别是什么?
37、MAX+pulsⅡ的原理图输入法、文本输入法、波形输入法生成
的文件扩展名为?
38、VHDL的操作符有那几大类?每一类的操作符分别是什么?
每一类操作符可以对那些数据进行操作(运算)?
39、VHDL中如没有特别的说明算术操作符‘+’号对应的操作数
为什么类型
40、可编程器件(PLD)分为哪两类
41、标准逻辑位数据类型常用的数值有哪几种?
42、在VHDL语言中常见的的数据类型有那些?
43、完整的条件语句将产生什么电路,不完整的条件语句将产生
什么电路。
44、信号和变量有什么区别?
45、VHDL作为工业标准,是由那个机构制定并公布的。