EDA复习题
08EDA复习题
一、单项选择题:(20分)
1( 大规模可编程器件主要有FPGA、CPLD两类,下列对CPLD结构与
的描述中,正确的是__C_____。
A. CPLD即是现场可编程逻辑器件的英文简称;
B. CPLD是基于查找表结构的可编程逻辑器件;
C. 早期的CPLD是从GAL的结构扩展而来;
D. 在Altera公司生产的器件中,FLEX10K 系列属CPLD结构;
2( 综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
在下面对综合的描述中,__C____是错误的。
A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
B. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关
系不是唯一的;
C. 综合是纯软件的转换过程,与器件硬件结构无关;
D. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
3( IP核在EDA技术和开发中具有十分重要的地位,IP分软IP、固IP、硬IP;下列所描述的IP核中,
对于硬IP的正确描述为___B_______。
A. 提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路;
B. 提供设计的最终产品----掩膜;
C. 以网表文件的形式提交用户,完成了综合的功能块;
D. 都不是。
4( 基于EDA软件的FPGA / CPLD设计流程为:原理图/HDL文本输入?____B____?综合?适配?__________
?编程下载?硬件测试。
?功能仿真 ?时序仿真 ?逻辑综合 ?配置 ?引脚锁定
A(?? B.?? C.?? D.??
5( 下面对利用原理图输入设计
进行数字电路系统设计,那一种说法是不正确的__B____。
A. 原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;
B. 原理图输入设计方法无法对电路进行功能描述;
C. 原理图输入设计方法一般是一种自底向上的设计方法;
D. 原理图输入设计方法也可进行层次化设计。
6( 在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确的是__A_____。
A. PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。
B. 敏感信号参数表中,应列出进程中使用的所有输入信号;
C. 进程由说明部分、结构体部分、和敏感信号参数表三部分组成;
D. 当前进程中声明的信号也可用于其他进程。
7( 嵌套使用IF语句,其综合结果可实现__A______。
A. 带优先级且条件相与的逻辑电路;
B. 条件相或的逻辑电路;
C. 三态控制电路;
D. 双向控制电路。
8( 电子系统设计优化,主要考虑提高资源利用率减少功耗----即面积优化,以及提高运行速度----即速
度优化;指出下列那种方法不属于速度优化:___A________。
A. 资源共享 B. 流水线设计
C. 寄存器配平 D. 关键路径法
9( 在一个VHDL设计中idata是一个信号,数据类型为integer,下面哪个赋值语句是不正确的___D_____。
A. idata <= 16#20#;
B. idata <= 32;
C. idata <= 16#A#E1;
D. idata <= B#1010#;
10.下列EDA软件中,哪一不具有时序仿真功能:__D______。
A. Max+Plus II
B. Quartus II
C. ModelSim
C. Synplify
D. 单项选择题:(20分)
11.可编程器件主要有FPGA、CPLD两类,下列对CPLD结构与工作原理的描述中,正确的是__CD_。
A. CPLD是基于查找表结构的可编程逻辑器件;
B. CPLD即是现场可编程逻辑器件的英文简称;
C. 早期的CPLD是从GAL的结构扩展而来;
D. 在Xilinx公司生产的器件中,XC9500系列属CPLD结构;
10(综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
在下面对综合的描述中,____A____是正确的。
A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
B. 综合是纯软件的转换过程,与器件硬件结构无关;
C. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为强制综合。
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关
系是唯一的;
11(IP核在EDA技术和开发中具有十分重要的地位,IP分软IP、固IP、硬IP;下列所描述的IP核中,
对于硬IP的正确描述为__D_______。
A. 提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路;
B. 提供设计的最总产品----模型库;
C. 以网表文件的形式提交用户,完成了综合的功能块;
D. 都不是。
12(基于EDA软件的FPGA / CPLD设计流程为:?功能仿真?___D___?适配?时序仿真?编程下载?硬件
测试。
?原理图/HDL文本输入 ?时序仿真 ?逻辑综合 ?配置 ?引脚锁定
A(?? B. ?? C.?? D. ??
13(下面对利用原理图输入设计方法进行数字电路系统设计,那一种说法是不正确的_D___。
A. 原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;
B. 原理图输入设计方法一般是一种自底向上的设计方法;
C. 原理图输入设计方法无法对电路进行功能描述;
D. 原理图输入设计方法也可进行层次化设计。
14(在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是__D____。
A. PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。
B. 敏感信号参数表中,不一定要列出进程中使用的所有输入信号;
C. 进程由说明部分、结构体部分、和敏感信号三部分组成;
D. 当前进程中声明的变量不可用于其他进程。
15(嵌套使用IF语句,其综合结果可实现___A___。
A. 带优先级且条件相与的逻辑电路;
B. 条件相或的逻辑电路;
C. 三态控制电路;
D. 双向控制电路。
16(电子系统设计优化,主要考虑提高资源利用率减少功耗----即面积优化,以及提高运行速度----即速
度优化;指出下列那种方法不属于速度优化:____B______。
A. 流水线设计 B. 串行化
D. 关键路径法 D. 寄存器配平
17(在一个VHDL设计中idata是一个信号,数据类型为integer,数据范围0 to 127,下面哪个赋值语句
是正确的__C_____。
A. idata := 32;
B. idata <= 16#A0#;
C. idata <= 16#7#E1;
D. idata := B#1010#;
10.下列EDA软件中,哪一不具有逻辑综合功能:_B____。
E. Max+Plus II
F. ModelSim
D. Quartus II
D.Synplify
一、单项选择题,,20分,
18(IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉
及实现该功能块的具体电路的IP核为__________。D
A .瘦IP B.固IP C.胖IP D.都不是
19(综合是EDA设计流程的关键步骤,在下面对综合的描述中,_________是错误的。D
A. 综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
B. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
C. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
D. 综合可理解为一种映射过程,并且这种映射关系是唯一的,即综合结果是唯一的。
20(大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是__C__。
A. FPGA全称为复杂可编程逻辑器件;
B. FPGA是基于乘积项结构的可编程逻辑器件;
C. 基于SRAM的FPGA器件,在每次上电后必须进行一次配置;
D. 在Altera公司生产的器件中,MAX7000系列属FPGA结构。
21(进程中的信号赋值语句,其信号更新是___C____。
A. 按顺序完成;
B. 比变量更快完成;
C. 在进程的最后完成;
D.都不对。
22(VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描
述___________。B
A. 器件外部特性;
B. 器件的内部功能;
C. 器件的综合约束;
D. 器件外部特性与内部功能。
23(不完整的IF语句,其综合结果可实现________。A
A. 时序逻辑电路 B. 组合逻辑电路
C. 双向电路 D. 三态控制电路
24(子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速度(即速度优化);
指出下列哪些方法是面积优化_________。B
?流水线设计 ?资源共享 ?逻辑优化 ?串行化 ?寄存器配平 ?关键路径法
A. ??? B. ???
C. ??? D. ???
25(下列标识符中,__________是不合法的标识符。B
A. State0 B. 9moon C. Not_Ack_0 D. signall
26(关于VHDL中的数字,请找出以下数字中最大的一个:__________。A
A. 2#1111_1110#
B. 8#276#
C. 10#170#
D. 16#E#E1
10( 下列EDA软件中,哪一个不具有逻辑综合功能:________。B
A.Max+Plus II
B.ModelSim
C.Quartus II
D.Synplify
一、单项选择题:(20分)
1( 下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程:B
A. 原理图/HDL文本输入?适配?综合?功能仿真?编程下载?硬件测试
B. 原理图/HDL文本输入?功能仿真?综合?适配?编程下载?硬件测试
C. 原理图/HDL文本输入?功能仿真?综合?编程下载??适配硬件测试;
D. 原理图/HDL文本输入?功能仿真?适配?编程下载?综合?硬件测试 2( 综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
在下面对综合的描述中,_________是错误的。C
A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
C. 综合是纯软件的转换过程,与器件硬件结构无关;
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系
不是唯一的。
3( CPLD的可编程是主要基于什么结构:。D
A .查找表(LUT);
B. ROM可编程;
C. PAL可编程;
D. 与或阵列可编程;
4.IP核在EDA技术和开发中具有十分重要的地位,以HDL方式提供的IP被称为:。C A. 硬IP;
B. 固IP;
C. 软IP;
D. 都不是;
4( 流水线设计是一种优化方式,下列哪一项对资源共享描述正确_。C
A. 面积优化方法,不会有速度优化效果
B. 速度优化方法,不会有面积优化效果
C. 面积优化方法,可能会有速度优化效果
D. 速度优化方法,可能会有面积优化效果
5( 在VHDL语言中,下列对时钟边沿检测描述中,错误的是_______。D
A. if clk’event and clk = ‘1’ then
B. if falling_edge(clk) then
C. if clk’event and clk = ‘0’ then
D.if clk’stable and not clk = ‘1’ then
6( 状态机编码方式中,其中_________占用触发器较多,但其实现比较适合FPGA的应用C
A. 状态位直接输出型编码
B. 顺序编码
C. 一位热码编码
D. 以上都不是
8( 子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速
度(即速度优化);指出下列那种方法是速度优化_________。A
A. 流水线设计 B. 资源共享
C. 逻辑优化 D. 串行化
7( 不完整的IF语句,其综合结果可实现________。A
A. 时序电路
B. 双向控制电路
C. 条件相或的逻辑电路
D. 三态控制电路
10(在一个VHDL设计中Idata是一个信号,数据类型为std_logic_vector,试指出下面那个赋值语句是错
误的。D
A. idata <= “00001111”
B. idata <= b”0000_1111”;
C. idata <= X”AB”
D. idata <= 16”01”;
二、EDA名词解释,写出下列缩写的中文(或者英文)含义:(10分)
1. CPLD:复杂可编程逻辑器件
2. HDL:硬件描述语言
3. JTAG: 联合测试行动小组(边界扫描) 4. ASIC:专用集成电路
5. SOC:片上系统
二、EDA名词解释,写出下列缩写的中文(或者英文)含义:(14分)
1. SOPC: 可编程片上系统;
2. LUT:查找表;
3. JTAG:联合行动测试组;
4. GAL:通用阵列逻辑;
5. EAB:嵌入式阵列快;
6. IP:知识产权(包);
7. HDL:硬件描述语言;
二、EDA名词解释,写出下列缩写的中文(或者英文)含义:(14分)
1. LPM 参数可定制宏模块库
2. RTL 寄存器传输级
3. UART串口(通用异步收发器)
4. ISP 在系统编程
5. IEEE 电子电气工程师协会
6. ASIC 专用集成电路
7. LAB 逻辑阵列块
二、EDA名词解释,写出下列缩写的中文(或者英文)含义:(10分)
1. SOC 单芯片系统
2. FPGA 现场可编程门阵列
3. LUT 查找表
4. EDA 电子设计自动化
5. Synthesis 综合
三、VHDL程序填空:(10分)
下面程序是带异步复位、同步置数和移位使能的8位右移移位寄存器的VHDL描述,试补充完整。
library ieee;
use IEEE.STD_LOGIC_1164 .all;
entity sreg8b is
port ( clk, rst : in std_logic;
load,en : in std_logic;
din : in _STD_LOGIC_VECTOR(7 downto 0);
qb : out std_logic);
end sreg8b;
architecture behav of SREG8B is
signal reg8 : std_logic_vector( 7 downto 0);
begin
process (clk, RST , load, en)
begin
if rst='1' then ――异步清零
reg8 <= others=>’0’ ;
elsif clk?event and clk=?1? then ――边沿检测
if load = '1' then ――同步置数
reg8 <= din;
elsif en='1' then ――移位使能
reg8(6 downto 0) <= reg8(7 doento1) ;
end if;
end if;
end process;
qb <= _reg8__; ――输出最低位
end behav;
三、VHDL程序填空:(10分)
下面程序是n输入与门的VHDL描述,试补充完整。
__________ ieee;
use _____________________.all; entity andn is
________ (n : integer); -- 类属参数声明
port ( a : in std_logic_vector( ______ downto 0);
c : out std_logic);
end;
________________ behav of ________ is -- 结构体声明 begin
process (____)
_____________ int : std_logic; -- 变量声明
begin
int := _____; -- 变量赋初值
for I in a'length – 1 downto 0 loop -- 循环判断
if a(i) = '0' then
int := '0';
end if;
end loop;
c <= ________; -- 输出判断结果
end process;
end behav;
三、VHDL程序填空:(10分)
LIBRARY IEEE; -- 8位分频器程序设计
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( CLK : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF PULSE IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK?EVENT AND CLK = „1? THEN
IF CNT8 = "11111111" THEN
CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8
FULL <= '1'; --同时使溢出标志信号FULL输出为高电平
ELSE CNT8 := CNT8 + 1; --否则继续作加1计数
FULL <= '0'; --且输出溢出标志信号FULL为低电平
END IF;
END IF;
END PROCESS P_REG;
P_DIV: PROCESS(FULL)
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1' THEN
CNT2 <= NOT CNT2; --如果溢出标志信号FULL为高电平,D触发器输出取反
IF CNT2 = '1' THEN FOUT <= '1';
ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV;
END;
三、VHDL程序填空:(10分)
下面程序是一个10线,4线优先编码器的VHDL描述,试补充完整。
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY coder IS
PORT ( din : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
output : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END coder;
ARCHITECTURE behav OF CODER IS
SIGNAL SIN : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS (DIN)
BEGIN
IF (din(9)='0') THEN SIN <= "1001" ;
ELSIF (din(8)=?0?) THEN SIN <= "1000" ;
ELSIF (din(7)='0') THEN SIN <= "0111" ;
ELSIF (din(6)='0') THEN SIN <= "0110" ;
ELSIF (din(5)='0') THEN SIN <= "0101" ;
ELSIF (din(4)='0') THEN SIN <= "0100" ;
ELSIF (din(3)='0') THEN SIN <= "0011" ;
ELSIF (din(2)='0') THEN SIN <= "0010" ;
ELSIF (din(1)='0') THEN SIN <= "0001" ;
ELSE SIN <= “0000” ;
END IF;
END PROCESS ;
Output <= sin ;
END behav;
四、VHDL程序改错:(10分)
仔细阅读下列程序,回答问题
LIBRARY IEEE; -- 1
USE IEEE.STD_LOGIC_1164.ALL; -- 2
ENTITY LED7SEG IS -- 3
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- 4
CLK : IN STD_LOGIC; -- 5
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); -- 6
END LED7SEG; -- 7
ARCHITECTURE one OF LED7SEG IS -- 8
SIGNAL TMP : STD_LOGIC; -- 9
BEGIN -- 10
SYNC : PROCESS(CLK, A) -- 11
BEGIN -- 12
IF CLK'EVENT AND CLK = '1' THEN -- 13
TMP <= A; -- 14
END IF; -- 15
END PROCESS; -- 16
OUTLED : PROCESS(TMP) -- 17
BEGIN -- 18
CASE TMP IS -- 19
WHEN "0000" => LED7S <= "0111111"; -- 20
WHEN "0001" => LED7S <= "0000110"; -- 21
WHEN "0010" => LED7S <= "1011011"; -- 22
WHEN "0011" => LED7S <= "1001111"; -- 23
WHEN "0100" => LED7S <= "1100110"; -- 24
WHEN "0101" => LED7S <= "1101101"; -- 25
WHEN "0110" => LED7S <= "1111101"; -- 26
WHEN "0111" => LED7S <= "0000111"; -- 27
WHEN "1000" => LED7S <= "1111111"; -- 28
WHEN "1001" => LED7S <= "1101111"; -- 29
END CASE; -- 30
END PROCESS; -- 31
END one;
1. 在程序中存在两处错误,试指出,并说明理由:
在MAX+PlusII中编译时,提示的错误为:
Error: Line 14: File f:\upload\eda\maxplusii\my_proj\s8_5\led7seg.vhd: Type error: type in waveform element
must be "std_ulogic"
Error: Line 19: File f:\upload\eda\maxplusii\my_proj\s8_5\led7seg.vhd: VHDL syntax error: expected choices in
case statement
2. 修改相应行的程序(如果是缺少语句请指出大致的行数):
错误1 行号: 9 程序改为:SIGNAL TMP : STD_LOGIC VECTOR(3 DOWN TO 0); 错误2 行号:29 程序改为:WHEN "1001" => LED7S <= "1101111";
WHEN OTNERS=> LED7S <= "1111111"
四、VHDL程序改错:(10分)
本题程序为EDA实验中的示例程序sch.vhd,仔细阅读程序,回答问题。
1.对该程序进行编译时出现错误提示:“VHDL Design File “sch” must contain an entity of the same name.” 这是什么原因,如何修改,
library ieee; --1 use ieee.std_logic_1164.all; --2 entity schk is --3
port (din, clk, clr : in std_logic; -- 串行输入数据位/工作时钟/复位信号 --4
ab : out std_logic_vector(3 downto 0) -- 检测结果输出 --5
); --6
end schk; --7 architecture bhv of schk is --8
signal q : integer range 0 to 8; --9
signal d : std_logic_vector(7 downto 0); -- 8位待检测预置数 --10 begin --11
d = "11100101"; -- 8位待检测预置数 --12
process (clk, clr) --13
begin --14
if clr = '1' then q<= 0; --15
else if clk'event and clk = '1' then --16
case q is --17
when 0 => if din = d(7) then q <= 1; else q <= 0; end if; --18
when 1 => if din = d(6) then q <= 2; else q <= 0; end if; --19
when 2 => if din = d(5) then q <= 3; else q <= 0; end if; --20
when 3 => if din = d(4) then q <= 4; else q <= 0; end if; --21
when 4 => if din = d(3) then q <= 5; else q <= 0; end if; --22
when 5 => if din = d(2) then q <= 6; else q <= 0; end if; --23
when 6 => if din = d(1) then q <= 7; else q <= 0; end if; --24
when 7 => if din = d(0) then q <= 8; else q <= 0; end if; --25
when others => q <= 0; --26
end case; --27
end if; --28
end process; --29
process (q) --30
begin --31
if q = 8 then ab <= "1010"; --32
else ab <= "1011"; --33
end if; --34
end process; --35 end bhv; --36 3. 在上述程序代码中存在两处错误,编译时出现如下提示,试修改错误:
Error: Line 12: File f:\eda\schk.vhd: VHDL syntax error: unexpected signal “d” in Concurrent Statement Part Error: Line 29:File f:\eda\schk.vhd: VHDL syntax error: if statement must have END IF, but found PROCESS instead
错误1 行号:11 程序改为:d< = "11100101";
错误2 行号:16 程序改为:elseif clk'event and clk = '1' then
2.修改问题1的错误后,如果编译时出现“Can?t open VHDL “WORK” ”这样的错误提示。 这又是什么原因,如何修改,
四、VHDL程序改错:(10分)
01 LIBRARY IEEE ;
02 USE IEEE.STD_LOGIC_1164.ALL ;
03 USE IEEE.STD_LOGIC_UNSIGNED.ALL;
04 ENTITY LED7CNT IS
05 PORT ( CLR : IN STD_LOGIC;
06 CLK : IN STD_LOGIC;
07 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
08 END LED7CNT;
09 ARCHITECTURE one OF LED7CNT IS
10 SIGNAL TMP : STD_LOGIC_VECTOR(3 DOWNTO 0);
11 BEGIN
12 CNT:PROCESS(CLR,CLK)
13 BEGIN
14 IF CLR = '1' THEN
15 TMP <= 0;
16 ELSE IF CLK'EVENT AND CLK = '1' THEN
17 TMP <= TMP + 1;
18 END IF;
19 END PROCESS;
20 OUTLED:PROCESS(TMP)
21 BEGIN
22 CASE TMP IS
23 WHEN "0000" => LED7S <= "0111111" ;
24 WHEN "0001" => LED7S <= "0000110" ;
25 WHEN "0010" => LED7S <= "1011011" ;
26 WHEN "0011" => LED7S <= "1001111" ;
27 WHEN "0100" => LED7S <= "1100110" ;
28 WHEN "0101" => LED7S <= "1101101" ;
29 WHEN "0110" => LED7S <= "1111101" ;
30 WHEN "0111" => LED7S <= "0000111" ;
31 WHEN "1000" => LED7S <= "1111111" ;
32 WHEN "1001" => LED7S <= "1101111" ;
33 WHEN OTHERS => LED7S <= (OTHERS => '0');
34 END CASE;
35 END PROCESS;
36 END one;
在程序中存在两处错误,试指出,并说明理由:
提示:在MAX+PlusII 10.2上编译时报出的第一条错误为:
Error:Line 15: File ***/led7cnt.vhd: Type error: type in waveform element must
be “std_logic_vector”
第 15 行, 错误:整数0不能直接赋值给TMP矢量
改正:TMP <= (OTHERS => „0?);
第 16 行, 错误:ELSE IF 缺少一条对应的END IF语句
改正:将ELSE IF 改为关键字ELSIF
四、VHDL程序改错:(10分)
仔细阅读下列程序,回答问题
1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3
4 ENTITY CNT4 IS
5 PORT ( CLK : IN STD_LOGIC ;
6 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;
7 END CNT4;
8 ARCHITECTURE bhv OF CNT4 IS
9 SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);
10 BEGIN
11 PROCESS (CLK) BEGIN
12 IF RISING_EDGE(CLK) begin
13 IF Q1 < 15 THEN
14 Q1 <= Q1 + 1 ;
15 ELSE
16 Q1 <= (OTHERS => '0');
17 END IF;
18 END IF;
19 END PROCESS ;
20 Q <= Q1;
21 END bhv;
22
4. 在程序中存在两处错误,试指出,并说明理由:
在MAX+PlusII中编译时,提示的第一条错误为:
Error: Line 12: File e:\mywork\test\cnt4.vhd: VHDL syntax error: If statement must have THEN, but found
BEGIN instead
12行,IF语句对应的关键字是then而非begin
14行,Q1是矢量,不能直接和整数1相加,需要使用重载函数
5. 修改相应行的程序(如果是缺少语句请指出大致的行数): 错误1 行号: 12 程序改为:BEGIN 改为 THEN
错误2 行号: 3 程序改为:USE IEEE.STD_LOGIC_UNSIGNED.ALL; 五、VHDL程序设计:(15分)
设计一数据选择器MUX,其系统模块图和功能表如下图所示。试采用下面三种方式中的两种来描述该数据选择器MUX的结构体。
SEL(1:0)SELCOUT
00A xor BAIN(1:0)01A or BCOUT(1:0)
A nor B10MUXBIN(1:0)
11A nand B
OTHERS“XX”
(a) 用if语句。 (b) 用case 语句。 (c) 用when else 语句。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mymux is
Port ( sel : in std_logic_vector(1 downto 0); -- 选择信号输入
Ain, Bin : in std_logic_vector(1 downto 0); -- 数据输入
Cout : out std_logic_vector(1 downto 0) );
End mymux;
五、VHDL程序设计:(16分)
设计一数据选择器MUX,其系统模块图和功能表如下图所示。试采用下面三种方式中的两种来描述该数据选择器MUX的结构体。
(a) 用if语句。 (b) 用case 语句。 (c) 用when else 语句。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mymux is
Port ( sel : in std_logic_vector(1 downto 0); -- 选择信号输入
Ain, Bin : in std_logic_vector(1 downto 0); -- 数据输入
Cout : out std_logic_vector(1 downto 0) );
End mymux;
五、VHDL程序设计:(16分)
设计一数据选择器MUX,其系统模块图和功能表如下图所示。试采用下面三种方式中的两种来描述该数据选择器MUX的结构体。
(a) 用if语句。 (b) 用case 语句。 (c) 用when else 语句。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mymux is
Port ( sel : in std_logic_vector(1 downto 0); -- 选择信号输入
Ain, Bin : in std_logic_vector(1 downto 0); -- 数据输入
Cout : out std_logic_vector(1 downto 0) );
End mymux;
Architecture one of mymux is
Begin
Process (sel, ain, bin)
Begin
If sel = “00” then cout <= ain and bin;
Elsif sel = “01” then cout <= ain xor bin;
Elsif sel = “10” then cout <= not ain;
Else cout <= not bin;
End if;
End process;
End one;
Architecture two of mymux is
Begin
Process (sel, ain, bin)
Begin
Case sel is
when “00” => cout <= ain and bin;
when “01” => cout <= ain xor bin;
when “10” => cout <= not ain;
when others => cout <= not bin;
End case;
End process;
End two;
Architecture three of mymux is
Begin
Cout <= ain and bin when sel = “00” else
Ain xor bin
when sel = “01” else
Not ain when sel = “10” else not bin;
End three;
五、阅读下列VHDL程序,画出原理图(RTL级):(10分)
library ieee;
use ieee.std_logic_1164.all;
entity lfsr is
port (
clk : in std_logic;
clr : in std_logic;
d : in std_logic;
mout : out std_logic
);
end lfsr;
architecture rtl of lfsr is
signal sreg : std_logic; begin
shift_p : process(clk,clr)
variable s : std_logic;
begin
if clr = '1' then
s := ?0?;
elsif rising_edge(clk) then
s := sreg xor (not d);
end if;
sreg <= s;
end process;
mout <= sreg;
end rtl;
六、根据原理图写出相应的VHDL程序:(15分)
六、根据原理图写出相应的VHDL程序:(10分)
六、根据原理图写出相应的VHDL程序:(10分)
Library ieee; Use ieee.std_logic_1164.all;
Entity mycir is
Port ( A, B, clk : in std_logic;
Qout : out std_logic);
End mycir;
Architecture behave of mycir is
Signal ta, tb, tc;
Begin
tc <= ta nand tb;
Process (clk)
Begin
If clk?event and clk = „1? then
Ta <= A;
Tb <= B;
End if;
End process;
Process (clk, tc)
Begin
If clk = „1? then
Qout <= tc;
End if;
End process;
End behave;
六、写VHDL程序:(20分)
1(设计一个3-8译码器
输入端口: din 输入端,位宽为3位
EN 译码器输出使能,高电平有效 输出端口: xout 译码器输出,低电平有效 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DECODE3_8 IS
PORT ( DIN : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
EN : IN STD_LOGIC;
XOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END DECODE3_8;
ARCHITECTURE ONE OF DECODE3_8 IS
BEGIN
PROCESS (DIN, EN)
BEGIN
IF EN = „1? THEN
IF DIN = “111” THEN XOUT <= “11111110”;
ELSIF DIN = “110” THEN XOUT <= “11111101”;
ELSIF DIN = “101” THEN XOUT <= “11111011”;
ELSIF DIN = “100” THEN XOUT <= “11110111”;
ELSIF DIN = “011” THEN XOUT <= “11101111”;
ELSIF DIN = “010” THEN XOUT <= “11011111”;
ELSIF DIN = “001” THEN XOUT <= “10111111”;
ELSE XOUT <= “11111011”;
END IF;
END IF;
END PROCESS;
END ONE;
2. 看下面原理图,写出相应VHDL描述
INPUTxin
ORDFFDFF
OUTPUTyoutDQDQINPUTclk
LIBARRY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MYCIR IS
PORT ( XIN, CLK : IN STD_LOGIC;
YOUT : OUT STD_LOGIC);
END MYCIR;
ARCHITECTURE ONE OF MYCIR IS
SIGNAL A, B, C;
BEGIN
B <= XIN OR A;
PROCESS (CLK)
BEGIN
IF CLK?EVENT AND CLK = „1? THEN
A <= C;
C <= B;
END IF;
END PROCESS;
YOUT <= C;
END ONE;
七、综合题:(20分)
根据如下所示状态图及其状态机结构图,回答问题
ina="000" ina="100"
ina="110"
ina /= "100" and S0 S1 S2 S3 ina /= “011”
ina="011"
ina="101" / outa="1101" ina="101" / outa="0010" outa="1001" outa="1111"
ina="011" / outa="1110" ina="111" / outa="1100"
(a)
CLK
RESET CLK SIGNAL1 outa REG COM RESET SIGNAL2 ina outa FSM ina
(c) (b)
1.试判断该状态机类型,并说明理由。
改状态机可以为mealy型状态机,当输入ina变化时可影响输出outa立即变化
2.请问如何消除状态机输出信号毛刺,试列出至少两种方法,并说明理由。
方法1,添加辅助进程对输出数据进行锁存
方法2,将双进程状态机改写为单进程状态机,其输出也是锁存过了,故能消除毛刺 方法3,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺 3.试由b、c两图中任选一图写出其完整的VHDL程序。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY EX7 IS
PORT ( CLK, RESET : IN STD_LOGIC;
INA : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
OUTA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END EX7;
-- MOORE型状态机
ARCHITECTURE ONE OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST : STATE;
BEGIN
PROCESS (CLK, RESET, INA) BEGIN
IF RESET = '1' THEN C_ST <= S0; OUTA <= (OTHERS => '0');
ELSIF RISING_EDGE(CLK) THEN
CASE C_ST IS
WHEN S0 => IF INA = "101" THEN OUTA <= "0010";
ELSIF INA = "111" THEN OUTA <= "1100"; END IF;
C_ST <= S1;
WHEN S1 => IF INA = "000" THEN C_ST <= S1;
ELSIF INA = "110" THEN C_ST <= S2; END IF;
OUTA <= "1001";
WHEN S2 => IF INA = "100" THEN C_ST <= S2;
ELSIF INA = "011" THEN C_ST <= S1; ELSE C_ST <= S3;END IF;
OUTA <= "1111";
WHEN S3 => IF INA = "101" THEN OUTA <= "1101";
ELSIF INA = "011" THEN OUTA <= "1110"; END IF;
C_ST <= S3;
WHEN OTHERS => C_ST <= S0; OUTA <= (OTHERS => '0');
END CASE;
END IF;
END PROCESS;
END ONE;
-- MEALY型状态机
ARCHITECTURE TWO OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST, N_ST : STATE;
BEGIN
REG : PROCESS (CLK, RESET) BEGIN
IF RESET = '1' THEN C_ST <= S0;
ELSIF CLK'EVENT AND CLK = '1' THEN C_ST <= N_ST;END IF;
END PROCESS;
COM : PROCESS (C_ST, INA) BEGIN
CASE C_ST IS
WHEN S0 => N_ST <= S1; IF INA = "101" THEN OUTA <= "0010";
ELSIF INA = "111" THEN OUTA <= "1100"; ELSE OUTA <= "0000";END IF;
WHEN S1 => OUTA <= "1001"; IF INA = "000" THEN N_ST <= S1;
ELSIF INA = "110" THEN N_ST <= S2; ELSE N_ST <= S1;END IF;
WHEN S2 => OUTA <= "1111"; IF INA = "100" THEN N_ST <= S2;
ELSIF INA = "011" THEN N_ST <= S1; ELSE N_ST <= S3;END IF;
WHEN S3 => IF INA = "101" THEN OUTA <= "1101";
ELSIF INA = "011" THEN OUTA <= "1110"; ELSE OUTA <= "0000";END IF;
N_ST <= S3;
WHEN OTHERS => N_ST <= S0; OUTA <= (OTHERS => '0');
END CASE;
END PROCESS;
END TWO;
4. 已知一个简单的波形发生器的数字部分系统框图如下图所示:
图中DOWNCNT、MYROM都是在MAX+PlusII中使用MegaWizard调用的LPM模块,其VHDL描述中Entity部分分别如下:
ENTITY DOWNCNT IS
PORT
(
clock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
);
END DOWNCNT;
ENTITY myrom IS
PORT
(
address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END myrom;
试用VHDL描述该系统的顶层设计(使用例化语句)。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mysg is
Port ( clk : in std_logic;
To_da : out std_logic_vector (7 downto 0) ); End mysq;
Architecture one of mysq is
Signal addr : std_logic_vector (5 downto 0); Component lcnt
Port (clock : in std_logic;
Q : out std_logic_vector (5 downto 0) ); End component;
Component lrom
Port (address : in std_logic_vector (5 downto 0);
Q : out std_logic_vector (7 downto 0) ); End component;
Begin
U1 : lcnt port map (clock => clk, q => addr); U2 : lrom port map (address => addr, q => to_da); End one;
七、综合题:(20分)
(一)已知状态机状态图如图(a)所示;完成下列各题:
1.试判断该状态机类型,并说明理由。
该状态机为moore型状态机,输出数据outa和输入ina没有直接逻辑关系,outa是时钟clk的同步
时序逻辑。
2.根据状态图,写出对应于结构图(b),分别由主控组合进程和主控时序进程组成的VHDL有限状态机描
述
Library ieee;
Use ieee.std_logic_1164.all;
Entity mooreb is
Port (clk, reset : in std_logic;
Ina : in std_logic_vector (1 downto 0);
Outa : out std_logic_vector (3 downto 0) ); End mooreb;
Architecture one of mooreb is
Type ms_state is (st0, st1, st2, st3);
Signal c_st, n_st : ms_state;
Begin
Process (clk, reset)
Begin
If reset = „1? then c_st <= st0;
Elsif clk?event and clk = „1? then c_st <= n_st;
End if;
End process;
Process (c_st)
Begin
Case c_st is
When st0 => if ina = “00” then n_st <= st0;
Else n_st <= st1;
End if;
Outa <= “0101”;
When st1 => if ina = “00” then n_st <= st1;
Else n_st <= st2;
End if;
Outa <= “1000”;
When st2 => if ina = “11” then n_st <= st0;
Else n_st <= st3;
End if;
Outa <= “1100”;
When st3 => if ina = “11” then n_st <= st3;
Else n_st <= st0;
End if;
Outa <= “1101”;
When others => n_st <= st0;
End case;
End process;
End one;
3.若已知输入信号如下图所示,分析状态机的工作时序,画出该状态机的状态转换值(current_state)和输出控制信号(outa);
4.若状态机仿真过程中出现毛刺现象,应如何消除;试指出两种方法,并简单说明其原理。 方法1,添加辅助进程对输出数据进行锁存
方法2,将双进程状态机改写为单进程状态机,其输出也是锁存过了,故能消除毛刺 方法3,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