“自底向上”的设计方法与“自顶向下”的设计方法各有什么特点?
在 VHDL 中,数据对象 (DATA OBJECTS) 和数据类型 (DATA TYPES) 是什么样的关系?
如果在程序中有 STD_LOGIC 型 INTEGER 型数据间的混合运算,需声明使用哪一个程序包?
什么是惯性延时、传输延时、仿真 δ 延时?它们各反映了什么现象?在 VHDL 中它们是如何被表述的?这种表述和可编程器件工作时的实际物理延时是什么关系?
一般在什么情况下使用枚举?在定义数组时,枚举可有什么样的作用?
试分析比较非限定性数组和子类型各自的特点。
信号(SIGNAL)和变量(VARIABLE)各有什么特点?在进程中对它们的赋值处理有哪些不同?
能否说并行描述语句在可编程器件中生成的是并行处理的电路结构,而顺序描述语句生成的是串行处理的电路结构?为什么?
试分析比较过程(PROCEDURE)和函数(FUNCTION)的异同之处。
完整的 IF 语句一般会生成什么硬件电路?不完整的 IF 语句一般会生成什么硬
件电路?
试比较 CASE 语句和 IF 语句的异同之处。
</Exercise>
<Exercise title="什么是状态机?它主要适于处理什么逻辑问题?摩尔型状态机和米里型状态机各有什么特点?
</Exercise>
<Exercise title="写出描述 4 位数码比较器 74LS85(有级联入端 G、S、E) 功能的 VHDL 程序。
</Exercise>
<Exercise title="设计实体 slml 的 VHDL 程序意图实现 4 选 1 选择器。试指出其中的错误。
library ieee;
use ieee.std_logic_1164.all;
entity slm1 is
port(i0,i1,i2,i3,s1,s2 :in std_logic;qo :out std_logic);
end slm1;
architecture sldo of slm1 is
signal sel :integer;
begin
process( s1,s2)
begin
sel <= 0;
if s1 = '1' and s2 = '0' then sel <= 1; end if;
if s1 = '0' and s2 = '1' then sel <= 2; end if;
if s1 = '1' and s2 = '1' then sel <= 3; end if;
case sel is
when 0 => qo <= i0;
when 1 => qo <= i1;
when 2 => qo <= i2;
when 3 => qo <= i3
end case;
end process;
end sldo;设 WORK 库中已有 3 线 -8 线译码器的设计实体 LS138(见例8.5.2)。试用 3 片 LS138 组成 5 线 -24 线译码器并用元件例化语句结构给予描述。
试用元件例化语句结构描述由6片LS85(结合8.15题)构成的24位比较器并用行为描述的方式得出完成同样功能的设计。
写出具有同步复位、置位功能的 JK 触发器的 VHDL 描述程序。
写出具有异步复位、置数功能的十六进制加法计数器的 VHDL 描述程序。
试用 VHDL 设计长度为 31 的 M 序列发生器(时钟 clk、使能 en、输出位 dm)。
设计一单稳触发器,当遇输入触发信号(pul)的上升沿,输出 8 个输入脉冲(clk)
周期宽度的低脉冲信号(dwp)。若在输出低脉冲期间又遇 pul 的上升沿,则输出低脉冲时宽继续顺延 8 个 clk 周期。
设输入数据序列为 X(i),每个 X(i) 数据是 8 位无符号二进制数 (并行码)。 X(i) 为串行同步序列,即每时钟 clk 的上升沿时输入一个数据。试用 VHDL 实现以下滤波运算,得到滤波输出 yout 。运算中的乘、除可用移位直接实现。
operatornameyout (n) = X (n) + 2 * X (n - 1) + 0. 5 * X (n - 2) + 0. 2 5 * X (n - 3)试用 VHDL 实现下式的 IIR 滤波。 X(n) 为串行同步输入序列,每个 X(n) 为 16 位无符号数。运算中的乘、除可通过移位实现。
Y (n) = 0. 6 2 5 * Y (n - 1) + 1. 7 5 * X (n)用 VHDL 实现题图 8.1 给出的状态图。
题表 8.1 为一个交通灯的状态变化顺序,有黄灯的状态的持续时间为半分钟,其他状态的时间为 2 分钟。各方向另有输入信号 apply,若在绿灯持续期间 apply 有效,则该状态持续时间顺延 1 分钟。试画出状态图并做出 VHDL 的实现程序。

