(A卷)
| 得分 |
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)描述方法或称数据流 ; 构造体的结构描述方式 和 构造体的行为描述方式 。
| 得分 |
1、传统的系统硬件设计方法是采用自上而下(top down)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自下而上(bottom up)的设计方法。 ( × )
传统的系统硬件设计方法是采用自下而上(bottom up)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自上而下(top down)的设计方法
2、VHDL可以采用层次化的设计,一个高层的结构体中可以调用低层的实体 ( √ )
3、一个VHAL程序中仅能使用一个进程(process)语句。 ( × )
可以使用多个进程语句。
4、VHDL语言的预算操作包括了逻辑运算符、关系运算符、乘法运算符等,它们三者的优先级是相同的。 ( × )
逻辑运算符<关系运算符<乘法运算
| 得分 |
use ieee.std_logic_11.all;
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;
以上architecture中有哪些错误?请在原程序相应位置改正。
| 得分 |
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_11.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分)。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.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_11.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卷)
| 得分 |
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”。
| 得分 |
1、进程语句中,不管在何时,process语句后面必须列出敏感信号 ( × )
包含wait语句的进程语句可不列出敏感信号。
2、VHDL语言与计算机 C语言的没有差别。 ( × )
●运行的基础
–计算机语言是在CPU+RAM构建的平台上运行
–VHDL设计的结果是由具体的逻辑、触发器组成的数字电路
●执行方式
–计算机语言基本上以串行的方式执行
–VHDL在总体上是以并行方式工作
●验证方式
–计算机语言主要关注于变量值的变化
–VHDL要实现严格的时序逻辑关系
3、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。 ( × )
“变量(VARIABLES)”改为“信号”。
4、Moore状态机输出只是状态机当前状态的函数,Mealy状态机输出为有限状态机当前值和输入值的函数 ( √ )
| 得分 |
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"=>
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中有哪些错误?请在原程序相应位置改正。
| 得分 |
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_11.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_11.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;下载本文