VHDL5套试卷标准答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

填空题:
1、一般将一个完整的VHDL程序称为设计实体
2、VHDL设计实体的基本结构由(库)、(程序包)、(实体)、(结构体)和(配置)组成。

3、(实体)和(结构体)是设计实体的基本组成部分,它们可以构成最基本的VHDL 程序。

4、根据VHDL语法规则,在VHDL程序中使用的文字、数据对象、数据类型都需要(事先声明)。

5、在VHDL中最常用的库是(IEEE)标准库,最常用的数据包是(STD_LOGIC_1164)数据包。

6、VHDL的实体由(实体声明)部分和(结构体)组成。

7、VHDL的实体声明部分指定了设计单元的(输入出端口)或(引脚),它是设计实体对外的一个通信界面,是外界可以看到的部分。

8、VHDL的结构体用来描述实体的(逻辑结构)和(逻辑功能),它由VHDL 语句构成,是外界看不到的部分。

9、在VHDL的端口声明语句中,端口方向包括(输入)、(输出)、(双向)和(缓冲)。

10、VHDL的标识符名必须以(字母开头),后跟若干字母、数字或单个下划线构成,但最后不能为(下划线)
11、VHDL的数据对象包括(常量)、(变量)和(信号),它们是用来存放各种类型数据的容器。

12、为信号赋初值的符号是(:=);程序中,为变量赋值的符号是(:=),为信号赋值的符号是(<=)
13、VHDL的数据类型包括(标量类型)、(复合类型)、(存储类型)和(文件类型)。

14、在VHDL中,标准逻辑位数据有(九)种逻辑值。

15、VHDL的操作符包括(逻辑)、(算术)、(关系)和(并置)四类。

选择题:
1、IEEE于1987年公布了VHDL的(A)语法标准。

A、IEEE STD 1076-1987;
B、RS232;
C、IEEE STD_LOGIC_1164;
D、IEEE STD 1076-1993;
2、IEEE于1987年公布了VHDL的(D)语法标准。

A、IEEE STD 1076-1987;
B、RS232;
C、IEEE STD_LOGIC_1164;
D、IEEE STD 1076-1993;
3、VHDL的设计实体可以被高层次的系统(D ),成为系统的一部分。

A、输入;
B、输出;
C、仿真;
D、调用
4、VHDL常用的库是(A)标准库。

A、IEEE;
B、STD;
C、WORK;
D、PACKAGE
5、VHDL的实体声明部分用来指定设计单元的(D )
A、输入端口;
B、输出端口;
C、引脚;
D、以上均可
6、一个设计实体可以拥有一个或多个(B )
A、IN;
B、OUT;
C、INOUT;
D、BUFFER
8、在VHDL的端口声明语句中,用(B)声明端口为输出方向。

A、IN;
B、OUT;
C、INOUT;
D、BUFFER
9、在VHDL的端口声明语句中,用(C )声明端口为双向方向。

A、IN;
B、OUT;
C、INOUT;
D、BUFFER
10、在VHDL的端口声明语句中,用(D)声明端口为具有读功能的输出方向。

A、IN;
B、OUT;
C、INOUT;
D、BUFFER
11、在VHDL中用(D )来把特定的结构体关联一个确定的实体,为一个大型系统的设计提供管理和进行工程组织。

A、输入;
B、输出;
C、综合;
D、配置
12、在VHDL中,45_234_278属于(A)文字。

A、整数;
B、以数制基数表示的;
C、实数;
D、物理量
13、在VHDL中,88_670.551_278属于(C )文字。

A、整数;
B、以数制基数表示的;
C、实数;
D、物理量
14、在VHDL中,16#FE# 属于(B )文字。

A、整数;
B、以数制基数表示的;
C、实数;
D、物理量
15、在VHDL中,100m 属于(D )文字。

A、整数;
B、以数制基数表示的;
C、实数;
D、物理量
16、在VHDL中,可以用(B )表示数据或地址总线的名称。

