2008/2009 学年第一学期末考试试题答案及评分标准
(B卷)
硬件描述语言及器件
使用班级:06060241/06060242
一、填空题(30分,每空格1分)
1、试举出两种可编程逻辑器件 CPLD 、 FPGA 。
2、VHDL程序的基本结构至少应包括实体、结构体两部分和对
库的引用声明。
3、1_Digital标识符合法吗?否, \12 @ +\ 呢?合法。
4、在VHDL的常用对象中,信号、变量可以被多次赋予不同的值,
常量只能在定义时赋值。
5、实体的端口模式用来说明数据、信号通过该端口的传输方向,端口模式有 in 、
Out 、 inout 、 buffer 。
6、VHDL语言中std_logic类型取值‘Z’表示高阻,取值‘X’表示不确定。
7、整型对象的范围约束通常用 range 关键词,位矢量用 downto/to 关键词。
8、位类型的初始化采用(字符/字符串)字符、位矢量用字符串。
9、进程必须位于结构体内部,变量必须定义于进程/包/子程序内部。
10、并置运算符 & 的功能是把多个位或位向量合并为一个位向量。
11、进程执行的机制是敏感信号发生跳变。
12、判断CLK信号上升沿到达的语句是 if clk’event and clk = ‘1’ then .
13、 IF 语句各条件间具有不同的优先级。
14、任何时序电路都以时钟为驱动信号,时序电路只是在时钟信号的边沿到来时,
其状态才发生改变。
15、 Moore 状态机输出只依赖于器件的当前状态,与输入信号无关。
二、判断对错并改正(12分,每小题3分)
1、CONSTANT T2:std_logic <= ’0’;
(错)改正:把<= 换为:= 。
2、若某变量被定义为数值型变量,未赋初始值时默认值为‘0’。
(错)改正:把‘0’的单引号去掉。
3、在结构体中定义一个全局变量(V ARIABLES),可以在所有进程中使用。
(错)改正:“变量(V ARIABLES)”改为“信号”。
4、语句 type wr is (wr0,wr1,wr2,wr3,wr4,wr5); 定义了一个状态机变量wr,
可以直接对wr赋值。
(错)改正:语句 type wr is (wr0,wr1,wr2,wr3,wr4,wr5); 定义了一个状态机类型wr,需要定义一个该类型的对象,才可以对该对象赋值。
三、简答(8分,每小题4分)
1、简述如何利用计数器精确控制时序。
⏹只要知道晶振频率f,即可知道周期T=1/f;
⏹使用一个计数器,可以通过计数值n,精确知道当计数值为n时消耗的时间t=nT;
⏹上例中以n为控制条件,可以控制其它信号在某时刻变高,某时刻变低,从而产生精
确时序;
例如:
⏹PROCESS (clr,clk)
⏹BEGIN
⏹ IF(clr=1) THEN
⏹Count_B<=“00000000”;
⏹q <= ‘0’;
⏹ ELSIF (clk'EVENT AND clk = ‘1’ ) THEN
⏹Count_B<=count_B + 1;
⏹IF (Count_B = “00000000”) THEN
⏹q <= ‘1’;
⏹ELSIF (Count_B = “00000001”) THEN
⏹q <= ‘0’;
⏹ELSIF (Count_B = “00000011”) THEN
⏹q <= ‘1’;
⏹ELSIF (Count_B = “00000100”) THEN
⏹q <= ‘0’;
⏹END IF;
⏹ END IF;
⏹END PROCESS;
2、简述moore状态机和mealy状态机的区别。
从输出的时序上看,Mealy机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的。
Moore机的输出则仅为当前状态的函数,在输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化。
Moore型状态机:次态=f(现状,输入),输出=f(现状);
Mealy型状态机:次态=f(现状,输入),输出=f(现状,输入);
四、编程(共50分)
1、完成下图所示的触发器。
(本题10分)
library IEEE;
use IEEE.std_logic_1164.all;
entity VposDff is
port (CLK, CLR, D: in STD_LOGIC; ----------2分
Q, QN: out STD_LOGIC ); ----------4分
end VposDff;
architecture VposDff_arch of VposDff is
begin
process ( CLK, CLR ) ----------6分
begin
if CLR='1' then Q <= '0'; QN <='1';
elsif CLK'event and CLK='1' then
Q <= D; QN <= not D; ----------8分 end if;
end process; ----------10分end VposDff_arch;
2、完成以下4位全加器代码(本题10分)
library IEEE;
use IEEE.std_logic_1164.all;
entity full_add is
port (
a,b: in std_logic_vector (3 downto 0);
cin: in std_logic;
cout: out std_logic;
sum: out std_logic_vector (3 downto 0)
);
end full_add;
architecture full_add_arch of full_add is
component adder
port ( a,b,c: in std_logic;
carr: out std_logic;
sum: out std_logic );
end component;
signal c1,c2,c3: std_logic; 2分
begin
u0:adder port map(a(0),b(0),cin,c1,sum(0)); 4分
u1:adder port map(a(1),b(1),c1,c2,sum(1)); 5分
u2:adder port map(a(2),b(2),c2,c3,sum(2)); 6分
u3:adder port map(a(3),b(3),c3,cout,sum(3)); 10分end full_add_arch;
3、补充完整如下代码,使之完成4状态不断循环。
(本题10分)
ARCHITECTURE arc OF ss IS
type states is ( st0,st1,st2,st3 ); 2分
signal outc: states; 4分
BEGIN
PROCESS(clk)
BEGIN
IF reset='1' then
outc <=st0 ; 6分
elsif clk'event and clk='1' then
CASE outc IS
WHEN st0 => outc <= st1; 7分
WHEN st1 => outc <= st2; 8分
WHEN st2 => outc <= st3; 9分
WHEN st3 => outc <= st0; 10分
WHEN OTHERS => outc <=st0;
END CASE;
end if;
END PROCESS;
END arc;
4、设计异或门逻辑:(本题20分)
如下异或门,填写右边的真值表。
(此项5分)
其表达式可以表示为:(此项5分)
这一关系图示如下:
试编写完整的VHDL代码实现以上逻辑。
可以采用任何描述法。
(此项10分)
a
library ieee;
use ieee.std_logic_1164.all; 1分entity yihuo1 is
port( a,b :in std_logic;
y :out std_logic );
end yihuo1; 4分architecture yihuo1_behavior of yihuo1 is
begin 7分process(a,b) y<=a xor b;
begin (第2种写法)
if a=b then
y<='0';
else
y<='1';
end if;
end process;
end yihuo1_behavior; 10分。