EDA期末考试题大全.docx
《EDA期末考试题大全.docx》由会员分享,可在线阅读,更多相关《EDA期末考试题大全.docx(29页珍藏版)》请在冰豆网上搜索。
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语句缺“WHENOTHERS”语句。
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内。
三.程序设计
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
SIGNALR16S:
STD_LOGIC_VECTOR(15DOWNTO0);
--16位寄存器设置
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENR16S<="00000";
--异步复位信号
ELSIFCLK'EVENTANDCLK='1'THEN
--时钟到来时,锁存输入值
R16S(6DOWNTO0)<=R16S(7DOWNTO1);
--右移低8位
R16S(15DOWNTO7)<=D;
--将输入锁到高能位
ENDIF;
ENDPROCESS;
Q<=R16S;
ENDART;
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
SIGNALREG8B:
STD_LOGIC_VECTOR(7DOWNTO0);
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_2ofnand4si
begin
p1:
process(a,b,c,d)
variabletmp:
std_logic_vector(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;
en