A、下标名;
B、段名;
C、总线名;
D、字符串
17、在下列标识符中,(C )是VHDL合法的标识符。

A、4h_adde;
B、h_adde_;
C、h_adder;
D、_h_adde
18、在下列标识符中,(A)是VHDL错误的标识符。

A、4h_adde;
B、h_adde4;
C、h_adder_4;
D、h_adde
19、在VHDL中,(D)不能将信息带出对它定义的当前设计单元。

A、信号;
B、常量;
C、数据;
D、变量
20、在VHDL中,(D )的数据传输是立即发生的,不存在任何延时的行为。

A、信号;
B、常量;
C、数据;
D、变量
21、在VHDL中,(A)的数据传输是不是立即发生的,目标信号的赋值需要一定的延时时间。

A、信号;
B、常量;
C、数据;
D、变量
22、在VHDL中,为目标变量赋值的符号是(C )。

A、=:;
B、= ;
C、:= ;
D、<=
23、在VHDL中,为目标信号赋值的符号是(D )。

A、=:;
B、= ;
C、:= ;
D、<=
24、在VHDL中,定义信号名时,可以用(C)符号为信号赋初值。

A、=:;
B、= ;
C、:= ;
D、<=
25、在VHDL的IEEE标准库中,预定义的标准逻辑位STD_LOGIC的数据类型中的数据是用(B)表示的。

A、小写字母;
B、大写字母;
C、大或小写字母;
D、全部是数字
2009/2010 学年第一学期末考试试题答案(A卷)
一、填空题(20分,每空格1分)
1、一个完整的VHDL语言程序通常包含实体(entity),构造体(architecture),
配置(configuration),包集合(package)和库(library) 5各部分。

2、在一个实体的端口方向说明时,输入使用in表示,那么构造体内部不能再使用的输出是用out表示;双向端口是用 inout 表示;构造体内部可再次使用的输出是用buffer 表示;
3、一个构造体可以使用几个子结构,即相对比较独立的几个模块来构成。

VHDL语言可以有以下3种形式的子结构描述语句: BLOCK 语句结构; PROCESS 语句结构和SUBPROGRAMS结构。

4、VHDL的客体,或称数据对象包括了常数、变量variable 和信号signal 。

5、请列出三个VHDL语言的数据类型,如实数、位等。

位矢量,字符,布尔量。

6、设D0为'0', D1为'0', D2为'1', D3为'0', D0 & D1 & D2 & D3的运算结果是“0010”,D3 & D2 & D1 & D0的运算结果是“0100”。

7、构造体的描述方式包括三种,分别是寄存器传输(RTL)描述方法或称数据流;构造体的结构描述方式和构造体的行为描述方式。

二、判断对错并给出判断依据(20分,每小题5分,判断对错2分,给出正确答案3分)
1、传统的系统硬件设计方法是采用自上而下(top down)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自下而上(bottom up)的设计方法。

(×)
传统的系统硬件设计方法是采用自下而上(bottom up)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自上而下(top down)的设计方法.
2、VHDL可以采用层次化的设计,一个高层的结构体中可以调用低层的实体(√)
3、一个VHAL程序中仅能使用一个进程(process)语句。

(×)
可以使用多个进程语句。

4、VHDL语言的预算操作包括了逻辑运算符、关系运算符、乘法运算符等,它们三者的优先级是相同的。

(×)
逻辑运算符<关系运算符<乘法运算
三、判断题(10分)
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
以上库和程序包语句有无错误?有,有的话请在原程序相应位置改正。

(2) entity rom is
port(
addr: in std_logic_vector(0 to 3);
ce: in std_logic;
data:out std_logic_vector(7 downto 0) ;
);
end rom;
以上port语句有无错误?有,有的话请在原程序相应位置改正。

