
一 填空题(30分,每小题3分)
1、定义TIMER为整型变量,取值范围为0-255,VHDL的语句为: variable timer:integer range 0 to 255;
2、JTAG包括 TDI、TDO、TMS、TCK、TRST五个引脚。
3、在ISE中建立一个工程文件,如果要锁定使用的引脚,需要建立一个 用户用户约束文件(UCF文件)文件。
4、进程之间的通信是通过 信号 来实现的。
5、single a :std_logic_vector(7 downto 0),则a的最高位是 a(7)
6、资源优化有 资源共享、逻辑优化和串行优化 三种方法。
7、元件例化语句由两部分组成,前一部分 对一个设计实体定义为一个元件 第二部分 此元件与当前设计实体的连接说明
8、关键路径优化法的主要目的是减少从输入到输出经过的延时最 大(长) 路径的时延。
9、任何的组合电路,可以用 与、或、非基本门电路 电路实现;任何的时序电路都可由 组合 电路加上 储存元件(即锁存器、触发器、RAM) 构成。
10、关系操作的结果为 BOOLEAN 数据类型;逻辑操作可以使用 BIT、 BOOLEAN、 STD_LOGIC 数据类型。
二 简答题(30分,每小题5分)
可编程芯片的可编程体现在哪几个方面?
要点:(1) 内部组合逻辑单元可编程;
(2) 内部连线可编程;
(3) IO单元可编程;
(4) 全局时钟、全局复位信号等。
2 谈一谈你对IP核的认识。
要点:(1) IP核具有自主知识产权;
(2) 以硬件描述语言描述;
(3) 实现特定功能;
(4) 可以集成与其他的用硬件描述语言描述的系统。
3 逻辑单元LE包括哪几个部分?
要点:(1) 1个4输入的LUT;
(2) 1个带有同步使能的可编程触发器;
(3) 1个进位链;
(4) 1个级连链。
4 什么是固有延时?什么是传输延时?
要点:固有延时也称为惯性延时,是任何电子器件都存在的一种延时特性,固有延时的主要物理机制是分布电容效应,分布电容具有吸收脉冲能量的效应。
5 利用LUT如何实现一个四输入函数。
要点:LUT是look up table(查找表)的缩写,它是用逻辑芯片内部的SRAM来构成逻辑函数发生器,SRAM内存储真值表,真值表是函数所有取值的集合,一个N输入LUT可以实现N个输入变量的任何逻辑功能。
四输入函数的LUT实现过程图(略)
6 寄存器配平为什么能够提高电路的运行速度?
要点:一个设计项中,如果包含逻辑块的延时差别过大,其总体工作频率取决于延时最大的模块,从而导致设计的整体性能受到。可以将大的延时部分(T1)划分一部分到小延时部分(T2),原系统的速度由T1决定,减小T1可以提高电路的运行速度。
三 利用流水线技术对下面程序进行优化。(10分)
library IEEE;
use IEEE.std_logic_11.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity dmul1 is
Port ( a0, a1, a2,a3: in std_logic_vector(7 downto 0);
result : out std_logic_vector(width-1 downto 0);
end dmul1;
architecture Behav of dmul1 is
constant width:=;
begin
process(a0, a1, a2,a3)
result<= a0* a1* a2* a3;
end process;
end Behav;
优化:
library IEEE;
use IEEE.std_logic_11.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity dmul1 is
Port ( a0, a1, a2,a3: in std_logic_vector(7 downto 0);
result : out std_logic_vector(width-1 downto 0);
end dmul1;
architecture Behav of dmul1 is
constant width:=32;
signal tmp1: std_logic_vector(15 downto 0);
signal tmp2: std_logic_vector(23 downto 0);
signal tmp3: std_logic_vector(31 downto 0);
begin
process(a0, a1, a2,a3)
tmp1<= a0* a1* a2* a3;
tmp2<= tmp1* a2;
tmp3<= tmp2* a3;
result<= tmp3;
end process;
end Behav;
四 VHDL程序设计(30分)
1、设计一个位宽度的双向总线驱动电路。(10分)
参考程序:
library IEEE;
use IEEE.STD_LOGIC_11.all;
entity bidir is
Port ( dir,en: in std_logic;
a,b: inout std_logic_vegtor(width-1 downto 0));
end bidir;
architecture art1 of bidir is
Signal aout,bout: std_logic_vegtor(width-1 downto 0);
Constant width:=;
Begin
Process(a,dir,en)
Begin
If ((en=‘1’)and (dir=‘1’)) then bout<=a;
Else bout<=“zzzzzzzz”;
End if;
B<=bout;
End process;
Process(b,dir,en)
Begin
If ((en=‘1’)and (dir=‘0’)) then aout<=b;
Else aout<=“zzzzzzzz”;
End if;
a<=aout;
End process;
end art1;
2、
2、 设计一个带异步复位和可预置初值的10进制加1计数器。(10分)
参考程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter is
Port ( a : in std_logic_vector(3 downto 0);
load : in std_logic;
reset : in std_logic;
count : out std_logic_vector(3 downto 0);
clk : in std_logic);
end counter;
architecture Behavioral of counter is
begin
process(reset,clk)
if reset='1'then count='0000'
elsif clk'event and clk='1' then
begin
if load='1'then count<=a;
elsif count>'1001'then count<='0000';
else count=count+1;
end if;
end if;
end process;
end Behavioral;
3、 设计一个带进位位的8位二进制全加器电路。(10分)
参考程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity add8 is
Port ( a : in std_logic_vector(0 to 7);
b : in std_logic_vector(0 to 7);
ci : in std_logic;
cout : out std_logic;
sum : out std_logic_vector(0 to 7));
end add8;
architecture Behavioral of add8 is
variable tmp:std_logic_vector(0 to 8);
begin
process(a,b)
begin
tmp:='0'&a+'0'&b;
tmp:=tmp+ci;
cout<=tmp(8);
sum<=tmp(7:0);
end process;
end Behavioral;
考试试卷(A卷)
一 填空题(每空1分,共30分)
1.SOC是指 单片系统(片上系统) 。
2.LUT是指 查找表 ,一个4输入的LUT需要 16 bit存储空间。
3.MAX7000中 16 个宏单元组成一个LAB。
4.FLEX10K由 嵌入式阵列块 , 逻辑阵列块 , 快速通道 和I/O系统 四部分组成。
5.在可编程电路的逻辑表示中表示 未连接 ,表示 固定连接 ,表示 可编程连接 。
6.综合器的综合步骤自顶层向低层依次为: 自然语言 综合, 行为 综合, 逻辑 综合和 结构(版图) 综合。
7.时序仿真是指 仿真文件中包含了器件的特性参数,接近于真实器件运行特性的仿真 。功能仿真是指 直接对VHDL、原理图或其他描述形式的逻辑功能进行测试模拟,不涉及硬件的的物理特性。
8.IP模块设计应易于 重用 。
9.任何组合电路可以用 与门-或门二级电路 实现,任何时序电路可以用 储存元件(即锁存器、触发器、RAM) 实现。
10.一般有限状态机包含 说明部分 ,主控时序进程, 主控组合进程 和 辅助进程 四部分。
11.电路设计中面积优化有资源共享,逻辑优化,串行优化 等方法,速度优化有 流水线,寄存器配平,关键路径法 等方法。
二 问答题(每题5分,共10分)
1.信号和变量的主要区别是什么?
要点:
(1)变量具有局部特征,有效范围只在所定义的进程或子程序中;
(2)信号具有全局特征,在一个实体内部的各单元之间传送数据,或与其他实体之间通信;
(3)变量赋值是立即发生的,零延迟;
(4)信号赋值是在一个进程的结束,有延迟;
(5)变量在综合后可能没有与之对应的硬件结构;
(6)信号在综合后可以找到与之对应的硬件结构,如一根线,一个端口或一个D触发器等
2.什么是固有延时?什么是传输延时?
要点:
固有延时页也叫惯性延时,是任何电子器件都存在的一种延时特性,主要由分布电容产生。传输延时是输入与输出之间的一种绝对延时,使信号传输推迟了一个时间段。
三 根据要求完成各小题(共16分)
1. 在横线处补齐相应语句,使下面语句构成完整程序。(本题10分,每空1分)
(1) LIBRARY IEEE ;
USE IEEE.STD_ LOGIC_11.ALL;
ENTITY MUX21A IS
PORT(A,B:IN STD_LOGIC;
S:IN STD_LOGIC;
Y:OUT STD_LOGIC);
(2) END ENTITY; 或 END ENTITY MUX21A;
ARCHITECTURE ART1 OF MUX21A IS
BEGIN
PROCESS(A,B,S)
BEGIN
IF S=’1’ THEN Y<= A;
(3)ELSE Y<= B;
(4)END IF;
(5)END PROCESS;
(6)END ARCHITECTURE;或END ARCHITECTURE ART1;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY MUXK IS
PORT(A1,A2,A3,S0,S1: IN STD_LOGIC;
OUTY: OUT STD_LOGIC);
END ENTITY MUXK;
ARCHITECTURE ART2 OF MUXK IS
COMPONENT MUX21A
(7)PORT(A,B:IN STD_LOGIC;
S:IN STD_LOGIC;
Y:OUT STD_LOGIC);
END COMPONENT;
(8)SIGNAL TMP: STD_LOGIC;
BEGIN
PROCESS(A1,A2,A3,S0,S1)
BEGIN
U1: MUX21A (9)PORT MAP(A=>A2,B=>B3,S0=>S, Y=>TMP);
U2: MUX21A (10)PORT MAP(A=>A1,B=>TMP,S=>S1,Y=>OUTY);
END PROCESS;
END ARCHITECTURE ART2;
2. 下图是FLEX10K的结构框图,请分别写出(1)--(8)所对应结构名称。(本题6分,每(1)+(2)1分,(3)+(4)1分,其他空各1分)
1)IOC(IOE或IOB);(2)IOC(IOE或IOB);(3)EAB;(4)EAB;(5)LA(逻辑阵列);(6)LAB;(7)内部互连;(8)LE。
四.用VHDL语言设计一个带有异步复位和并行置位的左移一位寄存器。(14分)
library IEEE;
use IEEE.STD_LOGIC_11.all;
entity Lshifter is
Port ( clk,rst,load: in std_logic;
din:in std_logic_vector(7 downto 0);
qb: out std_logic );
end Lshifter;
architecture art1 of Lshifter is
Begin
Process(clk,rst,load)
Variable reg8:std_logic_vector(7 downto 0);
Begin
If load=’1’ then reg8:=(others=’0’);
IF CLK’EVENT AND CLK=’1’ THEN
If load=’1’ then reg8:=din;
Else reg8(7downto 1) := reg8(6 downto 0) ;
End if;
End if;
QB<=REG8(7);
End process;
end art1;
五 用VHDL语言实现一个3—8译码器。(本题14分)
参:(本题有多种实现方法)
library IEEE;
use IEEE.STD_LOGIC_11.ALL;
entity de3to8 is
Port ( inp : in std_logic_vector(2 downto 0);
outp : out std_logic_vector(7 downto 0));
end de3to8;
architecture art3 of de3to8 is
Begin
Case inp is
Outp(0)<= ’1’ when inp=“000” else’0’;
Outp(1)<= ’1’ when inp=“001” else’0’;
Outp(2)<= ’1’ when inp=“010” else’0’;
Outp(3)<= ’1’ when inp=“011” else’0’;
Outp(4)<= ’1’ when inp=“100” else’0’;
Outp(5)<= ’1’ when inp=“101” else’0’;
Outp(6)<= ’1’ when inp=“110” else’0’;
Outp(7)<= ’1’ when inp=“111” else’0’;
End case;
end art3;
六 用VHDL语言设计一个十进制数中六十进制加法计数器。(本题16分)
library IEEE;
use IEEE.STD_LOGIC_11.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity CNT60 is
Port ( CLK ,RST,EN: in STD_LOGIC;
CQ: OUT STD_LOGIC_vector(7 downto 0);
COUT:OUT STD_LOGIC);
end CNT60;
architecture BHV of CNT60 is
Signal Q1: STD_LOGIC_vector(7 downto 0);
Begin
Process(CLK,RST,EN)
VARIABLE CQI: STD_LOGIC_vector(7 downto 0);
VARIABLE HIGHCQI,LOWCQI: STD_LOGIC_vector(3 downto 0);
Begin
IF RST=’1’ THEN CQI:=(OTHERS =’0’) ;
HIGHCQI:= CQI[7:4];
LOWCQI:= CQI[3:0];
ELSIF CLK’EVENT AND CLK=’1’ THEN
IF EN =’1’ THEN
IF LOWCQI <’9’ THEN LOWCQI := LOWCQI +1;
ELSE LOWCQI:=(OTHERS =’0’) ;
HIGHCQI:= HIGHCQI+1;
END IF;
IF HIGHCQI>=’5’ THEN COUT < =’1’;
HIGHCQI:= (OTHERS =’0’) ;
END IF;
ELSE COUT < =’0’;
END IF;
END IF;
END IF;
CQI:= HIGHCQI& LOWCQI;
CQ<=CQI;
End process;
end BHV;
