中北大学08硬件描述语言试题1文档格式.docx
《中北大学08硬件描述语言试题1文档格式.docx》由会员分享,可在线阅读,更多相关《中北大学08硬件描述语言试题1文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
5、一个信号处于高阻(三态)时的值在VHDL中描述为‘Z’。
6、将一个信号width定义为一个4位标准逻辑向量为
signalwidth:
std_logic_vector(3downto0)。
7、/=是不相等操作符,功能是在条件判断是判断操作符两端不相等。
8、设D0为'
0'
D1为'
1'
D2为'
D3为'
D3&
D2&
D1&
D0的运算结果是
“0110”,(D3orD2)and(D1andnotD0)的运算结果是:
‘1’。
9、赋值语句是(并行/串行)并行执行的,if语句是(并行/串行)串行执行的。
10、请列举三种可编程逻辑器件:
EEPROM、GAL、FPGA。
二、简答(20分,每小题5分)
1、简述VHDL程序的基本结构。
库
(1)
程序包
(2)
实体(3)
结构体(5)若答出配置也可加1分
2、简述信号与变量的区别。
信号延时赋值,变量立即赋值
(2)
信号的代入使用<
=,变量的代入使用:
=;
(4)
信号在实际的硬件当中有对应的连线,变量没有(5)
3、简述可编程逻辑器件的优点。
●集成度高,可以替代多至几千块通用IC芯片
–极大减小电路的面积,降低功耗,提高可靠性
(1)
●具有完善先进的开发工具
–提供语言、图形等设计方法,十分灵活
–通过仿真工具来验证设计的正确性
(2)
●可以反复地擦除、编程,方便设计的修改和升级(3)
●灵活地定义管脚功能,减轻设计工作量,缩短系统开发时间(4)
●保密性好(5)
4、试比较moore状态机与mealy状态机的异同。
Moore输出只是状态机当前状态的函数(3)
Mealy输出为有限状态机当前值和输入值的函数(5)
三、判断题(10分)
libraryieee;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
以上库和程序包语句有无错误?
有,有的话请在原程序相应位置改正。
(2)
entityromis
port(
addr:
instd_logic_vector(0to3);
ce:
instd_logic;
data:
outstd_logic_vector(7downto0);
)
endrom;
以上port语句有无错误?
(4)
architecturebehaveofromis
begin
process(ce,addr)(6)
begin
ifce='
then
caseaddris
when"
0000"
=>
data<
="
10001001"
;
0001"
10001010"
0010"
10001011"
0011"
10001100"
0100"
10001101"
0101"
10001110"
0110"
10001111"
0111"
10010000"
1000"
10010001"
1001"
10010010"
1010"
10010011"
1011"
10010100"
1100"
10010101"
1101"
10010110"
1110"
10010111"
whenothers=>
10011000"
endcase;
else
data:
00000000"
--data<
=“00000000”;
(8)
endif;
(10)
endprocess;
endbehave;
以上architecture中有哪些错误?
请在原程序相应位置改正。
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个二选一电路,要求输入a、b,sel为选择端,输出q。
(本题10分)
Entitysel2is
Port(
a,b:
sel:
q:
outstd_logic
);
Endsel2;
(3)
Architectureaofsel2is
ifsel=‘0’then
q<
=a;
(6)
=b;
(9)
enda;
(10)
2、编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复位信号reset低电平时计数器清零,变高后,在上升沿开始工作;
输入时钟信号为clk,输出为q。
Process(reset,clk)
(2)
ifreset=‘0’then
=“0000”;
(4)
elsifclk’eventandclk=‘1’then(6)
=q+1;
(9)
endprocess;
(10)
3、填写完成一个8-3线编码器的真值表(5分),并写出其VHDL程序(10分)。
8-3线编码器真值表
en
b
y0y1y2
1
00000000
000
00000010
001
00000100
010
00001000
011
00010000
100
00100000
101
01000000
110
10000000
111
xxxxxxxx
高阻态
entityeight_triis
b:
instd_logic_vector(7downto0);
en:
y:
outstd_logic_vector(2downto0)
);
endeight_tri;
(3)
architectureaofeight_triis
signalsel:
std_logic_vector(8downto0);
(4)
begin
sel<
=en&
b;
y<
=“000”when(sel=”100000001”)else
“001”when(sel=”100000010”)else
“010”when(sel=”100000100”)else
“011”when(sel=”100001000”)else
“100”when(sel=”100010000”)else
“101”when(sel=”100100000”)else
“110”when(sel=”101000000”)else
“111”when(sel=”110000000”)else(9)
“zzz”;
4、根据已给出的全加器的VHDL程序,试写出一个4位逐位进位全加器的VHDL程序。
(本题15分)
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entityadderis
port(
a,b,c:
carr:
inoutstd_logic;
sum:
);
endadder;
architectureadder_archofadderis
sum<
=axorbxorc;
carr<
=(aandb)or(bandc)or(aandc);
endadder_arch;
entityfull_addis
port(
a,b:
instd_logic_vector(3downto0);
carr:
inoutstd_logic_vector(4downto0);
sum:
outstd_logic_vector(3downto0)
endfull_add;
(5)
architecturefull_add_archoffull_addis
componentadder
port(
a,b,c:
);
endcomponent;
(10)
carr(0)<
='
u0:
adderportmap(a(0),b(0),carr(0),carr
(1),sum(0));
u1:
adderportmap(a
(1),b
(1),carr
(1),carr
(2),sum
(1));
u2:
adderportmap(a
(2),b
(2),carr
(2),carr(3),sum
(2));
u3:
adderportmap(a(3),b(3),carr(3),carr(4),sum(3));
endfull_add_arch;
(15)
五、附加题(10分,本题可产生附加分,全卷不能超过100分)
完成下面moore状态机程序,该设计为一个存储控制器状态机。
能够根据微处理器的读写周期,分别对存储器输出写使能WE和读使能OE信号。
工作过程:
存储控制器的输入信号为微处理器的就绪READY及读写read_write信号。
当上电复位后,或read有效时,存储控制器开始工作,并在下一个时钟周期判断本次作业任务是读存储器还是写存储器。
判断的依据是,当read_write有效时为读操作,否则为写操作。
也就是说非读即写。
读操作时,OE信号有效,写操作时,WE信号有效。
当READY信号有效时,表示读本次作业处理完成,并使控制器恢复到初始状态。
控制器真值表和状态图如下。
存储控制器真值表
状态
输出
OE
WE
空闲(IDLE)
判断(DECISION)
写(WRITE)
读(READ)
存储器控制器状态图
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmooreIS
PORT(clk,ready,read_write:
INStd_Logic;
oe,we:
OUTStd_Logic);
ENDmoore;
ARCHITECTUREstate_machineOFMooreIS
TYPEstate_typeIS(idle,decision,write,read);
SIGNALpresent_state,next_state:
state_type;
BEGIN
state_comb:
PROCESS(present_state,ready,read_write)
BEGIN
CASEpresent_stateIS
WHENidle=>
oe<
=‘0’;
we<
IF(ready='
)THEN
next_state<
=decision;
ELSE
=idle;
ENDIF;
WHENdecision=>
IF(read_write='
=read;
=write;
WHENread=>
=‘1’;
WHENwrite=>
=idle;
=write;
ENDCASE;
ENDPROCESSstate_comb;
state_clocked:
PROCESS(clk)
IFclk’eventandclk=‘1’THEN
present_state<
=next_state;
ENDPROCESSstate_clocked;
ENDstate_machine;