(4) architecture behave of rom is
begin
process(ce,addr)
begin
if ce='0' then (6)
case addr is
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";
when others=>
| data<="10011000";
| end case; (8)
else
data<="00000000";
end if;
end process;(10) end behave;
1、请补全以下二选一VHDL 程序(本题10分)
Entity mux is
port(d0,d1,sel:in bit;
q:out BIT ); (2)
end mux;
architecture connect of MUX is (4) signal tmp1, TMP2 ,tmp3:bit; (6) begin cale: block
begin
tmp1<=d0 and sel; tmp2<=d1 and (not sel)
tmp3<= tmp1 and tmp2;
q <= tmp3; (8)
end block cale;
end CONNECT ; (10)
2、编写一个2输入与门的VHDL 程序,请写出库、程序包、实体、构造体相关语句,将端口定义为标准逻辑型数据结构(本题10分)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; (2) ENTITY nand2 IS
PORT (a ,b:IN STD_LOGIC; (4) y:OUT STD_LOGIC); (6) END nand2;
ARCHITECTURE nand2_1 OF nand2 IS (8) BEGIN
y <= a NAND b; --与y <=NOT( a AND b);等价 (10) END nand2_1;
3、根据下表填写完成一个3-8线译码器的VHDL 程序(16分)。

&
a b
y
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder_3_to_8 IS
PORT (a,b,c,g1,g2a,g2b:IN STD_LOGIC;
y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); (2)END decoder_3_to_8;
ARCHITECTURE rtl OF decoder_3_to_8 IS
SIGNAL indata:STD_LOGIC_VECTOR (2 DOWNTO 0); (4)BEGIN
indata <= c & b & a; (6)PROCESS (indata,g1,g2a,g2b)
BEGIN
IF (g1 = '1' AND g2a = '0' AND g2b = '0' ) THEN (8)CASE indata IS
WHEN "000"=> y <= "11111110";
WHEN "001" => y <= "11111101";
WHEN "010" => y <= "11111011"; (10)
WHEN "011" => y <= "11110111";
WHEN "100" => y <= "11101111";
WHEN "101" => y <= "11011111";
WHEN "110" => y <= "10111111"; (12)
WHEN "111" => y <= "01111111";
WHEN OTHERS=> y <= "XXXXXXXX";
END CASE;
ELSE
y <= "11111111"; (14)
END IF;
END PROCESS; (16)
END rtl;
4、三态门电原理图如右图所示,真值表如左图所示,请完成其VHDL程序构造体部分。

