EDA 第5章 常用VHDL设计实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
WHEN S1=> z<='0'; IF xi ='1' THEN next_state<=S2; ELSE next_state<=S0; END IF; WHEN S2=> z<='0'; IF xi='1' THEN next_state<=S3; ELSE next_state<=S0; END IF; WHEN S3=> z<='0'; IF xi='1' THEN next_state<=S3; ELSE next_state<=S4; END IF; WHEN S4=> z<='0'; IF xi='1' THEN next_state<=S1; ELSE next_state<=S5; END IF; WHEN S5=> z<='0'; IF xi='1' THEN next_state<=S6; ELSE next_state<=S0; END IF; WHEN S6=> z<='0'; IF xi='1' THEN next_state<=S2; ELSE next_state<=S7; END IF; WHEN S7=> z<='1'; IF xi='1' THEN next_state<=S1; 2012-7-24ELSE next_state<=S0; END IF;
第5章 常用VHDL设计实例
内容提要:常用数字电路的VHDL描述
常用组合逻辑电路 时序逻辑电路 状态机 存储器 特色实用电路 教学方法:本章以自学为主,重点仅讲 授状态机的设计方法
2012-7-24 1
5.1 组合电路逻辑设计
5.1.1 门电路的设计 (门电路、缓冲器等) 5.1.2 常用组合电路的设计 (译码器、编码器、数据选择器、加 法器、补码器等)
18
IF input1='1' THEN state <=s2; ELSE state<=s1; END IF; WHEN s2=> IF input1='1'THEN state<=s3; ELSE state<=s2; END IF; WHEN s3=> state<=s0; END CASE; END IF; END PROCESS; PROCESS (state, input1) BEGIN CASE state IS WHEN s0=> IF input1='1'THEN output1<=0; ELSE output1<=4; 2012-7-24 END IF;
heat=1 tem p-low=1 tem p-low=1
heat=0 tem p-high=1
2012-7-24
图5-3 空调控制器状态转换图
9
控制器的VHDL描述
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY air_cont IS PORT( clk: IN STD_LOGIC; temp_high: IN STD_LOGIC; temp_low: IN STD_LOGIC; heat: OUT STD_LOGIC; cool: OUT STD_LOGIC); END air_cont; ARCHITECTURE arc1 OF air_cont IS TYPE state_type IS(just_right, too_cold, too_hot); --状态类型,枚举三种状态 SIGNAL stvar: state_type; --状态变量 BEGIN PROCESS BEGIN 2012-7-24
2012-7-24 4
状态机(State Machine)是一类很重要的时 序电路,是很多数字电路的核心部件,是大型电 子设计的基础。状态机相当于一个控制器,它将 一项功能的完成分解为若干步,每一步对应于二 进制的一个状态,通过预先设计的顺序在各状态 之间进行转换,状态转换的过程就是实现逻辑功 能的过程。
2012-7-24 12
2012-7-24
图5-3 序列检测器的状态图
13
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY jcq IS PORT (clk, xi: IN STD_LOGIC; z: OUT STD_LOGIC); END jcq; ARCHITECTURE archjcq OF jcq IS TYPE state_type IS (S0, S1, S2, S3, S4, S5, S6, S7); SIGNAL present_state, next_state: state_type ; BEGIN state_comb: PROCESS (present_state, xi) BEGIN CASE present_state IS WHEN S0=> z<='0'; IF xi='1' THEN next_state<=S1; ELSE next_state<=S0; END IF; 2012-7-24
2012-7-24 8
temp-high=0 temp-low=0
正 好 heat=0
temp-high=0 temp-low=0
cool =0
temp-high=0 temp-low=0
tem p-low=1 tem p-high=1
太 冷 cool=0
tem p-high=1
太 热 cool=1
米里型状态机应具有以下端口信号: 时钟输入端: clk; 输入变量: input1; 输出变量: output1; 状态复位端: reset; 下面给出的是米里型状态机的典型电路的VHDL描 述,对于更复杂的数字系统的程序设计,可查阅有 关资料,通过一定的练习逐步掌握。
2012-7-24
17
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY statmach4 IS PORT( clk, input1, reset : IN BIT; output1: OUT INTEGER RANGE 0 TO 4); END statmach4; ARCHITECTURE a OF statmach4 IS TYPE state_type IS (s0, s1, s2, s3); SIGNAL state: state_type; BEGIN PROCESS (clk) BEGIN IF reset='1'THEN state<=s0; ELSIF (clk'EVENT AND clk='1') THEN CASE state IS WHEN s0=> state<=s1; WHEN s1=> 2012-7-24
19
WHEN s1=> IF input1='1'THEN ELSE END IF; WHEN s2=> IF input1='1'THEN ELSE END IF; WHEN s3=> IF input1='1' THEN ELSE END IF; END CASE; END PROCESS; END a;
2012-7-24
2
5.2 时序电路逻辑设计
5.2.1 触发器设计 (D触发器 、RS触发器、主从JK触发器等) 5.2.2. 移位寄存器设计 (8位串行输入、串行输出移位寄存器 ; 可预加载循环移位寄存器 ; 5.2.3 计数器设计 (具有清零端的4位二进制计数器 、8位异 步复位的可预置加减计数器 ;4位移存器 型扭环计数器 ;顺序脉冲发生器
1. 空调控制器
设计要求: 两个输入temp_high和temp_low分别与温度传感 器相连,用于检测室内温度。如果温度适宜(如 18℃~25℃),则两个输入均为低;如果室内温度 超过上限(25℃),则输入temp_high为高;如果 室内温度低于下限(18℃),则输入temp_low为 高。设控制器的输出为“heat”和“cool”,当两 者之一为高时,空调器就制热或制冷。控制器状 态机的状态转换如图5-3所示。
2012-7-24 11
2. 序列检测器
用途:序列检测器在数字通信、雷达和遥控遥测等领 域中用于检测同步识别标志。 功能:检测一组或多组序列信号,本例要求检测器连 续收到一组串行码(1110010)后,输出检测标志为1;否 则,输出为0。 分析:该例要检测的序列码是7位,需要7个状态分别 记忆连续收到了1,11,111,1110,11100,111001, 1110010的7个状态,还要增加一个“未收到一个有效 位”的初始状态,共8个状态。这8个状态用S0~S7来 表示。状态转移图如图5-3所示。
5.5.1 计数器型防抖动电路设计
5.5.2 积分分频器电路设计
2012-7-24
10
控制器的VHDL描述 (接上页)
WAIT ON clk UNTIL RISING_EDGE(clk); --等待clk上升沿 IF temp_low='1' THEN stvar<=too_cold; --次态逻辑 ELSIF temp_high='1' THEN stvar<=too_hot; ELSE stvar<=just_right; END IF; CASE stvar IS --输出逻辑 WHEN just_right=>heat<='0';cool<='0';--正好,不制冷,也不制热 WHEN too_cold=>heat<='1';cool<='0'; --太冷,制热 WHEN too_hot=>heat<='0';cool<='1'; --太热,制冷 END CASE; END PROCESS; END arc1; 注意,状态变量的判断必须用CASE语句,不能用IF语句
15
END CASE; END PROCESS state_comb; state_clk: PROCESS(clk) BEGIN IF clk'EVENT AND clk='1' THEN present_state<=next_state; END IF; END PROCESS state_clk; END archjcq;
2012-7-24
output1<=1; output1<=4;
output1<=2; output1<=4;
output1<=3; output1<=4;
20Biblioteka 5.4 存储器设计5.4.1只读存储器ROM
5.4.2静态随机存储器SRAM
5.4.3先入后出堆栈
2012-7-24
21
5.5 特色实用电路设计
源文件有两个进程:第一个进程说明次态的取值由现态及输 入决定,但并没有指出它在什么时候成为现态;第二个进程, 我们可以看到该赋值过程与时钟的上升沿同步。因为序列检 测器使用了两个进程来定义有限状态机,故而我们称之为双 进程的有限状态机描述方式。
2012-7-24 16
5.3.2 米里型状态机的设计
出
b) Mealy型状态机 图5-2 两种状态机的模型
2012-7-24 6
一般有限状态机的设计方法 用TYPE语句定义枚举类型来说明状态 机的状态 通过进程来描述状态的转移和输出 内部逻辑可使用多进程方式来描述 (例如时序逻辑进程、组合逻辑进程, 其它逻辑进程)
2012-7-24
7
5.3.1 摩尔型状态机的设计
摩尔(Moore)型:输出信号只与当前状态有关; 米里(Mealy)型:输出信号不仅与当前状态有关, 还与输入信号有关。
2012-7-24
5
输入 次态 输出 寄 存 器 译 码 器
输
...
...
...
译 码 器
出
a) Moore型状态机
输入 次态 输出 寄 存 器 译 码 器
输
...
...
...
译 码 器
2012-7-24 3
5.3 状态机设计
状态机(State Machine)是一类很重要的时 序电路,是很多数字电路的核心部件,是大型电 子设计的基础。状态机相当于一个控制器,通过 预先设计的顺序在各状态之间进行转换,状态转 换的过程就是实现逻辑功能的过程。 状态机有摩尔(Moore)型和米里(Mealy) 型两种。Moore型状态机的输出信号只与当前状 态有关;Mealy型状态机的输出信号不仅与当前状 态有关,还与输入信号有关。如图5-1 所示。