中北大学08硬件描述语言试题1.docx
《中北大学08硬件描述语言试题1.docx》由会员分享,可在线阅读,更多相关《中北大学08硬件描述语言试题1.docx(12页珍藏版)》请在冰豆网上搜索。
中北大学08硬件描述语言试题1
中北大学
试题答案及评分标准
硬件描述语言及器件课程
(课程名称须与教学任务书相同)
2007/2008学年第一学期
试题类别A
拟题日期2008-1-6拟题教师李圣昆
课程编号教师编号1180011
使用班级05182401/2/3
备注:
试题答案要求按指定规格计算机打印,并将其文本与电子稿一并上交:
①校级考试课程交评估与考试中心命题科;
②院级考试课程交院教务科。
2007/2008学年第一学期末考试试题答案及评分标准
(A卷)
硬件描述语言及器件
使用班级:
05182401/2/3
总分
得分
一、填空题(20分,每空格1分)
1、VHDL是否区分大小写?
不区分。
2、digital__8标识符合法吗?
不合法。
12_bit标识符合法吗?
不合法。
signal标识符合法吗?
不合法。
3、结构体有三种描述方式,分别是数据流、行为、
和结构化。
4、请分别列举一个常用的库和程序包libraryieee、useieee.std_logic_1164.all。
5、一个信号处于高阻(三态)时的值在VHDL中描述为‘Z’。
6、将一个信号width定义为一个4位标准逻辑向量为
signalwidth:
std_logic_vector(3downto0)。
7、/=是不相等操作符,功能是在条件判断是判断操作符两端不相等。
8、设D0为'0',D1为'1',D2为'1',D3为'0',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='0'then
caseaddris
when"0000"=>
data<="10001001";
when"0001"=>
data<="10001010";
when"0010"=>
data<="10001011";
when"0011"=>
data<="10001100";
when"0100"=>
data<="10001101";
when"0101"=>
data<="10001110";
when"0110"=>
data<="10001111";
when"0111"=>
data<="10010000";
when"1000"=>
data<="10010001";
when"1001"=>
data<="10010010";
when"1010"=>
data<="10010011";
when"1011"=>
data<="10010100";
when"1100"=>
data<="10010101";
when"1101"=>
data<="10010110";
when"1110"=>
data<="10010111";
whenothers=>
data<="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:
instd_logic;
sel:
instd_logic;
q:
outstd_logic
);
Endsel2;(3)
Architectureaofsel2is
begin
ifsel=‘0’then
q<=a;(6)
else
q<=b;(9)
endif;
enda;(10)
2、编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复位信号reset低电平时计数器清零,变高后,在上升沿开始工作;输入时钟信号为clk,输出为q。
(本题10分)
Process(reset,clk)
(2)
begin
ifreset=‘0’then
q<=“0000”;(4)
elsifclk’eventandclk=‘1’then(6)
q<=q+1;(9)
endif;
endprocess;(10)
3、填写完成一个8-3线编码器的真值表(5分),并写出其VHDL程序(10分)。
8-3线编码器真值表
en
b
y0y1y2
1
00000000
000
1
00000010
001
1
00000100
010
1
00001000
011
1
00010000
100
1
00100000
101
1
01000000
110
1
10000000
111
0
xxxxxxxx
高阻态
entityeight_triis
port(
b:
instd_logic_vector(7downto0);
en:
instd_logic;
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”;(10)
enda;
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:
instd_logic;
carr:
inoutstd_logic;
sum:
outstd_logic
);
endadder;
architectureadder_archofadderis
begin
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:
instd_logic;
carr:
inoutstd_logic;
sum:
outstd_logic
);
endcomponent;(10)
begin
carr(0)<='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)
0
0
判断(DECISION)
0
0
写(WRITE)
0
1
读(READ)
1
0
存储器控制器状态图
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<=‘0’;
IF(ready='1')THEN
next_state<=decision;
ELSE
next_state<=idle;
ENDIF;
WHENdecision=>
oe<=‘0’;
we<=‘0’;
IF(read_write='1')THEN
next_state<=read;
ELSE
next_state<=write;
ENDIF;
WHENread=>
oe<=‘1’;
we<=‘0’;
IF(ready='1')THEN
next_state<=idle;
ELSE
next_state<=read;
ENDIF;
WHENwrite=>
oe<=‘0’;
we<=‘1’;
IF(ready='1')THEN
next_state<=idle;
ELSE
next_state<=write;
ENDIF;
ENDCASE;
ENDPROCESSstate_comb;
state_clocked:
PROCESS(clk)
BEGIN
IFclk’eventandclk=‘1’THEN
present_state<=next_state;
ENDIF;
ENDPROCESSstate_clocked;
ENDstate_machine;