(本题14分)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri_gate IS
PORT(din,en:IN STD_LOGIC;
dout : OUT STD_LOGIC);
END tri_gate ;
ARCHITECTURE zas OF tri_gate IS
BEGIN
PROCESS (din,en)
BEGIN
IF (en=…1') THEN dout <= din;
ELSE dout <= …Z‟;
END IF;
END PROCESS ;
END zas ;
2008/2009 学年第一学期末考试试题答案(A卷)
一、填空题(20分,每空格1分)
1、试举出两种可编程逻辑器件 CPLD 、 FPGA 。

2、VHDL程序的基本结构包括库、程序包、实体和结构体。

3、more_ _11标识符合法吗?不合法。

8bit标识符合法吗?不合法。

variable标识符合法吗?不合法。

4、信号的代入通常用 <= ,变量用 := 。

5、表示‘0’‘1’;两值逻辑的数据类型是 bit(位),表示‘0’‘1’‘Z’等九值逻辑的数据类型是 std_logic(标准逻辑),表示空操作的数据类型是 NULL 。

6、定义一个信号a,数据类型为4位标准逻辑向量signal a : std_logic_vector(3 downto 0) 定义一个变量b,数据类型为2位位向量 variable
b : bit_vector(1 downto 0) 。

7、<=是小于等于关系运算符,又是赋值运算操作符。

8、设D0为'1', D1为'0', D2为'1', D3为'0', D3 & D2 & D1 & D0的运算结果是“0101”,D1 & D2 & D3 & D4的运算结果是“1010”。

二、判断对错并给出判断依据(20分,每小题5分,判断对错2分,给出正确答案3分)
1、进程语句中,不管在何时,process语句后面必须列出敏感信号(×)
包含wait语句的进程语句可不列出敏感信号。

2、VHDL语言与计算机C语言的没有差别。

(×)
运行的基础
计算机语言是在CPU+RAM构建的平台上运行
VHDL设计的结果是由具体的逻辑、触发器组成的数字电路
执行方式
计算机语言基本上以串行的方式执行
VHDL在总体上是以并行方式工作
验证方式
计算机语言主要关注于变量值的变化
VHDL要实现严格的时序逻辑关系
3、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。

(×)
“变量(VARIABLES)”改为“信号”。

4、Moore状态机输出只是状态机当前状态的函数,Mealy状态机输出为有限状态机当前值和输入值的函数(√)三、判断题(10分)
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
以上库和程序包语句有无错误?有,有的话请在原程序相应位置改正。

(2) entity rom is
port( addr: in std_logic_vector(0 to 3);
ce: in std_logic;
data:out std_logic_vector(7 downto 0) ;
)
end rom;
以上port语句有无错误?有,有的话请在原程序相应位置改正。

(4) architecture behave of rom is
begin
process(ce,addr)
(6)
begin
if ce='0' then
case addr is
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"=>
use ieee.std_logic_1164.all;
data<="10010011";
when "1011"=>
data<="10010100";
when "1100"=>
data<="10010101";
when "1101"=>
data<="10010110";
when "1110"=>
data<="10010111";
when others=>
data<="10011000"; end case;
else
data:="00000000"; --data <= “00000000”; (8)
end if; (10)
end process;
end behave;
以上architecture中有哪些错误?请在原程序相应位置改正。

四、编程题(共50分)
1、根据一下四选一程序的结构体部分,完成实体程序部分(本题8分)
entity MUX4 is
port( (2)
s: in std_logic_vector(1 downto 0); (4)
d: in std_logic_vector(3 downto 0); (6)
y: out std_logic (8)
);
end MUX4;
architecture behave of MUX4 is
begin
process(s)
begin
if (s="00") then
y<=d(0);
elsif (s="01") then
y<=d(1);
elsif (s="10") then
y<=d(2);
elsif (s="11") then
y<=d(3);
else
null;
end if;
end process;
end behave;
2、编写一个数值比较器VHDL程序的进程(不必写整个结构框架),要求使能信号g低电平时比较器开始工作,输入信号p = q,输出equ为‘0’,否则为‘1’。

(本题10分)process(p,q) (2)
begin
if g='0' then (4)
if p = q then
equ <= '0'; (6)
else
equ <= '1'; (8)
end if;
else
equ <= '1'; (10)
end if;
end process;
3、填写完成一个8-3线编码器的VHDL程序(16分)。

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity eight_tri is
port( b: in std_logic_vector(7 downto 0); (2)en: in std_logic;
y: out std_logic_vector(2 downto 0) ); (4)end eight_tri;
architecture a of eight_tri is (6)signal sel: std_logic_vector(8 downto 0);
begin
sel<=en & b; (8)
y<= “000” when (sel=”100000001”)else
“001” when (sel=”100000010”)else(10)
“010” when (sel=”100000100”)else
“011” when (sel=”100001000”)else
“100” when (sel=”100010000”)else(12)
“101” when (sel=”100100000”)else
“110” when (sel=”101000000”)else(14)
“111” when (sel=”110000000”)else(16)
“zzz”;
end a;
4、图中给出了4位逐位进位全加器,请完成其VHDL程序。

(本题16分)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity full_add is
port (
a,b: in std_logic_vector (3 downto 0); (2)
carr: inout std_logic_vector (4 downto 0);
sum: out std_logic_vector (3 downto 0)
);
end full_add;
architecture full_add_arch of full_add is
component adder (4)
port (
a,b,c: in std_logic;
carr: inout std_logic;
sum: out std_logic ); (6)
end component;
begin
carr(0)<='0';
u0:adder port map(a(0),b(0),carr(0),carr(1),sum(0));
u1:adder port map(a(1),b(1),carr(1),carr(2),sum(1)); (8)(10)u2:adder port map(a(2),b(2),carr(2),carr(3),sum(2)); (12)
u3:adder port map(a(3),b(3),carr(3),carr(4),sum(3)); (14)(16)end full_add_arch;
2008/2009 学年第一学期末考试试题(B卷)
一、填空题(30分,每空格1分)
1、同A
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
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分)
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分2007/2008 学年第一学期末考试试题答案(A卷)
一、填空题(20分,每空格1分)
1、VHDL是否区分大小写?不区分。

