【教学课件】第7章有限状态机设计与LPM应用.ppt

上传人:牧羊曲112 文档编号:5659378 上传时间:2023-08-06 格式:PPT 页数:105 大小:743KB
返回 下载 相关 举报
【教学课件】第7章有限状态机设计与LPM应用.ppt_第1页
第1页 / 共105页
【教学课件】第7章有限状态机设计与LPM应用.ppt_第2页
第2页 / 共105页
【教学课件】第7章有限状态机设计与LPM应用.ppt_第3页
第3页 / 共105页
【教学课件】第7章有限状态机设计与LPM应用.ppt_第4页
第4页 / 共105页
【教学课件】第7章有限状态机设计与LPM应用.ppt_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《【教学课件】第7章有限状态机设计与LPM应用.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第7章有限状态机设计与LPM应用.ppt(105页珍藏版)》请在三一办公上搜索。

1、第7章 有限状态机设计与LPM应用,EDA技术实用教程,7.1 一般有限状态机的设计,7.1.1 用户自定义数据类型定义语句,TYPE语句用法如下:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;或TYPE 数据类型名 IS 数据类型定义;,以下列出了两种不同的定义方式:TYPE st1 IS ARRAY(0 TO 15)OF STD_LOGIC;TYPE week IS(sun,mon,tue,wed,thu,fri,sat);,7.1 一般有限状态机的设计,7.1.1 用户自定义数据类型定义语句,TYPE m_state IS(st0,st1,st2,st3,st4,st5)

2、;SIGNAL present_state,next_state:m_state;,布尔数据类型的定义语句是:TYPE BOOLEAN IS(FALSE,TRUE);,TYPE my_logic IS(1,Z,U,0);SIGNAL s1:my_logic;s1=Z;,7.1 一般有限状态机的设计,7.1.1 用户自定义数据类型定义语句,子类型SUBTYPE的语句格式如下:SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围;,SUBTYPE digits IS INTEGER RANGE 0 to 9;,7.1.2 为什么要使用状态机,7.1 一般有限状态机的设计,有限状态机克

3、服了纯硬件数字系统顺序方式控制不灵活的缺点。,状态机的结构模式相对简单。,状态机容易构成性能良好的同步时序逻辑模块。,状态机的VHDL表述丰富多样。,在高速运算和控制方面,状态机更有其巨大的优势。,就可靠性而言,状态机的优势也是十分明显的。,7.1.3 一般有限状态机的设计,7.1 一般有限状态机的设计,1.说明部分,ARCHITECTURE.IS TYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL current_state,next_state:FSM_ST;.,7.1.3 一般有限状态机的设计,7.1 一般有限状态机的设计,2.主控时序进程,图7-1 一般状态机结构框图

4、工作示意图,3.主控组合进程,7.1.3 一般有限状态机的设计,控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。,7.1 一般有限状态机的设计,4.辅助进程,【例7-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT(clk,reset:IN STD_LOGIC;state_inp

5、uts:IN STD_LOGIC_VECTOR(0 TO 1);comb_outputs:OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL current_state,next_state:FSM_ST;BEGIN REG:PROCESS(reset,clk)BEGIN IF reset=1 THEN current_state=s0;ELSIF clk=1 AND clkEVENT THEN current_state=ne

6、xt_state;END IF;END PROCESS;COM:PROCESS(current_state,state_Inputs),接下页,BEGIN CASE current_state IS WHEN s0=comb_outputs comb_outputs comb_outputs comb_outputs=14;IF state_inputs=11 THEN next_state=s3;ELSE next_state=s0;END IF;END case;END PROCESS;END behv;,接上页,7.1.3 一般有限状态机的设计,7.1 一般有限状态机的设计,4.辅助进程

7、,图7-2 例7-1状态机的工作时序图,7.2.1 多进程有限状态机,7.2 Moore型有限状态机的设计,图7-3 ADC0809工作时序,7.2.1 多进程有限状态机,7.2 Moore型有限状态机的设计,图7-4 控制ADC0809采样状态图,7.2.1 多进程有限状态机,图7-5 采样状态机结构框图,【例7-2】LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT IS PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK,EOC:IN STD_LOGIC;ALE,STAR

8、T,OE,ADDA,LOCK0:OUT STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ADCINT;ARCHITECTURE behav OF ADCINT ISTYPE states IS(st0,st1,st2,st3,st4);-定义各状态子类型 SIGNAL current_state,next_state:states:=st0;SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK:STD_LOGIC;-转换后数据输出锁存时钟信号 BEGIN ADDA=1;-当ADDA=0,模拟信

9、号进入0809通道0;当ADDA=1,则进入通道1Q=REGL;LOCK0=LOCK;COM:PROCESS(current_state,EOC)BEGIN-规定各状态转换方式 接下页,7.2.1 三进程有限状态机,CASE current_state IS WHEN st0=ALEALE ALE ALE ALE next_state=st0;END CASE;END PROCESS COM;REG:PROCESS(CLK)BEGIN IF(CLKEVENT AND CLK=1)THEN current_state=next_state;END IF;END PROCESS REG;-由信号c

10、urrent_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK)-此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL=D;END IF;END PROCESS LATCH1;END behav;,7.2.1 多进程有限状态机,7.2 Moore型有限状态机的设计,图7-6 ADC0809采样状态机工作时序,【例7-3】COM1:PROCESS(current_state,EOC)BEGIN CASE current_state IS WHEN st0=next_state next_st

