数字系统VHDL设计金明录教授DUT2009年夏季数字系统的VHDL设计金明录教授数字系统VHDL设计金明录教授DUT1.状态机流程图2.SM图的导出3.SM图的实现4.骰子游戏的实现第五章SM图数字系统VHDL设计金明录教授DUT信号赋值语句:信号名=表达式[after延时];复习语句的执行:计算表达式信号的赋值:需要延时CBAC=AandBafter5ns;C=A•B数字系统VHDL设计金明录教授DUT控制器数据分支数据入数据出控制信号状态信号时钟控制信号数字系统的设计组成数字系统VHDL设计金明录教授DUT状态图可以用于描述状态机对数字系统的控制另一种方法:状态机流程图SMchartorASM(AlgorithmicStateMachine)chart比状态图更容易理解数字系统的工作原理直接引出硬件实现1、状态机流程图数字系统VHDL设计金明录教授DUTSM图的基本单元状态码(可选)状态名/输出列表状态框条件成立分支条件不成立分支判决框条件条件输出列表(c)条件输出框1、状态机流程图数字系统VHDL设计金明录教授DUTSM模块1、状态机流程图一条输入通路模块一个状态链路链路n个输出通路一个SM图由多个SM模块构成。每个SM模块描述状态机在一个状态时序里的运行。数字系统VHDL设计金明录教授DUTSM模块的等价性1、状态机流程图数字系统VHDL设计金明录教授DUT条件框的排列顺序并不影响最后输出A010I0I1TTFFBCA010I0TTFFBCI11、状态机流程图数字系统VHDL设计金明录教授DUTMealy时序电路比Moore时序电路具有较少的状态两个等价的SM图对某些I/O具有不同的状态数1101200[0][0][1]1/0010/00/01/110FFFFFTTTT1、状态机流程图判断:是否具有条件输出数字系统VHDL设计金明录教授DUT1、状态机流程图1ZABC1'ZAABC数字系统VHDL设计金明录教授DUTBlockwithFeedback1、状态机流程图数字系统VHDL设计金明录教授DUTEquivalentSMBlocks1、状态机流程图数字系统VHDL设计金明录教授DUTConvertingaStateGraphtoanSMChart1、状态机流程图数字系统VHDL设计金明录教授DUT2、SM图的导出二进制乘法器积4位加法器被乘数乘数控制数字系统VHDL设计金明录教授DUT2、SM图的导出二进制乘法器的SM图输出与输入没有关系数字系统VHDL设计金明录教授DUTprocess(St,K,M,State)--beginLoad='0';Sh='0';Ad='0';Done='0';caseStateiswhen0=ifSt='1'then--St(state0)Load='1';Nextstate=1;elseNextstate=0;--St'endif;when1=ifM='1'then--M(state1)Ad='1';Nextstate=2;else--M'Sh='1';ifK='1'thenNextstate=3;--KelseNextstate=1;--K'endif;endif;when2=Sh='1';--(state2)ifK='1'thenNextstate=3;--KelseNextstate=1;--K'endif;when3=Done='1';--(state3)Nextstate=0;endcase;endprocess;数字系统VHDL设计金明录教授DUT第一次掷骰子结束后,1.如果和为7或者11,则玩家胜出。2.如果和为2,3或者12,则玩家失败。3.和为其他值时,玩家在第一次掷骰子时获得的和将记做一个点,而且玩家必须重新掷骰子。第二次或者是后来的掷骰子1.如果和等于记录的点值,则玩家胜出。2.如果和等于7,则玩家失败。3.否则,玩家必须再次掷骰子直到胜出或者失败。2、SM图的导出掷骰子和=7或11和=2,3或12将和存储于分数寄存器中掷骰子复位和=7赢输复位和=分数YNYYYYNNNNNY数字系统VHDL设计金明录教授DUT显示显示器1-to-6计数器1-to-6计数器加法器分数计数器比较器测试逻辑控制电路掷骰子游戏的模型显示器掷骰子游戏的方框图2、SM图的导出数字系统VHDL设计金明录教授DUT掷骰子和=7或11和=2,3或12将和存储于分数寄存器中掷骰子复位和=7赢输复位和=分数YNYYYYNNNNNY骰子游戏流程图2、SM图的导出数字系统VHDL设计金明录教授DUT10掷骰子游戏的SM图数字系统VHDL设计金明录教授DUT掷骰子游戏控制器的状态图2、SM图的导出数字系统VHDL设计金明录教授DUTGameTestDiceGame掷骰子游戏测试平台的SM图2、SM图的导出数字系统VHDL设计金明录教授DUTentitytesterisendtester;architecturetestoftesteriscomponentGameTestport(Rb,Reset:outbit;Sum:outintegerrange2to12;CLK:inoutbit;Roll,Win,Lose:inbit);endcomponent;componentDiceGameport(Rb,Reset,CLK:inbit;Sum:inintegerrange2to12;Roll,Win,Lose:outbit);endcomponent;signalrb1,reset1,clk1,roll1,win1,lose1:bit;signalsum1:integerrange2to12;beginDice:Dicegameportmap(rb1,reset1,clk1,sum1,roll1,win1,lose1);Dicetest:GameTestportmap(rb1,reset1,sum1,clk1,roll1,win1,lose1);endtest;2、SM图的导出数字系统VHDL设计金明录教授DUT0/aSZX1/bSZ00链路101X2/cSZ链路2X101Z2Z001111链路33、SM图的实现Za=A’B’Zb=A’BZc=ABZ1=ABX’Z2=ABX'''BABXABXABX'AABXABX数字系统VHDL设计金明录教授DUT3、SM图的实现S0/StS1/MShAdLoadS2/ShKS3/DoneK0101001''''(')'(')''''LoadABStShABMKKABKKABMABAdABMDoneAB乘法器控制器的SM图'''''()'AABMKABMABKABMKABK''''(')'(')'''''BABStABMKKABKKABStABMAB00011011数字系统VHDL设计金明录教授DUT3、SM图的实现107112312771123127711231277112312'''''''''''()''()''''Re''''''''AABCRbDDACARbADEqBABCRbDDBResetACRbEqDCBRbABCDDBCsetACDEqWinBCLoseBCRollBCRbSpABCRbDD骰子游戏的实现数字系统VHDL设计金明录教授DUT微程序是一种实现数字系统控制单元的技术一旦结构和控制器确定,则控制器的流程图就可以系统地规定从复位状态到其它所有状态的控制流程中各个时刻应该产生的所有控制信号。为了实现控制单元,我们可以绘制状态图或SM图,写出控制器输出和下一状态的逻辑表达式,并使用门电路和触发器实现状态机。5、微程序数字系统VHDL设计金明录教授DUT5、微程序乘法器控制器的SM图S0:ifStistrue,produceLoadSignalandgotoS1,elsereturntoS0S1:ifMistrue,produceAdandgotoS2,elseproduceSh,checkwhetherKis1;ifKis1gotoS3;ifKis0,gotoS1;S2:produceSh;ifK=0,gotoS1;elsegotoS3;S3:produceDoneandgotoS0乘法器控制器操作伪码数字系统VHDL设计金明录教授DUT◇如果一个存储器能够存储所有的控制信号和每个状态的每一输入条件下的下一状态信息,则我们仅通过对存储器中的内容“排队”就可以实现控制器。正因如此,基于微程序的控制器通常称为排序器。存储控制字的内存称为控制存储器或微程序存储器。◇微程序的缺点是它的速度慢。这是因为其存储器访问是通过读取控制存储器中的控制字来实现的,而硬线化控制信号是由逻辑门生成的,而且逻辑门通常比存储器要快,所以用硬线化技术设计的系统速度较快。5、微程序数字系统VHDL设计金明录教授DUT◇早期的微处理器都是微程序化的,如Intel8086和Motorola68000。◇这些微处理器都支持多种基址和变址寻址方式,允许直接从内存中读操作数和写结果,还有很多复杂指令用以执行一系列的基本操作。◇一条复杂指令涉及好几个操作,而所需要的控制信号可以系统地指定在微程序字中,因此微程序就显得很方便。◇如果采用硬线化技术,就很难实现这些微处理器了。5、微程序数字系统VHDL设计金明录教授DUT◇微程序可以通过很多方法来实现,一般的思路是存储每一个状态所对应的控制字,这一控制字也称为微指令。◇微指令规定将要生成的输出,同时也指定下一条微指令的位置。这与状态图或SM图中的状态转移相对应的。5、微程序数字系统VHDL设计金明录教授DUT◇ROM输出有四个域:TEST、NSF、NST和OUTPUT。◇TEST控制第一个MUX的输入,选择在每个状态下要检测的输入。◇如果这一输入为0(逻辑伪),则第二个MUX选择NSF作为下一状态。◇如果该输入为1(逻辑真),则第二个MUX选择NST作为下一状态。OUTPUT域的每位比特与控制信号相对应。◇为此,对应的SM图必须只有Moore输出。双地址伪代码数字系统VHDL设计金明录教授DUT针对微程序的SM图变换◇为了简便有效地实现微程序编程,我们要变换SM图。◇我们不想使用简单的查找表方法(在LUT法中直接规定了所有输入组合和当前状态)。◇我们对SM图进行变换,使每个状态只有一个入口。◇这种变换可能会增加状态数,但是最终得到的微程序的大小仍旧比基于LUT法的ROM的大小要小得多。5、微程序数字系统VHDL设计金明录教授DUT去除条件输出◇我们希望构建Moore控制器,这样就没有条件控制信号。◇如果控制信号依赖于某些输入条件,则我们应该把不同输入组合所对应的控制信号都存起来。◇因此,为了便于实现微程序,我们首先把状态图或SM图转换为Moore状态机。◇通过增添适当数量的状态,我们可以把任何Mealy机转换为Moore机。5、微程序数字系统VHDL设计金明录教授DUT每个状态只允许一个限制量◇在微程序关联文献中,状态机的每个状态中均要被检测的输入称为限制量(qualifier)。◇例如,图5.28中的St,M和K均为限制量。图中S0和S2都只有一个限制量,但是状态S1检测了两个限制量M和K。◇如果图5.28使用伪码编写,则需要对S1中的多个限制量使用if嵌套语句。当每个状态含有多个限制量时,微程序也可以实现。◇但是当每个状态只有一个限制量时,微程序的实现会简单的多。5、微程序数字系统VHDL设计金明录教授DUTS0/StS01/LoadS1/MS12/ShS11/AdKS3/Done010101S2/ShK105、微程序•变换SM图为Moore机,去除SM图中所有的条件输出•每个状态只检测一个输入(限制量)数字系统VHDL设计金明录教授DUTS0/StS01/LoadS1/MS2/ShS11/AdKS3/Done010101S0/StS01/LoadS1/MS12