2、digital_ _8标识符合法吗?不合法。

12_bit标识符合法吗?不合法。

signal标识符合法吗?不合法。

3、结构体有三种描述方式,分别是数据流、行为、和结构化。

4、请分别列举一个常用的库和程序包library iee、 use ieee.std_logic_1164.all 。

5、一个信号处于高阻(三态)时的值在VHDL中描述为‘Z’。

6、将一个信号width定义为一个4位标准逻辑向量为
signal width : std_logic_vector(3 downto 0) 。

7、/=是不相等操作符,功能是在条件判断是判断操作符两端不相等。

8、设D0为'0', D1为'1', D2为'1', D3为'0', D3 & D2 & D1 & D0的运算结果是
(D3 or D2)and(D1 and not D0)的运算结果是:‘1’。

“0110”,
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分)
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
以上库和程序包语句有无错误?有,有的话请在原程序相应位置改正。

(2)entity rom is
port(
addr: in std_logic_vector(0 to 3);
ce: in std_logic;
data:out std_logic_vector(7 downto 0);
)
end rom;
以上port语句有无错误?有,有的话请在原程序相应位置改正。

(4)architecture behave of rom is
begin
process(ce,addr)(6)
begin
if ce='0' then
case addr is
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";
when others=>
data<="10011000"; end case;
else
data:="00000000"; --data <= “00000000”; (8)
end if; (10)
end process;
end behave;
以上architecture中有哪些错误?请在原程序相应位置改正。

四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个二选一电路,要求输入a、b, sel为选择端,输出q。

(本题10分)
Entity sel2 is
Port (a,b : in std_logic;
sel : in std_logic;
q : out std_logic);
End sel2; (3)
Architecture a of sel2 is
begin
if sel = ‘0’ then
q <= a; (6)
end if;
end a; (10)
2、编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复位信号reset低电平时计数器清零,变高后,在上升沿开始工作;输入时钟信号为clk,输出为q。

(本题10分)
Process(reset,clk) (2)
begin
if reset = ‘0’ then
q <= “0000”; (4)
elsif clk’event and clk = ‘1’ then (6)
q <= q + 1; (9)
end if;
end process; (10)
3、填写完成一个8-3线编码器的真值表(5分),并写出其VHDL程序(10分)。

8 -3线编码器真值表
entity eight_tri is
port( b: in std_logic_vector(7 downto 0);
en: in std_logic;
y: out std_logic_vector(2 downto 0) );
end eight_tri; (3)
architecture a of eight_tri is
signal sel: std_logic_vector(8 downto 0); (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)
end a;
4、根据已给出的全加器的VHDL程序,试写出一个4位逐位进位全加器的VHDL程序。

