第四章VHDL状态机
- 格式:ppt
- 大小:1.50 MB
- 文档页数:18
VHDL的结构非常适合编写状态机,而且编写方式不唯一,电路的集成也会随着编写的方式而改变。
状态机的设计主要用到case when 和if else 两种语句。
Case when 用来指定并行的行为,而if then else 用来设计优先度的编码逻辑。
分析状态机有如下特点:1.对于状态的描述一般先声明一个枚举数据类型,语句如下:Type state_type is(idle,tap1,tap2,tap3,tap4);2.对于存储当前状态的对象一般用是一个信号,即:Signal state: state_type;3.对于状态机的下一个状态的判断一般是通过对时钟上升沿判断的if then else 语句内嵌case when 语句4.对于状态机的输出则可以用一个条件或者选择信号声明语句,或者再用一个case语句来实现信号输出。
状态机分为三大类型:1.Moore状态机:次态=f(现状),输出=f(现状),即输出信号是直接由状态寄存器译码得到2.Mealy状态机:次态=f(现状,输入),输出=f(现状,输入),即以现时的输入信号结合即将变成次态的现状编码成信号输出。
3.混合型状态机我们用一个序列信号发生器的实例来做练习。
(状态机将在以后的很多实例中加以运用,请掌握其编写方法)序列信号就是一些串行的周期性信号,这些信号在每个循环周期内1和0数码按一定的规则顺序排列。
下面所讲解的序列发生器能够按规定输出8位’0’,’1’序列。
代码如下:逐行解释:10:清零复位信号,高电平复位清零。
12:序列信号输出。
因为是8位的端口,但序列信号是串行的,所以相当于有8路的序列信号,任取一位端口就是一个序列信号输出。
17:用type声明一种枚举类型。
共8中状态,每个状态都对应唯一的一种输出,至于在什么状态输出什么信号则由程序决定。
18:定义一个state类型信号量,其初始的状态为s0。
19-26:用constant定义一些常量,这些常量将作为在不同状态时的输出信号。
第四章VHDL简明教程§4.1 VHDL基本结构与语法·VHDL是VHSIC Hardware Description Language的缩写□VHSIC—Very High Speed Integrated Circuit(1982年)·由美国国防部(DOD)制定,以作为各合同商之间提交复杂电路设计文档的一种标准方案·1987年被采纳为IEEE 1076标准·1993年被更新为IEEE 1164标准HDL 的出现是为了适应电子系统设计的日益复杂性。
若以计算机软件的设计与电路设计做个类比,机器码好比晶体管/MOS管;汇编语言好比网表;则HDL语言就如同高级语言,VHDL在语法和风格上类似与现代高级编程语言,如C语言。
但要注意,VHDL 毕竟描述的是硬件,它包含许多硬件特有的结构。
·现在VHDL被广泛用于:电路设计的文档记录设计描述的逻辑综合电路仿真采用VHDL及自顶向下方法在大型数字系统设计中被广泛采用。
在设计中你可采用较抽象的语言(行为/算法)来描述系统结构,然后细化成各模块,最后可借助编译器将VHDL 描述综合为门级。
本教程仅对用于CPLD/FPGA设计描述的VHDL语言作一简单说明。
其设计过程一般如下:1. 代码编写;2. 由综合器(如Synplify,Synopsys等)综合成门级网表;3. 前仿真/功能仿真;4. 布局/布线至某一类CPLD/FPGA中;5. 后仿真/时序仿真。
4.1.1 VHDL的组成一个VHDL设计由若干个VHDL文件构成,每个文件主要包含如下三个部分中的一个或全部:1.程序包(Package);2.实体(Entity);3.结构体(Architecture).——120其各自作用如下图所示:一个完整的VHDL设计必须包含一个实体和一个与之对应的结构体。
一个实体可对应多个结构体,以说明采用不同方法来描述电路。
《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。
主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。
目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。
课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。
教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。
本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。
二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。
通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。
三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。
服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。
六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。
(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。
(A)1.4 IP Core 及EDA技术发展趋势。
(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。
图像识别算法与系统设计题目:VHDL第一次作业给定任一二值图像,从中串行检测序列111000姓名:刘振宇学号:1502121227学院:电子通信工程学院一、设计功能与要求给定任一图像(不小于256*256),利用MATLAB将其转化成二值图像,并以.tex格式存储。
利用VHDL将文本读取并自主选择状态机进行序列检测,串行检测要求序列(111000)。
二、设计思路首先选取任一图像并利用MATLAB代码将其转换成.BMP格式,再将其转换成二值图像BW,转换之后用fprintf存储为.txt格式的文本形式。
第二部进行状态机的设计,根据要求设计七个状态来完成六位序列的状态循环,根据状态机原理图我选择上课时所讲的mealy_controller状态机,因为当前状态与前一时刻状态还有输入有关。
完成状态机模块的编写后进行子模块的调用和textio的读取,将子模块进行元件例化后用readline和read语句进行读去文本完成循环,最后进行仿真。
三、原理图说明六位状态机要求序列111000用七个状态st1到st7来表示,状态转换过程如下图3-1:图3-1 状态转移图由于当前状态与前一状态还有输入datain有关,所以选用mealy状态机最优。
一旦输入信号发生变化,输出信号即刻发生变化。
输入对输出的影响在当前时钟周期内体现出来,属于同步输出状态机。
满足串行输入时即刻显示状态的要求,能很好的完成题目要求。
状态从st1到st7进行循环,各个状态之间根据输入的不同也有转换关系,只有从st1依次到st7时才能检查到序列111000,其他情况下会重新检索或者自循环。
四、源代码首先要完成任一图片转换成二值图片的要求,MATLAB代码如下:RGB=imread('air.jpg');imwrite(RGB, 'air.bmp', 'bmp');Bw=im2bw(RGB,0.5);imwrite(Bw, 'air_two.bmp', 'bmp');ID=fopen('my_text.txt','w+');fprintf(ID,'%d',Bw);第二步要完成状态机的构造和各个状态在输入后的输出值变化,具体源代码如下:library IEEE;usestd.textio.all;use IEEE.std_logic_1164.ALL;useIEEE.std_logic_textio.all;entitymealy_controller isport (clk,datain,reset:instd_logic;q:out std_logic_vector(5 downto 0));endmealy_controller;architecturebeh of mealy_controller istype states is (st1,st2,st3,st4,st5,st6,st7);signalstx : states;signal q1:std_logic_vector(5 downto 0);begincomreg:process(clk,reset)beginif reset='1' then stx<=st1;elsifclk'event and clk='1'thencasestx iswhen st1=> if datain='1'then stx<=st2;end if;when st2=> if datain='1'then stx<=st3;else stx<=st1;end if;when st3=> if datain='1'then stx<=st4;else stx<=st1;end if;when st4=> if datain='0'then stx<=st5;else stx<=st4;end if;when st5=> if datain='0'then stx<=st6;else stx<=st2;end if;when st6=> if datain='0'then stx<=st7;else stx<=st2;end if;when st7=> if datain='0'then stx<=st1;else stx<=st2;end if;when others=>stx<=st1;end case;end if;end process comreg;com1:process(stx,datain,clk)variable q2:std_logic_vector(5 downto 0);begincasestx iswhen st1=>if datain='1'then q2:="000001";else q2:="000000";end if;when st2=>if datain='1'then q2:="000011";else q2:="000000";end if;when st3=>if datain='1'then q2:="000111";else q2:="000000";end if;when st4=>if datain='0'then q2:="001110";else q2:="000111";end if;when st5=>if datain='0'then q2:="011100";else q2:="000001";end if;when st6=>if datain='0'then q2:="111000";else q2:="000001";end if;when st7=>if datain='1'then q2:="000001";else q2:="000000";end if;when others=>q2:="000000";end case;ifclk'event and clk='1'then q1<=q2;end if;end process com1;q<=q1;--if q1="111000"then q<=q1;else q<="000000";end if;endbeh;为了随着状态变化完成111000的变化,根据状态机的原理图,新的输入被认为是从右向左输入,并在特定位置(如st4)保持不变。
4.11 用状态机实现序列检测器的程序设计与仿真1 实验目的用状态机实现序列检测器的设计,并对其进行仿真和硬什测试。
2 实验原理序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到—组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出“I”,否则输出“0”。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
该实验源程序描述的电路完成对序列数“11l00101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则输出“B”。
3 实验内容(1) 用VHDL语言编写序列检测器的源程序。
(2)将源程序进行综合、优化及功能仿真,并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。
建议用键7(PIO11)控制复位信号CLR;键6(PI09)控制状态机工作时钟CLK;待检测串行系列数输入DIN接PIO10(左移,最高位在前):指示输出AB接PI039~PI036(显示于数码管6),下载后:①按实验板“系统复位”键:②用键2和键1输入2位十六进制待测序列数“11100101”;③按键7复位(平时数码6指示显“B”):④按键6(CLK)8次,这时若串行输入的8位二进制序列码(显示于数码2/1和发光管D8~D6)与预置码11100101”相同,则数码6应从原来的B变成A,表示序列检测正确,否则仍为B。
4 实验预习思考(1)说明源程序的代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程。
(2) 写出由两个主控进程构成的相同功能的符号化Moore型有限状态机,画出状态图,井给出其仿真测试波形。
5 程序设计与仿真(1)程序设计为此工程新建一个文件夹。
第1章绪论1.1电子设计自动化1.2EDA技术,是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
1.31、用软件的方式设计硬件。
2、用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的。
3、设计过程中可用有关软件进行各种仿真。
4、系统可现场编程,在线升级。
5、整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.4可编程逻辑器件(Programmable Logic Device,PLD)是一种由用户编程以实现某种逻辑功能的新型逻辑器件。
FPGA和CPLD分别是现场可编程门阵列和复杂可编程逻辑器件的简称。
1.51、自顶向下设计方法是一种模块化设计方法。
它对设计的描述从上到下,逐步由粗略到详细,符合常规的逻辑思维习惯。
由于高层设计与器件无关,设计易于在各种集成电路工艺或可编程器件之间移植。
2、适合多个设计者同时进行设计。
随着技术的不断进步,许多设计由一个设计者已无法完成,而必须经过多个设计者分工协作来完成。
在这种情况下,应用自顶向下的设计方法便于多个设计者同时进行设计,对设计任务进行合理分配,并用系统工程的方法对设计进行管理。
第2章可编程逻辑器件2.1按结构的复杂程度分类、按互连结构分类、按可编程特性分类、按可编程器件的编程元件分类2.2主动串行配置式、主动并行配置模式、外设配置模式、从动串行配置模式、菊花链配置模式2.31、编程单元。
查找表型FPGA的编程单元为SRAM结构,可以无限次编程,但它属于易失性元件,掉电后芯片内的信息会丢失;而CPLD则采用EEPROM编程单元,不仅可无限次编程,且掉电后片内的信息不会丢失。
《EDA技术与VHDL基础》课后习题答案第一章EDA技术概述一、填空题1、电子设计自动化2、非常高速集成芯片硬件描述语言3、CAD、CAE、EDA4、原理图输入、状态图输入、文本输入5、VHDL、Verilog HDL6、硬件特性二、选择题1、A2、C3、A4、D5、C6、D7、A第二章可编程逻辑器件基础一、填空题1、PLD2、Altera公司、Xilinx公司、Lattice公司3、基于反熔丝编程的FPGA4、配置芯片二、选择题1、D2、C3、C4、D第三章VHDL程序初步——程序结构一、填空题1、结构、行为、功能、接口2、库和程序包、实体、结构体、配置3、实体名、类型表、端口表、实体说明部分4、结构体说明语句、功能语句5、端口的大小、实体中子元件的数目、实体的定时特性6、设计库7、元件、函数8、进程PROCESS、过程PROCEDURE9、顺序语句、并行语句二、选择题1、D2、C3、C4、B5、D6、B7、A8、C三、简答题2、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY nand_3in ISPORT(a,b,c:IN STD_LOGIC;y:OUT STD_LOGIC);END;ARCHITECTURE bhv OF nand_3in ISBEGINy<=NOT(a AND b AND c);END bhv;5、00006、11110111(247)第四章VHDL基础一、填空题1、顺序语句、并行语句2、跳出本次循环3、等待、信号发生变化时4、函数、过程5、值类属性、函数类属性、信号类属性、数据类型类属性、数据范围类属性6、程序调试、时序仿真7、子程序、子程序二、选择题1、B2、A3、A4、C5、B6、C7、D三、判断题1、√2、√3、√4、√5、×6、×四、简答题9、修改正确如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count ISPORT(clk:IN BIT;q:OUT BIT_VECTOR(7 DOWNTO 0)); END count;ARCHITECTURE a OF count ISBEGINPROCESS(clk)IF clk'EVENT AND clk='1' THENq<=q+1;END PROCESS;END a;10、修改正确如下所示:…SIGNAL invalue:IN INTEGER RANGE 0 TO 15; SIGNAL outvalue:OUT STD_LOGIC;…CASE invalue ISWHEN 0=>outvalue<='1';WHEN 1=>outvalue<='0';WHEN OTHERS=>NULL;END CASE;…11、修改正确如下所示:ARCHITECTURE bhv OF com1 ISBEGINSIGNAL a,b,c:STD_LOGIC;pro1:PROCESS(clk)BEGINIF NOT (clk'EVENT AND clk='1') THENx<=a XOR b OR c;END IF;END PROCESS;END;12、(1) PROCESS(…) --本题中两条IF语句均为信号c进行可能赋值,VHDL语言不允许IF a=b THENc<=d;END IF;IF a=4 THENc<=d+1;END IF;END PROCESS;(2)ARCHITECTURE behave OF mux IS --同时为q进行多次可能赋值,VHDL语言不允许BEGINq<=i0 WHEN a='0' AND b='0' ELSE '0'; --WHEN ELSE语句语法错误q<=i1 WHEN a='0' AND b='1' ELSE '0';q<=i2 WHEN a='1' AND b='0' ELSE '0';q<=i3 WHEN a='1' AND b='1' ELSE '0';END behave;13、next1<=1101 WHEN (a='0' AND b='0') ELSEd WHEN a='0' ELSEc WHEN b='1' ELSE1011;15、(1)、STD_LOGIC_UNSIGNED(2)、GENERIC(3)、IN(4)、width-1(7)(5)、counter_n(6)、“00000000”(7)、clk’EVENT AND clk=’1’(8)、ELSIF(9)、END IF(10)、q<= count16、修改正确如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 ISPORT ( clk: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNT10;ARCHITECTURE bhv OF CNT10 ISSIGNAL q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS (clk)BEGINIF RISING_EDGE(clk) begin –begin修改为THENIF q1 < 9 THEN --q1为STD_LOGIC数据类型,而9为整型不可直接比较q1 <= q1 + 1; -- q1为STD_LOGIC数据类型,而1为整型不可直接相加ELSEq1 <= (OTHERS => '0');END IF;END IF;END PROCESS;q <= q1;END bhv;17、使用IF语句实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 ISPORT(ain,bin,sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);cout:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END;ARCHITECTURE bhv OF mux21 ISSIGNAL cout_tmp:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINPROCESS(ain,bin,sel)BEGINIF (sel="00") THEN cout_tmp<=ain OR bin;ELSIF (sel="01") THEN cout_tmp<=ain XOR bin;ELSIF (sel="10") THEN cout_tmp<=ain AND bin;ELSE cout_tmp<=ain NOR bin;END IF;END PROCESS;cout<=cout_tmp;END bhv;第五章QuartusⅡ集成开发软件初步一、填空题1、实体名2、FPGA、CPLD3、.vhd4、输入、综合、适配、仿真、下载5、RTL Viewer、Technology Map Viewer6、功能、参数含义、使用方法、硬件描述语言、模块参数设置7、mif、hex8、根目录二、选择题1、C2、D第七章有限状态机设计一、设计题1、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;in_a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);out_a:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL current_state,next_state:state; --定义存储现态和次态的信号BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,in_a) --次态产生进程BEGINCASE current_state ISWHEN s0=>IF in_a/=”00” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=>IF in_a=/'”01” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=>IF in_a=”11” THEN next_state<=s0ELSE next_state<=s3;END IF;WHEN s3=>IF in_a/='11' THEN next_state<=s0;ELSE next_state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;p3:PROCESS(current_state)BEGINCASE current_state ISWHEN s0=>out_a<='”0101”;WHEN s1=>out_a<=”1000”;WHEN s2=>out_a<=”1100”;WHEN s3=>out_a<=”1101”;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;2、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(2 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL current_state,next_state:state;BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,ina)BEGINCASE current_state ISWHEN s0=> IF ina =”101” THEN outa<=”0010”;ELSIF ina=”111” THEN outa <=”1100”;END IF;IF ina =”000” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=> outa<=”1001”;IF ina =”110” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=> outa<=”1111”;IF ina =”011” THEN next_stat e<=s1;ELSIF ina =”100” THEN next_state<=s2;ELSE next_state<=s3;END IF;WHEN s3=> IF ina =”101” THEN outa<=”1101”;ELSIF ina=”011” THEN outa <=”1100”;END IF;IF ina =”010” THEN next_state<=s0;ELSE next_state<=s1;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;3、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(1 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL state:istate;BEGINp1:PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN state<=s0;result<='0';ELSECASE state ISWHEN s0=>outa<=”0000”;IF ina=”00” THEN state<=s1;ELSE state<=s0;END IF;WHEN s1=> outa <=”0001”;IF ina=”01” THEN state<=s2;ELSE state<=s1;END IF;WHEN s2=> outa <=”1100”;IF ina=”11” THEN state<=s3;ELSE state<=s0;END IF;WHEN s3=> outa <=”1111”;IF ina=”00” THEN state<=s0;ELSE state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END IF;END IF;END PROCESS;END;第九章VHDL基本逻辑电路设计一、填空题1、输入信号、所处状态2、组合逻辑、时序逻辑3、触发器、14、D触发器、RS触发器、JK触发器、T触发器二、选择题1、A2、C。
关于三段式状态机(VHDL)的写法⼼得和问题
三段式状态机,看着很繁琐,但是⽤起来条理清晰,⾃⼰总结⼀下
第⼀段:状态改变
这⾥需要特别注意的是,第5⾏,状态变化的时候,必须要使⽤时钟沿,上升或下降,不能在两个沿都变化,虽然这样仿真正确,但是下载到硬件中⽆效,状态不会变化
1:process(clk,rst_n)
2:begin
3:if(rst_n = '0') then
4: current_state <= s_wait;
5: elsif rising_edge(clk) then
6: current_state <= next_state;
7:end if;
8:end process state_change;
第⼆段:状态转化
这⼀段注意:
敏感列表是current_state和process中涉及到变化的所有信号
在case xxx is 前⾯初始化 next_state <= s_wait; 这样就不⽤在下⾯状态中关⼼这个状态了
最后要写 when others => 空,据说是避免综合出锁存器,现在还不理解。