基于FPGA模糊控制芯片的设计TheDesignofFuzzyLogicControlChipBaseonFPGA王雅生杨毓强符均Wang,YashengYang,YuqiangFu,Jun摘要:本文提出了一种以EP1C3为核心器件,通过VHDL语言实现二输入一输出模糊控制的控制芯片,允许有16条控制规则(可扩展到256条),其模糊推理过程既有并行又有串行,每秒钟可以完成5万次完整的模糊推理运算。该控制芯片可以运用到各种实时性要求高的模糊控制系统中。本文详细介绍了知识库存储、模糊化、模糊推理以及去模糊在FPGA中的实现细节。关键字:模糊控制芯片;FPGA;VHDL语言;中图分类号:TP273+.4文献标识码:AAbstract:AfuzzylogiccontrolchipimplementedbyVHDLlanguageandEP1C3deviceispresented.Thechipallowstwopremisesoneconclusion,and16controlrules(extendedto256controlrulesispossible).Thefuzzyinferenceisprocessedinparallelandsequence.50,000completeinferenceprocessesareimplementedinpersecondwith20MHzfrequency.Thischipismainlyusedforthereal-timeprocesscontrolandothersuitableapplications.TheimplementingdetailsandconsiderationswithFPGAshouldbepaidarepresentedwithfuzzyknowledgebase、fuzzification、fuzzyinferenceengine、defuzzification.1概述当前用模糊算法实现控制的方式主要有两种:一是传统的数字计算机或单片机加上模糊控制算法软件;二是利用专门设计的模糊控制芯片。前者由于使用软件编程,所以有很大的灵活性,但是只能应用于低速的控制,其性能也逊于后者的硬件方式。使用硬件来实现模糊控制,具有推理速度快、实时性好、便于修改模糊规则和率属度函数等优点。根据以上的思路,本文利用CYLONE系列中的EP1C3器件实现了二输入一输出的模糊控制芯片。CYLONE是一款低价格,中等密度的FPGA,采用0.13um,全铜SRAM工艺,容量从2,910个逻辑单元到20,010个逻辑单元,1.5V内核。EP1C3器件有2,910个逻辑单元,1个锁相环,13个M4KRAM块。软件是QuartusII2.2版本。2模糊控制推理算法模型当前的模糊控制算法很多,比较常用的是Mamdani算法,本文将以这种算法模型为依据进行设计。为了便于理解,举一个例子来说明模糊控制推理的算法过程。假设输入变量E(误差)、DE(误差变化率)以及输出变量Z的基本论域分别为[-60,60]、[-120,120]和[-6,6],论域元素范围都为[-6,6]。所以E和DE的量化因子分别为0.1和0.05,Z的比例因子为1。输入变量E和DE的隶属度函数如图1所示:0123456-1-2-3-4-5-60.51隶属度uZOPSPMPBNSNMNB整数论域图1输入变量E和DE隶属度函数图输出变量Z的隶属度函数如图2所示:0123456-1-2-3-4-5-60.51隶属度uCZOCPSCPMCPBCNSCNMCNB整数论域图2输出变量Z隶属度函数表如下:模糊控表率DE制规则如表1所示1控制规则表误差变化控制规则编码NBNMPMPBNSZOPSNBCPBCPBCPBCPBCPMCPSCZONMCPBCPBCPMCPMCPSCZOCZONSCPBCPMCPMCPSCZOCZOCNSZOCPMCPSCPSCZOCNSCNSCNMPSCPSCZOCZOCNSCNMCNMCNB误差EPMCZOCZOCNSCNMCNMCNBCNBPBCZOCNSCNMCNBCNBCNBCNBe=50de/d=-2,量得E如在某时刻输入量为,t0化=50×0/NS+0/ZO+0/PS+0.5/PM+0.5/PB};CNS(Z).5/-3,1/-2,0.5/-1,0/0,0.5/-2,0.5/-1,0/0,0/1,0/2,0/0/-6,0.5/-5,0.5/-4,0.5/-3,0/-2,0/-10/-1,0/0,0/1,0/2,集为:6,0.5/-5,0.5/-4,0.5/-3,0.5/重心法进行去0.1=5,DE=-20×0.05=-1。根据图1可以得出对应各个语言变量的隶属度值:E(5)={0/NB+0/NM+DE(-1)={0/NB+0/NM+0.5/NS+0.5/ZO+0/PS+0/PM+0/PB};且根据表1可知只有以下四条控制规则是有效的:R1:ifEisPMandDEisNSthenZisCNS;R2:ifEisPMandDEisZOthenZisCNM;R3:ifEisPBandDEisNSthenZisCNM;R4:ifEisPBandDEisZOthenZisCNB;应用模糊推理的第一类推理方法,即Max-Min法:R1=ω1∧μCNS(Z)=μPM(5)∧μNS(-1)∧μ=0.5∧0.5∧[0/-6,0/-5,0/-4,00/1,0/2,0/3,0/4,0/5,0/6]=[0/-6,0/-5,0/-4,0.5/-3,3,0/4,0/5,0/6]同理可得R2=R3=[,0/0,0/1,0/2,0/3,0/4,0/5,0/6];R4=[0.5/-6,0.5/-5,0/-4,0/-3,0/-2,0/3,0/4,0/5,0/6]最终输出量的模糊子R=R1∨R2∨R3∨R4=[0.5/--2,0.5/-1,0/0,0/1,0/2,0/3,0/4,0/5,0/6]在求出最终输出量的模糊子集后,就可以利用模糊运算了,所以,模糊控制器最终的输出值为:nνµ∑11iiinii==Ζ=ν∑0.5*(6)0.5*(5)0.5*(4)0.5*(3)0.5*(2)0.5*(1)0*00*10*20*30*40*50*60.50.50.50.50.50.50000000−+−+−+−+−+−+++++++=++++++++++++=-3.5i第i个整数论域值,νi表示第i个语言变量对应的3.5,也即模糊推理过程模糊控制芯片的设计各模糊量以及控制规则的存储各个模糊量的隶属入方式―度表的内存空间时,由图1可知,对地存空间时,与E或DE有所不设高4位表2隶属函数以及知识库的存储和操作文件空间大小其中μ表示隶属度值,n为语言变量的个数。再将此值乘以比例因子1,就得出-的输出。31)要实现模糊控制芯片的功能,首先必须将度函数图以及控制规则存储在芯片的存储器中。在QuartusII2.2环境中,利用内存编辑的文件输―文件名为MIF或者HEX,定制用户所需求的内存空间,包括地址和内容的位数设定。然后再利用宏函数(Megafunction)向导工具自动生成可以对以上内存空间进行读写的VHDL或者VerilogHDL源文件。在生成源文件的向导中一定要选择相应的内存文件名,考虑到程序中可能有对时序要求比较严格的时候,推荐设置时钟使能信号,以实现对内存的读写时序控制。在设计输入变量E隶属址的编码主要由两部分组成,一是语言变量,二是语言变量的整数论域元素值。对语言变量,一般取5-10档,本文设置4位(可以编码16档)。对整数论域值也设置4位,这样可以编码-7到+7或者0到15。把语言变量作为高4位,整数论域值编码作为低4位,所以地址位数为8位,可以寻址的空间为256个。对隶属度(内存内容)的编码主要由隶属度的等级来决定的,本文用了2位,即“00”代表0,“01”代表0.5,“10”代表1.0,如果为了更加精确,可以设置更多的隶属度等级。DE的隶属度函数图和E相同,所以它的内存空间设计与E是相同的。在设计输出变量Z的隶属度表内同,高4位不是对语言变量的编码,而是对控制规则的编码(参见图2),同样可以编码16个控制规则,满足一般的控制需求。对隶属度的编码仍然与E或者DE相同。控制规则表内存空间的寻址地址同样由8位组成,为E的语言变量编码,低4位为DE的语言变量编码(参见表1),最多可以存储256条控制规则。对控制规则(内存内容)的编码也取决于控制规则语言变量的多少,用4位(可编码16个控制规则)就可以满足一般的控制需求。最终将形成以下文件,如下表:内存文件名Vhdl文件名输入变量E2E.mifE.vhd56×2bits输入变量DEDE.mifDE.vhd256×2bits输出变量ZZ.mifZ.vhd256×2bits控制规则表CTRLTAB.mifhdCTRLTAB.v256×4bits2)模糊化首先要进行量化,本文采用了类似查表的方法0],整数论域元素范围[-6,言变量的隶模糊化开始时。根据输入的基本论域和基本论域元素值的范围,将基本论域分成若干段,每一个基本论域段对应一个论域元素值,如果输入的精确值属于某一个段,那么这个段对应的论域元素值便是精确值对应的量化值。如上,基本论域范围[-60,66],那么可以分成(-∞,-55),[-54,-45]…[-4,4]…[45,54],[55,+∞]共13段。如果输入精确值为-56,那么E=-6;如果为50,那么E=5。完成量化之后,再根据量化值求出其对应所有语属度,即模糊子集。为了存放这些隶属度,以便模糊推理使用,建立Fuzzyziji.mif内存文件,一个空间大小为32×2bits的RAM,地址值的低4位对应语言变量的编码,高1位对应输入变量的编码(0代表E,1代表DE),对其读写的文件名为Fuzzyziji.vhd。在对E.mif(De.mif)文件进行读取的时候,将量化值作为地址的低4位,高4位(语言变量的编码)从“0000”变换到“1111”。利用这个组合的8位地址就可以读出E.mif文件中的隶属度值,然后将这些隶属度值存放到Fuzzyziji.mif文件中去。3)模糊推理模糊推理除了有存储器读写的一些操作之外,还有大量的矩和DE的模糊子集(它们存放在Fuzzress和Deaddress中存储的是地址值,也是输入变量各有效的控制规则之后,就可以进行Mamdani运算了阵运算。为了使之更适合硬件电路的实现,本文对设计过程作了优化,去掉那些隶属度为0的不必要的运算,从而在不影响模糊控制芯片任何性能的情况下把矩阵运算简化为隶属度值大小比较。首先,根据Eyziji.mif中)找出所有有效控制规则的条件(ifEisAandDEisB)。要找出“条件”需要读取Fuzzyziji.mif内存空间,如果某个单元的内容(隶属度)不为0,则取出该单元对应的隶属度值和地址值,分别依次赋值到另外两个数组Evalue(Devalue)和Eaddress(Deaddress)中,Fuzzuziji.mif内存文件地址的最高位取值决定赋值给E还是DE。Eadd自的语言变量编码,将它们排列组合之后形成的8位地址(Eaddress为高4位,Deaddress为低4位)作为寻址地址,在控制规则表(内存文件名为CTRLTAB.mif)中可以找到该条件所对应的控制规则。定义一个名为value_ctrltab_array的数组(16×4bits),用来存放控制规则编码。求得所有,由第二节的算法模型可知,对应每个控制规则,E和DE的取小实际上只是两个隶属度值的大小比较,而隶属度值都已经保存在Evalue和Devalue两个数组中,所以只要将这两个数组中的值按排列组合的形式取小,就可以完成所有E和DE的取小运算,而这个运算完全可以在地址排列组合的进程中进行,取小之后的值存放到名为minvalue_ede的数组(16×2bits)中。接着就可以对output.mif文件进行遍历,在进行遍历之前,还要定义一个名为rule_fuzz