(本题15分)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity adder is
port ( a,b,c: in std_logic;
carr: inout std_logic;
sum: out std_logic);
end adder;
architecture adder_arch of adder is
begin
sum <= a xor b xor c;
carr <= (a and b) or (b and c) or (a and c);
end adder_arch;
entity full_add is
port ( a,b: in std_logic_vector (3 downto 0);
carr: inout std_logic_vector (4 downto 0);
sum: out std_logic_vector (3 downto 0) );
end full_add; (5)
architecture full_add_arch of full_add is
component adder
port ( a,b,c: in std_logic;
carr: inout std_logic;
sum: out std_logic);
end component; (10)
begin
carr(0)<='0';
u0:adder port map(a(0),b(0),carr(0),carr(1),sum(0));
u1:adder port map(a(1),b(1),carr(1),carr(2),sum(1));
u2:adder port map(a(2),b(2),carr(2),carr(3),sum(2));
u3:adder port map(a(3),b(3),carr(3),carr(4),sum(3));
end full_add_arch; (15)
五、附加题(10分,本题可产生附加分,全卷不能超过100分)
完成下面moore状态机程序,该设计为一个存储控制器状态机。

能够根据微处理器的读写周期,分别对存储器输出写使能WE和读使能OE信号。

工作过程:存储控制器的输入信号为微处理器的就绪READY及读写read_write信号。

当上电复位后,或read有效时,存储控制器开始工作,并在下一个时钟周期判断本次作业任务是读存储器还是写存储器。

判断的依据是,当read_write有效时为读操作,否则为写操作。

也就是说非读即写。

读操作时,OE信号有效,写操作时,WE信号有效。

当READY 信号有效时,表示读本次作业处理完成,并使控制器恢复到初始状态。

控制器真值表和状态图如下。


存储器控制器状态图LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY moore IS
PORT(clk,ready,read_write : IN Std_Logic;
oe,we : OUT Std_Logic);
END moore;
ARCHITECTURE state_machine OF Moore IS
TYPE state_type IS ( idle , decision , write , read ); SIGNAL present_state,next_state: state_type;
BEGIN
state_comb: PROCESS(present_state,ready,read_write)
BEGIN
CASE present_state IS
WHEN idle =>
oe<= …0‟;
we<= …0‟;
IF(ready='1') THEN
next_state<=decision;
ELSE
next_state<=idle;
END IF;
WHEN decision =>
oe<= …0‟;
we<= …0‟;
IF(read_write='1') THEN
next_state<=read;
ELSE
next_state<= write ;
END IF;
WHEN read =>
oe<= …1‟;
we<= …0‟;
IF(ready='1') THEN
next_state<=idle;
ELSE
next_state<=read;
END IF;
WHEN write =>
oe<= …0‟;
we<= …1‟;
IF(ready='1') THEN
next_state<= idle ;
ELSE
next_state<=write;
END IF;
END CASE;
END PROCESS state_comb;
state_clocked:PROCESS(clk)
BEGIN
IF clk‟event and clk = …1‟THEN
present_state<=next_state;
END IF;
END PROCESS state_clocked;
END state_machine;
2007/2008 学年第一学期末考试试题(B卷)
一、填空题(20分,每空格1分)
1、早期的可编程逻辑器件包括 PLA 、 PAL 、 GAL 。

2、基于乘积项技术构造的可编程逻辑器件叫做 CPLD ,基于查找表技术构造的可编程逻辑器件叫做 FPGA 。

3、VHDL程序的基本结构包括库、程序包、实体和结构体。

4、8digital标识符合法吗?不合法。

5、信号的代入通常用 <= ,变量用 := 。

6、标准逻辑(std_logic)是一个具有九值逻辑的数据类型。

7、定义一个变量a,数据类型为4位位向量variable a : bit_vector(3 downto 0) 。

8、<=是小于等于关系运算符,又是赋值运算操作符。

9、设D0为'1', D1为'1', D2为'1', D3为'0',“1110”是 D3 & D2 & D1 & D0的运算结果。

10、IF语句根据指定的条件来确定语句执行顺序,共有3种类型:用于门闩控制的IF 语句、用于二选一控制的IF语句、用于多选择控制的IF语句。

二、简答(20分,每小题5分)
1、简述CPLD与FPGA的异同。

CPLD是基于乘积项技术构造的可编程逻辑器,不需要配置外部程序寄存芯片 (3) FPGA基于查找表技术构造的可编程逻辑器,需要配置外部程序寄存芯片。