11、ate IF(EOC=1)THEN next_state next_state next_state next_state ALEALEALEALEALE ALE=0;START=0;LOCK=0;END CASE;END PROCESS COM2;,7.2.1 三进程有限状态机,7.2.2 单进程Moore型有限状态机,7.2 Moore型有限状态机的设计,【例7-4】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT(DATAIN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);CLK,RST:IN

12、STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END MOORE1;ARCHITECTURE behav OF MOORE1 IS TYPE ST_TYPE IS(ST0,ST1,ST2,ST3,ST4);SIGNAL C_ST:ST_TYPE;,接上页BEGIN PROCESS(CLK,RST)BEGIN IF RST=1 THEN C_ST IF DATAIN=10 THEN C_ST IF DATAIN=11 THEN C_ST IF DATAIN=01 THEN C_ST=ST3;ELSE C_ST=ST0;END IF;Q=1100;,接上

13、页WHEN ST3=IF DATAIN=00 THEN C_ST IF DATAIN=11 THEN C_ST C_ST=ST0;END CASE;END IF;END PROCESS;END behav;,7.2.2 单进程Moore型有限状态机,7.2 Moore型有限状态机的设计,图7-7 例7-4状态机综合后的RTL电路模块,7.2.2 单进程Moore型有限状态机,7.2 Moore型有限状态机的设计,图7-8 例7-4单进程状态机工作时序,7.2.2 单进程Moore型有限状态机,7.2 Moore型有限状态机的设计,图7-9 对应于例7-4的2进程状态机工作时序图,7.3 Mea

