电子设计自动化技术
【设计要求】 设计一个存储控制器状态机,要求存储控制器能够根据微 处理器的读周期和写周期分别对存储器输出写使能信号和读写能信号。 存储控制器有四个输入信号:准备就绪信号、微处理器读写信号和复位 时钟信号。 步骤1 分析设计要求,列出状态机所有状态,对所有状态进行编码 信号 复位时钟信号rst、clk 准备就绪信号ready 读写信号rd_wr 读写使能信号oe、we 状态 空闲状态idle 判断状态decs 读状态read 写状态write
idle=”00”; decs =”01”; read =”10”; write=”11”;
b. 手工状态编码:
手工状态编码可以直接使用常数定义来实现。 下面是使用常数定义的方法对ST0 …… ST4进行定义的例子:
SIGNAL PRESENT_STATE, NEXT_STATE: STD_LOGIC_VECTOR(1 DOWNTO 0 ); CONSTANT IDLE CONSTANT DECS : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00" ; : STD_LOGIC_VECTOR(2 DOWNTO 0) := "01" ;
7
【设计要求】 设计一个存储控制器状态机,要求存储控制器能够根据微 处理器的读周期和写周期分别对存储器输出写使能信号和读写能信号。 存储控制器有三个输入信号:准备就绪信号、微处理器读写信号和时钟 信号。
步骤2 设计状态机的状态图
idle read y decs read y read y rd_w r write read y
5.6 有限状态机
自顶向下的模块化设计方法是EDA技术的特点之一 。
从整个系统的功能出发,将系统分割成若干功能模块。
数字系统
受控部分
各种功能的 电路 ,如 计数器,加 法器等。
控制器
数字系统的 核心。
1
1. 状态机的基本概念:
状态机是描述一系列状态转换的电路。 状态机主要用来实现一个数字系统设计中的控制部分。
状态C 状态B
S
S
状态B
输入/输出 输入/输出
状态E 状态D
Y
状态C
Y
状态D
输入/输出
输入/输出
在设计的过程中,采用图形方式表示状态机的状态转移和输出,这个图形 称之为状态转移图,简称状态图。
状态译 码器 状态寄 存器 输出译 码器
6
reset clock
2. 状态机的设计步骤
以下面的实例来说明状态机的设计步骤:
read
writ e
ready
11
reset clock
状态译 码器
状态寄 存器
输出译 码器
(3)状态存储
process (clk) begin if (clk’event and clk=’1’) then present_state<=next_state; ………………………………….. end if;
begin case present_state is when idel =>we<='0';oe<='0'; if (ready='1') then next_state<=decs; else next_state<=idle; end if; read idle …… y end case; read end process; y dec ready ready s rd_wr rd_wr read y
reset clock
单进程:将有限状态机的次态逻辑、状态寄存器和输出逻辑在VHDL 源代码的结构体中用一个进程来进行描述。
双进程:将有限状态机的次态逻辑、状态寄存器和输出逻辑在VHDL 源代码的结构体中用两个进程来进行描述。
三进程:将有限状态机的次态逻辑、状态寄存器和输出逻辑在VHDL 源代码的结构体中各用一个进程来进行描述。
4
5.6.2 状态机的设计实现
x1 y1
…
q1 qi
Q3Q2Q1
…
xi
组合逻辑电路
yi
z1
zi
存储电路
描述时序电路状态转换过程的方法:状态转移图、状态转换表、时序图
输入/输出
计数器的状态转移图:
…
…
000
001
010
011 100
5
111
110
101
1. 状态图
状态机的状态图:
状态A
状态A
输入/输出 输入/输出
9
在状态机设计中,用文字符号定义各状态变量的状态机称为符号化状态 机,其状态变量的编码通常有两种形式:自动和手动。
a. 自动状态编码:
自动编码分配按用户在状态机的枚举类型中所定义的状态的顺序自动
地分配状态值,一般将第一个枚举量(最左边的量)编码为0,以后的依
次加1。如上述程序状态信号。 自动编码值如下:
输出译 码器
moore型有限状态机:其输出信号仅与当前状态有关,即 moore型有限状态机的输出是当前状态的函数。 mealy型有限状态机:其输出信号不仅与当前状态有关, 还与输入有关,即mealy型有限状态机的输出是当前状态和 输入的函数。
3
由于VHDL描述的灵活性,有限状态机可以具有多种不同的 描述方式。 状态译 码器 状态寄 存器 输出译 码器
运行模式类似于CPU,但和CPU相比,具有结构简单、易读易懂等特点。
2. 状态机的结构:
状态译 码器
状态寄 存器
输出译 码器
3. 状态机的操作:
状态机的内部状态转换 产生输出信号序列
2
5.6.1 状态机的分类
在实际应用中,有限状态机主要有两种类型:
reset clock
状态译 码器
状态寄 存器
CONSTANT READ : STD_LOGIC_VECTOR(2 DOWNTO 0) := "11" ; CONSTANT WRITE : STD_LOGIC_VECTOR(2 DOWNTO 0) := "10" ;
10
(2)状态转移的定义 通常情况下,用case_when结构中的一条case语句表达所 有的状态,而状态转移则通过if_then_else。 如:process (present_state,ready,read_write)
8
read y rd_w r read y read
步骤3 用硬件描述语言描述状态机
reset 码器
(1)信号的定义 可以用枚举的状态类型定义状态信号,如: type state_type is ( idle,decs,read,write) ; signal present_state,next_state :state_type;