1、1 第第7 7章章 有限状态机设计有限状态机设计27.1 一般有限状态机描述1.VHDL1.VHDL数据类型数据类型VHDL是一种强数据类型语言。要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且相同数据类型的量才能互相传递和作用。分为:预定义数据类型、用户自定义数据类型 3(1)VHDL(1)VHDL的预定义数据类型的预定义数据类型 布尔量(boolean)布尔量具有两种状态:false 和 true 位(bit)位矢量(bit_vector)字符(character)整数(integer)自然数(natural)和正整数(positive)natu
2、ral是integer的子类型,表示非负整数。positive是integer的子类型,表示正整数。实数(REAL)字符串(string)时间(TIME)4(2)IEEE(2)IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量1)std_logic 类型 由 std_logic 类型代替 bit 类型可以完成电子系统的精确模拟,并可实现常见的三态总线电路。2)std_logic_vector 类型 由 std_logic 构成的数组。5(3)(3)用户自定义类型用户自定义类型 用户自定义类型是VHDL语言的一大特色。可由用户定义的数据类型有:枚举类型 整数和实数类型 数组类型 记录类型 子类
3、型6 用类型定义语句 TYPE 和子类型定义语句 SUBTYPE 实现用户自定义数据类型。TYPE语句格式:例:type boolean is(false,true);type st is array(15 downto 0)of std_logic;variable st1:st;type week is(sun,mon,tue,wed,thu,fri,sat);type 数据类型名 is 数据类型定义 of 基本数据类型;7SUBTYPE语句格式:例:subtype digits is integer range 0 to 9;由subtype 语句定义的数据类型称为子类型。子类型与基(父
4、)类型具有相同的操作符和子程序。可以直接进行赋值操作。subtype 子类型名 is 基本数据类型 range 约束范围;81)1)枚举类型枚举类型 枚举该类型的所有可能的值。格式:如:type std_logic is(U,X,0,1,Z,W,L,H,-);如:type color is(blue,green,yellow,red);type m_state is(st0,st1,st2,st3,st4,st5);signal present_state,next_state:m_state;type 类型名称 is (枚举文字,枚举文字);9枚举类型的编码:综合器自动实现枚举类型元素的编码
5、,一般将第一个枚举量(最左边)编码为0,以后的依次加1。编码用位矢量表示,位矢量的长度将取所需表达的所有枚举元素的最小值。如:type color is(blue,green,yellow,red);编码为:blue=“00”;green=“01”;yellow=“10”;red=“11”;102 2)整数类型)整数类型 用户定义的整数类型是标准包中整数类型的子范围。格式:例:type my_integer is integer range 0 to 9;3 3)数组类型)数组类型 数组数组:同类型元素的集合。VHDL支持多维数组。多维数组的声明:type byte is array(7 do
6、wnto 0)of bit;type vector is array(3 downto 0)of byte;type 类型名称 is range 整数范围;117.1 一般有限状态机描述1.1.状态机状态机状态机(state machine)有限状态机 FSM(finite state machine)状态机是组合逻辑与寄存器逻辑两者的特殊组合。状态机是描述一系列状态转换的时序电路。一般用状态图来表示状态机的运行情况较为明确。对那些任务顺序非常明确的电路(如数字控制模块)非常有用。状态图是一种流程控制的设计,在有限的状态中,根据判别信号的逻辑值决定后面要进入哪一个状态。先来看看下面的状态图。1
7、213FSM(Finite State Machine)状态机是一种记录下给定时刻状态的设备,并根据输入,对每个给定的改变,改变其状态或引发一个动作。有限状态机是有有限个状态的机器 有限状态机由有限的状态和相互之间的转移构成,在任何时候只能处于给定数目的状态中的一个。当接收到一个输入事件时,状态机产生一个输出,同时也可能伴随着状态的转移。有限状态机适用于表示时序控制电路,它可以描述出系统所处的状态、状态之间的转移以及引起状态转移的原因;可以描述同步或异步状态机。14FSM分类FSM根据输入输出关系可分为两类:摩尔(Moore)型状态机 米利(Mealy)型状态机15摩尔(Moore)型状态机
8、摩尔(Moore)型状态机的输出仅仅与当前状态相关。16 摩尔(Moore)型状态图17米利(Mealy)型状态机 米利(Mealy)型状态机的输出不仅与当前状态相关,而且也与输入信号相关。18米利(Mealy)型状态图194 为什么要使用状态机为什么要使用状态机 状态机的工作方式是根据控制信号按照预先设定的状态进行顺序进行的。在速度和可靠性方面优于CPU。结构模式简单,设计方案固定,状态采取符号化枚举类型,为VHDL综合器发挥其强大的优化功能提供有利条件。状态机容易构成性能良好的同步时序逻辑模块,利于消除电路的毛刺现象。高速运算和控制方面,有巨大的优势。多个并行运行的状态机类似并行运行的多C
9、PU的性能。其运算速度比CPU高3至5个数量级。高可靠性。状态机是纯硬件电路,从非法状态中跳出只数十纳秒。而CPU要通过复位从非法运行状态中恢复过来,需要数十毫秒。201.一个有限状态机的VHDL描述应该包括以下内容:至少包括一个状态信号,它们用来指定有限状态机的状态。状态转移指定和输出指定,它们对应于控制单元中与每个控制步有关的转移条件。时钟信号,它是用来进行同步的。同步或异步复位信号。7.1 一般有限状态机的设计212 一个有限状态机通常包含:说明部分主控时序进程(REG)主控组合进程(COM)辅助进程7.1 一般有限状态机的设计Process REGProcessCOMcomb_outp
10、utsclkresetstate_inputsFSM:s_machinecurrent_statenext_state22说明部分一般放在结构体的说明部分:例如:一个符号化的状态机说明部分:TYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL current_state,next_state:FSM_ST;直接指定状态码(非符号化编码)的说明部分:SIGNAL current_state,next_state:std_logic_vector(1 downto 0);CONSTANT st0:std_logic_vector(3 downto 0):=00CONSTANT st
11、1:std_logic_vector(3 downto 0):=01CONSTANT st2:std_logic_vector(3 downto 0):=“10CONSTANT st3:std_logic_vector(3 downto 0):=“1123主控时序进程部分是指负责状态机运转和在时钟驱动下负责状态转换的进程例如:含复位信号的主控时序进程IF reset=1 THEN current_state=s0;ELSIF clk=1 and clk event THENcurrent_state next_state next_state next_state next_state=s0;
12、END CASE;说明部分,主控时序进程设计固定。主控组合进程部分是区分状态机的主要部分。辅助进程用来配合状态机工作的组合进程或时序进程。例如:为了完成某种算法的进程。用了配合状态机的其他时序进程。为了稳定输出设置的数据锁存器。25例:描述如图所示的状态机S2(12)S1(8)S0(5)S3(14)00非非00非非11非非00非非1111001126实体,FSM说明部分LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS port(clk,reset:in std_logic;state_inputs:in std_logic
13、_vector(0 to 1);comb_outputs:out integer range 0 to 15);END;ARCHITECTURE bhv OF s_machine IS TYPE fsm_st is(s0,s1,s2,s3);SIGNAL current_state,next_state:fsm_st;BEGIN 27主控时序进程REGReg:PROCESS(reset,clk)BEGIN IF reset=1 THEN current_state=s0;ELSIF clk=1 and clkevent THEN current_statecomb_outputs=5;if s
14、tate_inputs=00 then next_state=s0;else next_statecomb_outputs=8;if state_inputs=00 then next_state=s1;else next_statecomb_outputs=12;if state_inputs=11 then next_state=s0;else next_statecomb_outputs=14;if state_inputs=11 then next_state=s3;else next_state1 发发数据锁存信号数据锁存信号2 采样状态机状态转换图 39 ADC0809内部逻辑结构
15、 ADC0809引脚图 8位A/D转换器三态输出锁存缓冲器地址锁存与译码8位模拟开关Vref(+)12Vref(-)16ADC08097EOCMsbD7D01920211881517141113VccGNDOE910CLKSTART6ALE22ADDC23ADDB24ADDA25IN754321282726IN012345678910111213141516171819202122232425262728ADC0809IN3IN4IN5IN6IN7STARTEOCD3OECLOCKVccVref(+)GNDD1IN2IN1IN0ADDAADDBADDCALED7D6D5D4D0D2Vref(-
16、)402 采样状态机状态转换图 ADDA=1;st0:ALE=0;START=0;OE=0;LOCK=0;st1:ALE=1;START=1;OE=0;LOCK=0;st2:ALE=0;START=0;OE=0;LOCK=0;st3:ALE=0;START=0;OE=1;LOCK=0;st4:ALE=0;START=0;OE=1;LOCK=1;ALE:地址锁存信号地址锁存信号START:转换启动信号转换启动信号LOCK:输出锁存信号输出锁存信号OE:输出允许信号输出允许信号ADDA:通道选择信号通道选择信号413.VHDL描述状态机(1)实体library ieee;use ieee.std_
17、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;423.VHDL描述状态机(2)说明部分architecture behav of adcint isType states is(st0,st1,st2,st3,st4);signal current_state,next_state:states;signal
18、 regl:std_logic_vector(7 downto 0);signal lock:std_logic;begin433.VHDL描述状态机(3)主控时序进程部分Reg:process(clk)begin if(clk event and clk=1)thencurrent_state ALE=0;START=0;OE=0;LOCK=0;next_state ALE=1;START=1;OE=0;LOCK=0;next_state ALE=0;START=0;OE=0;LOCK=0;if EOC=1 then next_state=st3;else next_state ALE=0;
19、START=0;OE=1;LOCK=0;next_state ALE=0;START=0;OE=1;LOCK=1;next_state ALE=0;START=0;OE=0;LOCK=0;next_state=st0;END CASE;end process com;453.VHDL描述状态机(5)辅助进程部分-锁存器latch1:process(lock)begin if(lock event and lock=1)thenregl=D;end if;end process latch1;463.VHDL描述状态机(6)其它ADDA=1;Q=regl;Lock0 ALE=0;START=0;
20、OE=0;LOCK ALE=1;START=1;OE=0;LOCK ALE=0;START=0;OE=0;LOCK ALE=0;START=0;OE=1;LOCK ALE=0;START=0;OE=1;LOCK ALE=0;START=0;OE=0;LOCK next_state next_state if EOC=1 then next_state=st3;else next_state next_state next_state next_stateALE=0;START=0;OE=0;lock=0;current_state ALE=1;START=1;OE=0;lock=0;curre
21、nt_state ALE=0;START=0;OE=0;lock=0;if EOC=1 then current_state=st3;else current_state ALE=0;START=0;OE=1;lock=0;current_state ALE=0;START=0;OE=1;lock=1;current_stateALE=0;START=0;OE=0;lock=0;current_state=st0;END CASE;end if;end process;51综合结果 可见输出增加了一个锁存器。可以有效地减小组合电路的毛刺现象。但输出会延迟一个时钟周期。52组合进程,时序进程分开
22、的情况组合进程,时序进程分开的情况组合进程,时序进程合并的情况组合进程,时序进程合并的情况538.单进程Moore型有限状态机 例8-4 library ieee;use ieee.std_logic_1164.all;entity moore1 is port(clk,RST:in std_logic;DATAIN:in std_logic_vector(1 downto 0);Q:out std_logic_vector(3 downto 0);end;architecture bhv of moore1 is type st_type is(st0,st1,st2,st3,st4);si
23、gnal c_st:st_type;begin process(clk,RST)begin if RST=1 then c_st=st0;Q if datain=10 then c_st=st1;else c_st=st0;end if;Q if datain=11 then c_st=st2;else c_st=st1;end if;Q if datain=01 then c_st=st3;else c_st=st0;end if;Q if datain=00 then c_st=st4;else c_st=st2;end if;Q if datain=11 then c_st=st0;el
24、se c_st=st3;end if;Qc_st=st0;end case;end if;end process;end;54综合结果 55改写为两进程Moore型有限状态机 例7-4 library ieee;use ieee.std_logic_1164.all;entity moore1 is port(clk,RST:in std_logic;DATAIN:in std_logic_vector(1 downto 0);Q:out std_logic_vector(3 downto 0);end;architecture bhv of moore1 is type st_type is
25、(st0,st1,st2,st3,st4);signal c_st,n_st:st_type;begin process(clk,RST)begin if clkevent and clk=1 then c_st=n_st;end if;end process;process(c_st)begin if RST=1 then n_st=st0;Q if datain=10 then n_st=st1;else n_st=st0;end if;Q if datain=11 then n_st=st2;else n_st=st1;end if;Q if datain=01 then n_st=st
26、3;else n_st=st0;end if;Q if datain=00 then n_st=st4;else n_st=st2;end if;Q if datain=11 then n_st=st0;else n_st=st3;end if;Qn_st=st0;end case;end if;end process;end;56两进程综合结果 57单进程两进程58 例8-57.3 Mealy型有限状态机的设计1/101000/101111/101010/011010/010101/100000/110111/111010/100111/01001Q(输出输出)是是DATAIN(输入输入)与
27、与状态的函数状态的函数DATAIN/Q输入/输出59 例7-5 实体与说明7.3 Mealy型有限状态机的设计library ieee;use ieee.std_logic_1164.all;entity mealy1 is port(clk,datain,reset:in std_logic;Q:out std_logic_vector(4 downto 0);end;architecture bhv of mealy1 is type states is(st0,st1,st2,st3,st4);signal stx:states;begin60 例7-5 主控时序与组合进程7.3 Mea
28、ly型有限状态机的设计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 if datain=1 then Q=10000;else Q if datain=0 then Q=10111;else Q if datain=1 then Q=10101;else Q if datain=0 then Q=11011;else Q i
29、f datain=1 then Q=11101;else Q 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 if;when st3=if datain=0 then Q2:=11011;else Q2:=01001;end if;when st4=if datain=1 then Q2:=11101;else Q2:=0
30、1101;end if;end case;if clkevent and clk=1 then Q=Q2;end if;end process;end;64输出Q锁存的情况65输出Q锁存的情况66将三进程合并一个进程:(mealy3.vhd)与mealy2.vhd效果相同comregcom1:process(clk,reset)begin if reset=1 then stx if datain=1 then stx=st1;end if;if datain=1 then Q=10000;else Q if datain=0 then stx=st2;end if;if datain=0 t
31、hen Q=10111;else Q if datain=1 then stx=st3;end if;if datain=1 then Q=10101;else Q if datain=0 then stx=st4;end if;if datain=0 then Q=11011;else Q if datain=1 then stx=st0;end if;if datain=1 then Q=11101;else Q stx=st0;end case;end if;end process;67输出Q锁存的情况合并一个进程的情况68合并一个进程的情况69常用的描述方式有三种:三进程描述、双进程描
32、述和单进程描述。三进程描述就是指在VHDL源代码的结构体中,用三个进程语句来描述有限状态机的行为:一个进程用来进行有限状态机中的次态逻辑的描述;一个进程用来进行有限状态机中的状态寄存器的描述;还有一个进程用来进行状态机中输出逻辑的描述。所谓双进程描述就是指在VHDL源代码的结构体中,用两个进程语句来描述有限状态机的行为:一个进程语句用来描述有限状态中次态逻辑、状态寄存器和输出逻辑中的任何两个;剩下的一个用另外的一个进程来进行描述。所谓单进程描述就是将有限状态机中的次态逻辑、状态寄存器和输出逻辑在VHDL源代码的结构体中用一个进程来进行描述。707.2 Moore型有限状态机的设型有限状态机的设
33、计计 7.2.2 序列检测器之状态机设计序列检测器之状态机设计 接下页接下页7.2 Moore型有限状态机的设型有限状态机的设计计 7.2.2 序列检测器之状态机设计序列检测器之状态机设计 接上页接上页7.2 Moore型有限状态机的设型有限状态机的设计计 7.2.2 序列检测器之状态机设计序列检测器之状态机设计 74前面为符号化编码,状态机各状态的编码也可以直接指定。7.4 状态编码 状态位直接输出型编码ADDA=1;st0:ALE=0;START=0;OE=0;LOCK=0;st1:ALE=1;START=1;OE=0;LOCK=0;st2:ALE=0;START=0;OE=0;LOCK=
34、0;st3:ALE=0;START=0;OE=1;LOCK=0;st4:ALE=0;START=0;OE=1;LOCK=1;75采样状态机状态转换图(复习)ADDA=1;st0:ALE=0;START=0;OE=0;LOCK=0;st1:ALE=1;START=1;OE=0;LOCK=0;st2:ALE=0;START=0;OE=0;LOCK=0;st3:ALE=0;START=0;OE=1;LOCK=0;st4:ALE=0;START=0;OE=1;LOCK=1;ALE:地址锁存信号地址锁存信号START:转换启动信号转换启动信号LOCK:输出锁存信号输出锁存信号OE:输出允许信号输出允许信
35、号ADDA:通道选择信号通道选择信号76VHDL描述状态机(1)实体library ieee;use ieee.std_logic_1164.all;entity AD0809 isport(clk:in std_logic;EOC:in std_logic;D:in std_logic_vector(7 downto 0);ALE:out std_logic;START:out std_logic;OE:out std_logic;ADDA:out std_logic;lock0:out std_logic;C_state:out std_logic_vector(4 downto 0);Q
36、:out std_logic_vector(7 downto 0);end;77VHDL描述状态机(2)说明部分architecture bhv 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;constan
37、t st3:std_logic_vector(4 downto 0):=00100;constant st4:std_logic_vector(4 downto 0):=00110;signal lock:std_logic;signal regl:std_logic_vector(7 downto 0);begin78VHDL描述状态机(3)主控时序进程部分Reg:process(clk)begin if(clk event and clk=1)thencurrent_state next_state next_state if EOC=0 then next_state=st2;else
38、next_state next_state next_state next_state=st0;end case;end process;80VHDL描述状态机(5)辅助进程部分-锁存器latch1:process(lock)begin if(lock event and lock=1)thenregl=D;end if;end process latch1;81VHDL描述状态机(6)其它ADDA=1;lock0=lock;q=regl;start=current_state(4);ALE=current_state(3);OE=current_state(2);LOCK=current_s
39、tate(1);c_state next_state next_state next_state next_state=st0;3.有时剩余状态比较多,如使用1位循环热码。有2的5次方共32 种状态,而只用了5种状态。如果单独罗列就太多了。可使用 如下方法检测是否进入非法状态。alarm MegaWizard Plug-In Manager Create a new custom megafunction variation(变异)Storage-LPM_RAM_DQ-VHDL-directory ram2.vhd Q:数据位宽度8 address:地址线宽为9 其它默认值90LIBRARY
40、ieee;USE ieee.std_logic_1164.all;ENTITY ram2 ISPORT(address:IN STD_LOGIC_VECTOR(8 DOWNTO 0);inclock :IN STD_LOGIC;we :IN STD_LOGIC :=1;data :IN STD_LOGIC_VECTOR(7 DOWNTO 0);q :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ram2;ARCHITECTURE SYN OF ram2 ISSIGNAL sub_wire0:STD_LOGIC_VECTOR(7 DOWNTO 0);COMPONENT
41、 lpm_ram_dqGENERIC(lpm_width:NATURAL;lpm_widthad:NATURAL;lpm_indata:STRING;lpm_address_control:STRING;lpm_outdata:STRING;lpm_hint:STRING);91PORT(address:IN STD_LOGIC_VECTOR(8 DOWNTO 0);inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);we:IN STD_LOGIC);END C
42、OMPONENT;BEGINq 8,LPM_WIDTHAD=9,LPM_INDATA=REGISTERED,LPM_ADDRESS_CONTROL=REGISTERED,LPM_OUTDATA=UNREGISTERED,LPM_HINT=USE_EAB=ON)PORT MAP(address=address,inclock=inclock,data=data,we=we,q=sub_wire0);END SYN;92 仿真可见 We=1时,时钟信号的上降沿在相应的address写入数据,输出为00,下降沿时输出当前数据q.We=0时,时钟信号的上升沿时读出相应address的数据q936.6.
43、1 LPM_ROM模块 正弦信号发生器设计 ROM:read only memory 在ROM中存放正弦信号数据,需要时 从ROM中按顺序读出#include stdio.h#include math.hmain()int i;float s;for(i=0;irom.txt保存在sindata.mif的文件内容如下:WIDTH=8;-数据宽度DEPTH=64;-数据深度 -此时地址线宽度可设为6位ADDRESS_RADIX=HEX;DATA_RADIX=DEC;CONTENT BEGIN00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:2
44、25;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;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:
45、217;38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255;END;95LPM_ROM定制,命名sindata.vhd File-MegaWizard Plug-In Manager Create a new custom megafunction variation(变异)Storage-LPM_ROM-VHDL-directory sindata.vhd Q:数据位宽度8 address:地址线宽为6 ROM中初始化文件sindata.mif,采用相对路径96LIBRARY ieee;USE ieee.std_logic_1164
46、.all;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:STRIN
47、G;lpm_outdata:STRING;lpm_file:STRING);97PORT(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=sin_data.mif“)PORT MAP(address=address,inclock=inclock,q=
48、sub_wire0);END SYN;98仿真结果:996.6.1 LPM_FIFO模块 FIFO:first in first out File-MegaWizard Plug-In Manager Create a new custom megafunction variation(变异)Storage-LPM_FIFO-VHDL-directory fifo2.vhd 数据位宽度8,数据深度512100LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fifo2 ISPORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO
49、 0);wrreq:IN STD_LOGIC;rdreq:IN STD_LOGIC;clock:IN STD_LOGIC;aclr:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);full:OUT STD_LOGIC);END fifo2;ARCHITECTURE SYN OF fifo2 ISSIGNAL sub_wire0:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL sub_wire1:STD_LOGIC;COMPONENT lpm_fifoGENERIC(lpm_width:NATURAL;lpm_numword
50、s:NATURAL;lpm_widthu:NATURAL;lpm_showahead:STRING;lpm_hint:STRING);101PORT(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);ful:OUT STD_LOGIC );END COMPONENT;BEGINq =sub_wire0(7 DOWNTO 0);full 8,LPM