14、ly型有限状态机的设计,【例7-5】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT(CLK,DATAIN,RESET:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY1;ARCHITECTURE behav OF MEALY1 IS TYPE states IS(st0,st1,st2,st3,st4);SIGNAL STX:states;BEGIN COMREG:PROCESS(CLK,RESET)BEGIN-决定转换状态的进程 IF RESET=1

15、THEN STX=ST0;ELSIF CLKEVENT AND CLK=1 THEN CASE STX IS,接上页WHEN st0=IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX STX=st0;END CASE;END IF;END PROCESS COMREG;COM1:PROCESS(STX,DATAIN)BEGIN-输出控制信号的进程 CASE STX IS END behav;,接上页WHEN st0=IF DATAIN=

16、1 THEN Q IF DATAIN=0 THEN Q IF DATAIN=1 THEN Q IF DATAIN=0 THEN Q IF DATAIN=1 THEN Q Q=00000;END CASE;END PROCESS COM1;,【例7-6】MEALY2 LIBRARY IEEE;-MEALY FSMUSE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY2 IS PORT(CLK,DATAIN,RESET:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY2;ARCHITECTURE behav

17、 OF MEALY2 IS TYPE states IS(st0,st1,st2,st3,st4);SIGNAL STX:states;SIGNAL Q1:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN COMREG:PROCESS(CLK,RESET)-决定转换状态的进程,接上页BEGIN IF RESET=1 THEN STX IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX STX=st0;END CASE;

18、END IF;END PROCESS COMREG;COM1:PROCESS(STX,DATAIN,CLK)-输出控制信号的进程 VARIABLE Q2:STD_LOGIC_VECTOR(4 DOWNTO 0);,接上页BEGIN CASE STX IS WHEN st0=IF DATAIN=1 THEN Q2:=10000;ELSE Q2:=01010;END IF;WHEN st1=IF DATAIN=0 THEN Q2:=10111;ELSE Q2:=10100;END IF;WHEN st2=IF DATAIN=1 THEN Q2:=10101;ELSE Q2:=10011;END I

19、F;WHEN st3=IF DATAIN=0 THEN Q2:=11011;ELSE Q2:=01001;END IF;WHEN st4=IF DATAIN=1 THEN Q2:=11101;ELSE Q2:=01101;END IF;WHEN OTHERS=Q2:=00000;END CASE;IF CLKEVENT AND CLK=1 THEN Q1=Q2;END IF;END PROCESS COM1;Q=Q1;END behav;,7.3 Mealy型有限状态机的设计,图7-10 例7-5状态机工作时序图,7.3 Mealy型有限状态机的设计,图7-11 例7-6状态机工作时序图,7.

20、4.1 状态位直接输出型编码,7.4 状态编码,表7-1 控制信号状态编码表,【例7-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD0809 IS PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK,EOC:IN STD_LOGIC;ALE,START,OE,ADDA:OUT STD_LOGIC;c_state:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END AD0809;ARCHITECTURE behav

21、 OF AD0809 ISSIGNAL current_state,next_state:STD_LOGIC_VECTOR(4 DOWNTO 0);CONSTANT st0:STD_LOGIC_VECTOR(4 DOWNTO 0):=00000;CONSTANT st1:STD_LOGIC_VECTOR(4 DOWNTO 0):=11000;CONSTANT st2:STD_LOGIC_VECTOR(4 DOWNTO 0):=00001;CONSTANT st3:STD_LOGIC_VECTOR(4 DOWNTO 0):=00100;,CONSTANT st4:STD_LOGIC_VECTOR

22、(4 DOWNTO 0):=00110;SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK:STD_LOGIC;BEGIN ADDA next_state next_state IF(EOC=1)THEN next_state next_state next_state=st0;,WHEN OTHERS=next_state=st0;END CASE;END PROCESS COM;REG:PROCESS(CLK)BEGIN IF(CLKEVENT AND CLK=1)THEN current_state=next_state;END IF

23、;END PROCESS REG;-由信号current_state将当前状态值带出此进程:REG LATCH1:PROCESS(LOCK)-此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL=D;END IF;END PROCESS LATCH1;END behav;,7.4.1 状态位直接输出型编码,7.4 状态编码,图7-12 例7-7状态机工作时序图,7.4 状态编码,7.4.2 顺序编码,表7-2 编码方式,7.4.2 顺序编码,7.4 状态编码,【例7-8】.SIGNAL CRURRENT_STATE,N

24、EXT_STATE:STD_LOGIC_VECTOR(2 DOWNTO 0);CONSTANT ST0:STD_LOGIC_VECTOR(2 DOWNTO 0):=000;CONSTANT ST1:STD_LOGIC_VECTOR(2 DOWNTO 0):=001;CONSTANT ST2:STD_LOGIC_VECTOR(2 DOWNTO 0):=010;CONSTANT ST3:STD_LOGIC_VECTOR(2 DOWNTO 0):=011;CONSTANT ST4:STD_LOGIC_VECTOR(2 DOWNTO 0):=100;.,7.4.3 一位热码编码(One-hot enc

25、oding),7.4 状态编码,图7-13 一位热码编码方式选择对话框,7.5 状态机剩余状态处理,表7-3 剩余状态,WHEN st_ilg1=next_state next_state=st0;,7.5 状态机剩余状态处理,【例7-9】.TYPE states IS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNAL current_state,next_state:states;.COM:PROCESS(current_state,state_Inputs)-组合逻辑进程BEGIN CASE current_state IS-确定当前状

26、态的状态值.WHEN OTHERS=next_state=st0;END case;,7.5 状态机剩余状态处理,【例7-10】.alarm=(st0 AND(st1 OR st2 OR st3 OR st4 OR st5)OR(st1 AND(st0 OR st2 OR st3 OR st4 OR st5)OR(st2 AND(st0 OR st1 OR st3 OR st4 OR st5)OR(st3 AND(st0 OR st1 OR st2 OR st4 OR st5)OR(st4 AND(st0 OR st1 OR st2 OR st3 OR st5)OR(st5 AND(st0 O

27、R st1 OR st2 OR st3 OR st4);,7.6.1 AD采样系统顶层电路设计,7.6 LPM模块的VHDL文本方式调用,图7-14 ADC0809采样电路系统,7.6.2 编辑定制LPM_RAM模块,7.6 LPM模块的VHDL文本方式调用,图7-15 生成或修改一个定制的LPM模块,7.6.2 编辑定制LPM_RAM模块,图7-16 用VHDL定制LPM_RAM,文件名:RAM2.vhd,7.6.2 编辑定制LPM_RAM模块,7.6 LPM模块的VHDL文本方式调用,图7-17 选择FIFO数据位宽为8,深度为512,7.6 LPM模块的VHDL文本方式调用,7.6.2

28、编辑定制LPM_RAM模块,图7-18 RAM2配置文件与结构设置,7.6 LPM模块的VHDL文本方式调用,7.6.2 编辑定制LPM_RAM模块,图7-19 选择在读请求信号有效后数据输出,7.6.3 双口RAM定制,7.6 LPM模块的VHDL文本方式调用,图7-21 双口RAM的仿真波形,图7-20 双口RAM,7.6.3 双口RAM定制,【例7-11】LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY RAM1 IS PORT(address:IN STD_LOGIC_VECTOR(8 DOWNTO 0);-9位地址输入 inclock:I

29、N STD_LOGIC;-数据写入时钟 we:IN STD_LOGIC;-写允许信号 data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-8位写入数据q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-8位RAM数据输出END RAM1;ARCHITECTURE SYN OF RAM1 IS SIGNAL sub_wire0:STD_LOGIC_VECTOR(7 DOWNTO 0);COMPONENT lpm_ram_dq-LPM元件 GENERIC(lpm_width:NATURAL;-类属 RAM数据宽度 自然数数据类型,接上页 lpm_widt

30、had:NATURAL;-类属 RAM地址线位宽 自然数数据类型 lpm_indata,lpm_address_control,lpm_outdata,lpm_hint:STRING);PORT(address:IN STD_LOGIC_VECTOR(8 DOWNTO 0);we,inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;BEGIN q 8,-8位数据宽度 自然数数据类型 LPM_WIDTHAD=9,-9位地址线宽度 自然数

31、数据类型 LPM_INDATA=REGISTERED,-寄存器锁存方式写入数据,字符串数据类型 LPM_ADDRESS_CONTROL=REGISTERED,-寄存器锁存方式写入地址,字符串数据类型,接上页 LPM_OUTDATA=UNREGISTERED,-非寄存器锁存方式输出数据 LPM_HINT=USE_EAB=ON)-允许使用FPGA中的EAB PORT MAP(address=address,inclock=inclock,data=data,we=we,q=sub_wire0);END SYN;,7.6.4 正弦信号发生器设计与LPM ROM定制,7.6 LPM模块的VHDL文本方

32、式调用,图7-22 波形发生器电路系统结构图,1.正弦信号发生器结构,2.正弦信号波形数据文件建立,【例7-12】LPM_ROM中作为正弦波形数据文件sindata.mifWIDTH=8;DEPTH=64;ADDRESS_RADIX=HEX;DATA_RADIX=DEC;CONTENT BEGIN 00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:225;08:217;09:207;0A:197;0B:186;0C:174;0D:162;0E:150;0F:137;10:124;11:112;12:99;13:87;14:75;15:64;

33、16:53;17:43;18:34;19:26;1A:19;1B:13;1C:8;1D:4;1E:1;1F:0;20:0;21:1;22:4;23:8;24:13;25:19;26:26;27:34;28:43;29:53;2A:64;2B:75;2C:87;2D:99;2E:112;2F:124;30:137;31:150;32:162;33:174;34:186;35:197;36:207;37:217;38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255;END;,7.6.4 正弦信号发生器设计与LPM ROM定制,图7-23 定

34、制LPM ROM文件,3.LPM ROM定制,7.6.4 正弦信号发生器设计与LPM ROM定制,图7-24 选择ROM参数,3.LPM ROM定制,7.6 LPM模块的VHDL文本方式调用,7.6.4 正弦信号发生器设计与LPM ROM定制,图7-25加入初始化文件,3.LPM ROM定制,7.6 LPM模块的VHDL文本方式调用,7.6.4 正弦信号发生器设计与LPM ROM定制,图7-26 例7-13仿真波形,3.LPM ROM定制,7.6 LPM模块的VHDL文本方式调用,3.LPM ROM定制,【例7-13】LIBRARY ieee;USE ieee.std_logic_1164.a

35、ll;ENTITY SINDATA ISPORT(address:IN STD_LOGIC_VECTOR(5 DOWNTO 0);inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END SINDATA;ARCHITECTURE SYN OF SINDATA ISSIGNAL sub_wire0:STD_LOGIC_VECTOR(7 DOWNTO 0);COMPONENT lpm_romGENERIC(lpm_width:NATURAL;lpm_widthad:NATURAL;lpm_address_control:STRING;,

36、接上页lpm_outdata:STRING;lpm_file:STRING);PORT(address:IN STD_LOGIC_VECTOR(5 DOWNTO 0);inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;BEGINq 8,LPM_WIDTHAD=6,LPM_ADDRESS_CONTROL=REGISTERED,LPM_OUTDATA=UNREGISTERED,LPM_FILE=D:/SIN_G/DATA/sin_data.mif)PORT MAP(address=address,incloc

37、k=inclock,q=sub_wire0);END SYN;,【例7-14】LIBRARY IEEE;-正弦信号发生器源文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SINGT IS PORT(CLK:IN STD_LOGIC;-信号源时钟 DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-8位波形数据输出END;ARCHITECTURE DACC OF SINGT ISCOMPONENT SINDATA-调用波形数据存储器LPM_ROMATAROM.VHD声明 PORT(

38、address:IN STD_LOGIC_VECTOR(5 DOWNTO 0);inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;,4.完成正弦信号发生器顶层设计和测试,接上页 SIGNAL Q1:STD_LOGIC_VECTOR(5 DOWNTO 0);-设定内部节点作为地址计数器 BEGINPROCESS(CLK)-LPM_ROM地址发生器进程 BEGIN IF CLKEVENT AND CLK=1 THEN Q1Q1,q=DOUT,inclock=CLK);-例化END;,7.6.5 编辑定制LPM

39、_FIFO模块,图7-28 选择FIFO数据位宽为8,深度为512,7.6 LPM模块的VHDL文本方式调用,7.6.5 编辑定制LPM_FIFO模块,7.6 LPM模块的VHDL文本方式调用,图7-29 7-19 fifo端口设置,7.6.5 编辑定制LPM_FIFO模块,7.6 LPM模块的VHDL文本方式调用,图7-30 选择Area优化方式和EAB构建,7.6.5 编辑定制LPM_FIFO模块,7.6 LPM模块的VHDL文本方式调用,图7-31单击“Finish”后完成fifo2.vhd的定制,7.6.6 LPM_FIFO定制文件的仿真测试,【例7-15】LIBRARY ieee;U

40、SE ieee.std_logic_1164.all;ENTITY fifo2 IS PORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-输入数据 wrreq:IN STD_LOGIC;-写入请求 rdreq:IN STD_LOGIC;-读出请求 clock:IN STD_LOGIC;-工作时钟 aclr:IN STD_LOGIC;-异步清0 q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-数据输出 full:OUT STD_LOGIC);-溢出标志END fifo2;ARCHITECTURE SYN OF fifo2 IS SIGNA

41、L sub_wire0:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL sub_wire1:STD_LOGIC;,接上页 COMPONENT lpm_fifo-调用LPM_FIFO声明 GENERIC(lpm_width:NATURAL;-类属 数据宽度 自然数数据类型 lpm_numwords:NATURAL;-类属 数据深度 自然数数据类型 lpm_widthu:NATURAL;-类属 地址宽度 自然数数据类型 lpm_showahead:STRING;-类属 数据读出方式 字符串数据类型 lpm_hint:STRING);-类属 优化方式 字符串数据类型 PORT

42、(rdreq:IN STD_LOGIC;aclr:IN STD_LOGIC;clock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);wrreq:IN STD_LOGIC;data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);full:OUT STD_LOGIC);END COMPONENT;BEGIN,接上页 q 8,-类属映射语句,数据宽度8位 LPM_NUMWORDS=512,-8位字节数512个 LPM_WIDTHU=9,-地址线位宽9位 LPM_SHOWAHEAD=OFF,-关闭先行数据输出开关-打开内部EAB,最

43、大速度约束等级为5 LPM_HINT=USE_EAB=ON,MAXIMIZE_SPEED=5)PORT MAP(rdreq=rdreq,aclr=aclr,clock=clock,wrreq=wrreq,data=data,q=sub_wire0,full=sub_wire1);END SYN;,7.6 LPM模块的VHDL文本方式调用,7.6.6 LPM_FIFO定制文件的仿真测试,图7-32 例7-15的仿真波形,习 题,7-1 仿照例7-1,将例7-4用两个进程,即一个时序进程,一个组合进程表达出来。7-2 为确保例7-5的状态机输出信号没有毛刺,试用例7-4的方式构成一个单进程状态,使

44、输出信号得到可靠锁存,在相同输入信号条件下,给出两程序的仿真波形。7-3 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例7-16描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍

45、然输出“B”。,【例7-16】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK IS PORT(DIN,CLK,CLR:IN STD_LOGIC;-串行输入数据位/工作时钟/复位信号 AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-检测结果输出END SCHK;ARCHITECTURE behav OF SCHK IS SIGNAL Q:INTEGER RANGE 0 TO 8;SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);-8位待检测预置数BEGIN D=11100101;-8位待

46、检测预置数 PROCESS(CLK,CLR)BEGIN IF CLR=1 THEN Q=0;ELSIF CLKEVENT AND CLK=1 THEN-时钟到来时,判断并处理当前输入的位 CASE Q IS,WHEN 0=IF DIN=D(7)THEN Q IF DIN=D(6)THEN Q IF DIN=D(5)THEN Q IF DIN=D(4)THEN Q IF DIN=D(3)THEN Q IF DIN=D(2)THEN Q IF DIN=D(1)THEN Q IF DIN=D(0)THEN Q Q=0;END CASE;END IF;END PROCESS;PROCESS(Q)-检测

47、结果判断输出 BEGIN IF Q=8 THEN AB=1010;-序列数检测正确,输出“A”ELSE AB=1011;-序列数检测错误,输出“B”END IF;END PROCESS;END behav;,要求1:说明例7-16的代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程。要求2:根据例7-16写出由两个主控进程构成的相同功能的符号化Moore型有限状态机,画出状态图,并给出其仿真测试波形。要求3:将8位待检测预置数作为外部输入信号,即可以随时改变序列检测器中的比较数据。写出此程序的符号化单进程有限状态机。提示:对于D=“11100101”,电路需分别不

48、间断记忆:初始状态、1、11、111、1110、11100、111001、1110010、11100101 共9种状态。,习 题,7-4 根据图7-33(a)所示的状态图,分别按照图7-33(b)和图7-33(c)写出对应结构的VHDL状态机。,图7-33 习题7-4状态图,习 题,7-5 在不改变原代码功能的条件下用两种方法改写例7-2,使其输出的控制信号(ALE、START、OE、LOCK)没有毛刺。方法1:将输出信号锁存后输出;方法2:使用状态码直接输出型状态机,并比较这三种状态机的特点。,实 验 与 设 计,7-1 用状态机实现序列检测器的电路设计(1)实验目的:用状态机实现序列检测器

49、的设计,并对其进行仿真和硬件测试。(2)实验原理:序列检测器的工作原理已在习题7-3中作了说明。(3)实验内容1:仔细完成习题7-3的全部内容,利用MAX+plusII对例7-16进行文本编辑输入、仿真测试并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。,实 验 与 设 计,建议选择电路模式No.8,用键7(PIO11)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;待检测串行序列数输入DIN接PIO10(左移,最高位在前);指示输出AB接PIO39PIO36(显示于数码管6)。下载后:按实验板“系统复位”键;用键2和键1输入2位十六进制待测序列数“111

50、00101”;按键7复位(平时数码6指示显“B”);按键6(CLK)8次,这时若串行输入的8位二进制序列码(显示于数码2/1和发光管D8D0)与预置码“11100101”相同,则数码6应从原来的B变成A,表示序列检测正确,否则仍为B。,实 验 与 设 计,(4)实验内容2:根据习题7-3中的习题要求3提出的设计方案,重复以上实验内容(将8位待检测预置数由键4/键3作为外部输入,从而可随时改变检测密码)。(5)实验思考题:如果待检测预置数必须以右移方式进入序列检测器,写出该检测器的VHDL代码(两进程符号化有限状态机),并提出测试该序列检测器的实验方案。(6)实验报告:根据以上的实验内容写出实验

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号