(5) 2、简述VHDL语言与计算机语言的差别。

(1)运行的基础
计算机语言是在CPU+RAM构建的平台上运行
VHDL设计的结果是由具体的逻辑、触发器组成的数字电路 (2)
(2)执行方式
计算机语言基本上以串行的方式执行
VHDL在总体上是以并行方式工作(4)
(3)验证方式
计算机语言主要关注于变量值的变化
VHDL要实现严格的时序逻辑关系(5)
3、简述实体端口的模式
输入(Input):clk、reset、en、addr等(1)
输出(Output):输出信号,不能内部引用(2)
双向(Inout):可代替所有其他模式,用于设计双向总线(4)
缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号 (5)
4、进程语句是设计人员描述结构体时使用最为频繁的语句,简述其特点。

它可以与其它进程并发执行,并可存取结构体或实体中所定义的信号;(1)
进程结构中的所有语句都是按顺序执行的;(2)
为了启动进程,在进程结构中必须包含一个显式的敏感信号量表或者包含一个wait语句;(4)进程之间的通信是通过信号量的传递来实现的。

(5) 三、判断题(10分)
同A卷
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个四选一电路,要求输入d0~d3, s为选择端,输出y。

(本题10分)
entity MUX4 is
port( s: in std_logic_vector(1 downto 0);
d: in std_logic_vector(3 downto 0);
y: out std_logic);
end MUX4; (3)
architecture behave of MUX4 is
begin
process(s)
begin
if (s="00") then
y<=d(0); (4)
elsif (s="01") then
y<=d(1); (5)
elsif (s="10") then
y<=d(2); (6)
elsif (s="11") then
y<=d(3); (7)
else
null; (9)
end if;
end process;
end behave; (10)
2、编写一个数值比较器VHDL程序的进程(不必写整个结构框架),要求使能信号g低电平时比较器开始工作,输入信号p = q,输出equ为‘0’,否则为‘1’。

(本题10分)
process(p,q) (2)
begin
if g='0' then (4)
if p = q then
equ_tmp <= '0'; (6)
else
equ_tmp <= '1'; (8)
end if;
else
equ_tmp <= '1'; (10)
end if;
end process;
3、填写完成一个3-8线译码器的真值表(5分),并写出其VHDL程序(10分)。

entity tri_eight is
port( a: in std_logic_vector (2 downto 0);
en: in std_logic;
y: out std_logic_vector (7 downto 0));
end tri_eight; (2) architecture a of tri_eight is
signal sel: std_logic_vector (3 downto 0); (4)
begin
sel(0) <= a(0); sel(1) <= a(1); sel(2) <= a(2); sel(3) <= en; (5)
with sel select
y <= "00000001" when "1000",
"00000010" when "1001",
"00000100" when "1010",
"00001000" when "1011",
"00010000" when "1100",
"00100000" when "1101",
"01000000" when "1110",
"10000000" when "1111",
"00000000" when others; (9)
end a; (10)
4、根据已给出的二-十(BCD)进制优先权编码器功能表,试写出其VHDL程序。

(本题15分)
entity prior is
port( d : in std_logic_vector(9 downto 1);
q : out std_logic_vector(3 downto 0) );
end prior; (2)
architecture behavior of prior is
begin
process(d) (4)
begin
if d = "111111111" then
q <= "1111";
elsif d(9) = '0' then
q <= "0110";
elsif d(8) = '0' then
q <= "0111";
elsif d(7) = '0' then
q <= "1000";
elsif d(6) = '0' then
q <= "1001";
elsif d(5) = '0' then
q <= "1010";
elsif d(4) = '0' then
q <= "1011";
elsif d(3) = '0' then
q <= "1100";
elsif d(2) = '0' then
q <= "1101";
elsif d(1) = '0' then
q <= "1110";
end if; (9)
end process;
end behavior; (10)
五、附加题(10分,本题可产生附加分,全卷不能超过100分)同A卷。

相关文档
最新文档