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,s
2、t2,st3,st4,st5 ) ;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
3、.1.2 为什么要使用状态机,7.1 一般有限状态机的设计, 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。, 状态机的结构模式相对简单。, 状态机容易构成性能良好的同步时序逻辑模块。, 状态机的VHDL表述丰富多样。, 在高速运算和控制方面,状态机更有其巨大的优势。, 就可靠性而言,状态机的优势也是十分明显的。,7.1.3 一般有限状态机的设计,7.1 一般有限状态机的设计,1. 说明部分,ARCHITECTURE .ISTYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST; .,7.1.3 一
4、般有限状态机的设计,7.1 一般有限状态机的设计,2. 主控时序进程,图7-1 一般状态机结构框图工作示意图,3. 主控组合进程,7.1.3 一般有限状态机的设计,控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。,7.1 一般有限状态机的设计,4. 辅助进程,【例7-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENT
5、ITY s_machine ISPORT ( clk,reset : IN STD_LOGIC;state_inputs : IN STD_LOGIC_VECTOR (0 TO 1);comb_outputs : OUT INTEGER RANGE 0 TO 15 ); END s_machine; ARCHITECTURE behv OF s_machine ISTYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST; BEGINREG: PROCESS (reset,clk) BEGINIF res
6、et = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state = next_state; END IF;END PROCESS; COM:PROCESS(current_state, state_Inputs),接下页,BEGINCASE current_state IS WHEN s0 = comb_outputs comb_outputs comb_outputs comb_outputs = 14;IF state_inputs = “11“ THEN next_state = s3; ELSE n
7、ext_state = s0; END IF;END case;END PROCESS; END behv;,接上页,7.1.3 一般有限状态机的设计,7.1 一般有限状态机的设计,4. 辅助进程,图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
8、_LOGIC_1164.ALL; ENTITY ADCINT ISPORT (D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK ,EOC : IN STD_LOGIC;ALE, START, OE, ADDA,LOCK0 : OUT STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END ADCINT; ARCHITECTURE behav OF ADCINT IS TYPE states IS (st0, st1, st2, st3,st4) ; -定义各状态子类型SIGNAL current_state, nex
9、t_state: states :=st0 ;SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK : STD_LOGIC; - 转换后数据输出锁存时钟信号BEGINADDA = 1;-当ADDA=0,模拟信号进入0809通道0;当ADDA=1,则进入通道1 Q = REGL; LOCK0 = LOCK ;COM: PROCESS(current_state,EOC) BEGIN -规定各状态转换方式 接下页,7.2.1 三进程有限状态机,CASE current_state IS WHEN st0=ALEALE ALE ALE ALE
10、next_state = st0; END CASE ;END PROCESS COM ;REG: PROCESS (CLK) BEGINIF (CLKEVENT AND CLK=1) THEN current_state=next_state;END IF;END PROCESS REG ; - 由信号current_state将当前状态值带出此进程:REG LATCH1: PROCESS (LOCK) - 此进程中,在LOCK的上升沿,将转换好的数据锁入BEGINIF LOCK=1 AND LOCKEVENT THEN REGL = D ;END IF;END PROCESS LATCH1
11、 ; 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_state 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
12、.1 三进程有限状态机,7.2.2 单进程Moore型有限状态机,7.2 Moore型有限状态机的设计,【例7-4】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MOORE1 ISPORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END MOORE1; ARCHITECTURE behav OF MOORE1 ISTYPE ST_TYPE IS (ST0, ST1, ST2
13、, 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“ ;,接上页 WHEN ST3 = IF DATAIN =“00“ THEN C_ST IF DATAIN =“11“ THEN C_ST C_ST = ST0;END CASE;EN
14、D 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 Mealy型有限状态机的设计,【例7-5】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY1
15、 IS PORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0); END MEALY1; ARCHITECTURE behav OF MEALY1 ISTYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; BEGIN COMREG : PROCESS(CLK,RESET) BEGIN -决定转换状态的进程IF RESET =1 THEN STX = ST0;ELSIF CLKEVENT AND CLK = 1 THEN CA
16、SE 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 = 1 THEN Q IF DATAIN
17、 = 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 FSM USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY2 ISPORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0); END MEALY2; ARCHITECT
18、URE behav OF MEALY2 ISTYPE 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 DAT
19、AIN = 1 THEN STX STX = st0; END CASE ;END IF;END PROCESS COMREG ; COM1: PROCESS(STX,DATAIN,CLK) -输出控制信号的进程VARIABLE Q2 : STD_LOGIC_VECTOR(4 DOWNTO 0);,接上页 BEGINCASE 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
20、IF; WHEN st2= IF DATAIN=1 THEN Q2 :=“10101“; ELSE Q2:=“10011“; END IF;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
21、 ;Q = Q1 ; END behav;,7.3 Mealy型有限状态机的设计,图7-10 例7-5状态机工作时序图,7.3 Mealy型有限状态机的设计,图7-11 例7-6状态机工作时序图,7.4.1 状态位直接输出型编码,7.4 状态编码,表7-1 控制信号状态编码表,【例7-7】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD0809 ISPORT (D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK ,EOC : IN STD_LOGIC;ALE, START, OE, ADDA : OUT ST
22、D_LOGIC;c_state : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END AD0809; ARCHITECTURE behav OF AD0809 IS SIGNAL 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) :=
23、“11000“ ;CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00001“ ;CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00100“ ;,CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00110“ ;SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK : STD_LOGIC; BEGINADDA next_state next_state IF (EOC=1) THEN next_s
24、tate next_state next_state = st0;,WHEN OTHERS = next_state = st0; END CASE ;END PROCESS COM ;REG: PROCESS (CLK) BEGINIF (CLKEVENT AND CLK=1) THEN current_state=next_state;END IF;END PROCESS REG ; - 由信号current_state将当前状态值带出此进程:REGLATCH1: PROCESS (LOCK) - 此进程中,在LOCK的上升沿,将转换好的数据锁入BEGIN IF LOCK=1 AND LO
25、CKEVENT 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,NEXT_STATE: STD_LOGIC_VECTOR(2 DOWNTO 0 ); CONSTANT ST0 : STD_LOGIC_VECTOR(2 DOWNTO 0) := “000“ ; CONSTANT ST1 :
26、 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 encoding),7.4 状态编码,图7-13 一位热码编码方式选择对话框,7.5 状态机剩余状态处理,表7-3 剩余状态,WHEN st_i
27、lg1 = 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) - 组合逻辑进程 BEGINCASE current_state IS - 确定当前状态的状态值.WHEN OTHERS = next_state = st0; END case;
28、,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 OR st1 OR st2 OR st3 OR st4)
29、 ;,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 编辑定制LPM_RAM模块,图7-18 RAM2配置
30、文件与结构设置,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 ISPORT(address : IN STD_LOGIC_VECTOR (8 DOWNTO 0); -9位地址输入inclock : IN STD_LOGIC ; -数据写入时钟w
31、e : 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 ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT lpm_ram_dq -LPM元件GENERIC (lpm_width : NATURAL; -类属 RAM数据宽度 自然数数据类型,接上页lpm_widtha
32、d : 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; BEGINq 8, - 8位数据宽度 自然数数据类型LPM_WID
33、THAD = 9, - 9位地址线宽度 自然数数据类型LPM_INDATA = “REGISTERED“,-寄存器锁存方式写入数据,字符串数据类型LPM_ADDRESS_CONTROL = “REGISTERED“,-寄存器锁存方式写入地址,字符串数据类型,接上页LPM_OUTDATA = “UNREGISTERED“,-非寄存器锁存方式输出数据LPM_HINT = “USE_EAB=ON“ ) -允许使用FPGA中的EABPORT MAP (address = address,inclock = inclock,data = data, we = we,q = sub_wire0); END
34、 SYN;,7.6.4 正弦信号发生器设计与LPM ROM定制,7.6 LPM模块的VHDL文本方式调用,图7-22 波形发生器电路系统结构图,1. 正弦信号发生器结构,2. 正弦信号波形数据文件建立,【例7-12】LPM_ROM中作为正弦波形数据文件sindata.mif WIDTH = 8 ; DEPTH = 64 ; ADDRESS_RADIX = HEX ; DATA_RADIX = DEC ; CONTENT BEGIN00:255 ; 01:254 ; 02:252 ; 03:249 ; 04:245 ; 05:239 ; 06:233 ; 07:225 ;08:217 ; 09:
35、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 ; 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 ;
36、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 定制LPM ROM文件,3. LPM ROM定制,7.6.4 正弦信号发生器设计与LPM ROM定制,图7-24 选择ROM参数,3. LPM ROM定制,7.6 LPM
37、模块的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.all; ENTITY SINDATA ISPORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);inclock
38、: 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;,接上页 lpm_outdata : STRING;lpm_file : STRING );PORT ( add
39、ress : 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,inclock = inclock,q = s
40、ub_wire0 ); END SYN;,【例7-14】 LIBRARY IEEE; -正弦信号发生器源文件 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SINGT ISPORT ( CLK : IN STD_LOGIC; -信号源时钟DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );-8位波形数据输出 END; ARCHITECTURE DACC OF SINGT IS COMPONENT SINDATA -调用波形数据存储器LPM_ROMATAROM.VHD声明
41、PORT(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); -设定内部节点作为地址计数器BEGIN PROCESS(CLK ) -LPM_ROM地址发生器进程BEGINIF CLKEVENT AND CLK = 1 THEN Q1Q1, q = DOUT,inclock=
42、CLK);-例化 END;,7.6.5 编辑定制LPM_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定制文件
43、的仿真测试,【例7-15】LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fifo2 ISPORT(data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); -输入数据wrreq : IN STD_LOGIC ; -写入请求rdreq : IN STD_LOGIC ; -读出请求clock : IN STD_LOGIC ; -工作时钟 aclr : IN STD_LOGIC ; -异步清0q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -数据输出 full : OUT STD_LOGIC );
44、 -溢出标志 END fifo2; ARCHITECTURE SYN OF fifo2 ISSIGNAL 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 :STR
45、ING; -类属 数据读出方式 字符串数据类型lpm_hint : STRING ); -类属 优化方式 字符串数据类型PORT ( 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位LP
46、M_NUMWORDS = 512, -8位字节数512个LPM_WIDTHU = 9, -地址线位宽9位LPM_SHOWAHEAD = “OFF“, -关闭先行数据输出开关- 打开内部EAB,最大速度约束等级为5LPM_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 L
47、PM_FIFO定制文件的仿真测试,图7-32 例7-15的仿真波形,习 题,7-1 仿照例7-1,将例7-4用两个进程,即一个时序进程,一个组合进程表达出来。 7-2 为确保例7-5的状态机输出信号没有毛刺,试用例7-4的方式构成一个单进程状态,使输出信号得到可靠锁存,在相同输入信号条件下,给出两程序的仿真波形。7-3 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收
48、到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例7-16描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。,【例7-16】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK ISPORT(DIN,CLK,CLR : IN STD_LOGIC; -串行输入数据位/工作时钟/复位信号AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -检测结果输出 END SCHK; ARCHITECTURE behav OF SCHK ISSIGNAL Q : INTEGER RANGE 0 TO 8 ;SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); -8位待检测预置数 BEGIND = “11100101 “ ; -8位待检测预置数PROCESS( CLK, CLR )BEGINIF CLR = 1 THEN Q = 0 ;ELSIF CLKEVENT AND CLK=1 THEN -时钟到来时,判断并处理当前输入的位CASE Q IS,
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1