题图 8.1
题表8.1
| 东西方向 | 南北方向 |
| 红 | 绿 |
| 红 | 黄 |
| 绿 | 红 |
| 黄 | 红 |
设 X(i) 为串行同步输入序列,每时钟 clk 的上升沿时输入一个数据,每个 X(i) 数据是 1 位二进制数。检测电路将每连续 5 个 X(i) 数据分为一组,当其中有 3 个及 3 个以上的 ‘1’ 时,在第 5 个数据输入的 clk 周期内输出 ‘1’, 否则输出 ‘0’。试用 VHDL 实现此检测电路。画出状态图。
某自动售货机售 A、B、C 3 种商品,它们的价格分别为 1 元、3 元、4 元。售货机仅接受 1 元硬币。售货机面板上设有投币孔和退钱键,每商品标识处有选择按键,上有指示灯表明当前投钱数是否已足够选买该商品。做出此售货机控制电路的状态表,用 VHDL 描述实现。
说明以下 VHDL 程序意图完成的工作,指出可能存在的问题。
use ieee.std_logic_1164.all;
entity avo4 is
port(reset, iclk : in std_logic ; idata : in std_logic_vector(7 downto 0);
oclk : out std_logic ; odata : out std_logic_vector(7 downto 0));
end avo4;
architecture whtodo of avo4 istype statetype is(st0,st1,st2,st3);
signal currentstate, nextstate : statetype;
begin
process(currentstate)
variable akdata : std_logic_vector(7 downto 0);
begin
case currentstate is
when st0 =>
akdata <= idata ; oclk <= '0' ; nextstate <= st1 ;
when st1 =>
akdata <= idata + akdata ; nextstate <= st2 ;
when st2 =>
akdata <= idata + akdata ; nextstate <= st3 ;
when st3 =>
akdata <= idata + akdata ;
akdata <= "00" & akdata(7 downto 2) ;
oclk <= '1';
odata <= akdata ;
nextstate <= st0 ;
end case;
end process;
process(reset, iclk)
begin
if(reset = '1') then currentstate <= st0;
elsif(iclk'event and iclk = '1') then currentstate <= nextstate;
endif;
end process;
end whtodo;第9章 数模和模数转换
Section titled “第9章 数模和模数转换”随着数字电子技术的发展,特别是计算机技术的进步,使得数字技术在自动控制、自动检测、数字移动通信等领域获得广泛应用,数字系统是对数字量进行算术运算和逻辑运算的电路,它具有传统模拟系统无法比拟的高可靠性、高抗干扰能力和高度智能化等优点。
数字系统只能对数字量进行处理,而实际信号大多是连续变换的模拟量,如温度、压力、位移、声音、图像等。因此,需要把这些模拟量转化成数字量,才能送入数字系统进行处理,这种将模拟量转换成数字量的过程称为模数转换(A/D 转换),完成模数转换的电路称为模数转换器(Analog to Digital Converter, ADC)或 A/D 转换器。相反,经过数字系统处理的数字量,一般情况下需要再次转换成模拟量,才能驱动执行机构进行动作,这种转换称为数模转换(D/A 转换),完成数模转换的电路称为数模转换器(Digital to Analog Converter, DAC)或 D/A 转换器。模数转换和数模转换技术是数字电子技术的一个重要分支, ADC 和 DAC 是数字系统的重要接口部件。
为保证数据处理结果的准确性, ADC 和 DAC 必须要有足够的转换精度; 同时,为适应快速信号处理与控制需求, ADC 和 DAC 还必须有足够的转换速度。转换精度和转换速度是衡量 ADC 和 DAC 性能优劣的重要技术指标。本章将介绍数模转换和模数转换的基本原理、电路结构及其应用。