资源描述
单击以编辑,母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,*,数字系统设计的核心知识,复杂数字系统的构成;,基本电路和,Verilog,的,对应关系;,同步有限状态机在电路中的作用;,时钟树与自动综合技术,数字逻辑电路的构成,-,组合逻辑,:,输出只是输入逻辑电平的函数(有延时),与电路的原始状态无关,。,时序逻辑,:,输出不只是输入的逻辑电平的函数,还与电路所处的状态有关。,同步时序逻辑是在同一时钟跳变节拍的前提下,如输入条件满足,则进入下一状态,否则仍留在原来的状态的状态机。,数字逻辑电路的构成,组合逻辑,:,由与、或、非门组成的网络。常用的有:多路器、数据通路开关、加法器、乘法器等,没有记忆功能。,时序逻辑,:,由多个触发器和多个组合逻辑块组成的网络。常用的有:计数器、复杂的数据流动控制逻辑、运算控制逻辑、指令分析和操作控制逻辑。同步时序逻辑的设计是设计复杂的数字逻辑系统的核心。,存储器和寄存器,:,用于暂时存储数据信息。,组合逻辑举例之一,一个八位数据通路控制器,define ON 1 b 1,define OFF 1 b 0,wire,ControlSwitch,;,wire 7:0 out,in;,assign out=(,ControlSwith,=ON)?in :8 h00,in7,ControlSwitch,out7,in0,out0,.,.,一个八位数据通路控制器的波形:,in 7:0,开,关,out7:0,t,t,31,02,15,32,62,88,02,15,32,00,00,in7,ControlSwitch,out7,in0,out0,.,.,带寄存器的八位数据通路控制器的波形,in7,ControlSwitch,out7,CLOCK,D,Q7,CLOCK,in0,ControlSwitch,out0,D,Q0,out7,out0,带寄存器的八位数据通路控制器的,Verilog,描述,define ON 1 b 1,define OFF 1 b 0,wire,ControlSwitch,;,wire clock,wire 7:0 out,in;,always(,posedge,clock),if (,ControlSwith,=ON),out=in;,else,out=out;,带复位端和使能端的寄存器,module,regena,(clock,ena,reset,R,Q);,parameter n=8;,input n-1:0 R;,input clock,ena,reset;,output n-1:0 Q;,always(,posedge,clock or,negedge,reset),if(!reset),Q=0;,else if(,ena,),Q=R;,endmodule,ena,R,clock,D,Q,Q,reset,具有并行置数和使能控制输入的移位寄存器,R1,ena,w,clock,D,Q,Q,reset,Q1,D,Q,Q0,R0,load,具有并行置数和使能控制输入的移位寄存器,module,shiftregs,(R,load,ena,w,clock,Q,reset);,input 3:0 R;,input w,load,ena,reset,clock;,output 3:0 Q;,reg,3:0 Q;,integer k;,always(,posedge,clock or,negedge,reset),if(!reset)Q=0;,else if(load)Q=R;,else if(,ena,)begin Q0=W;,for(k=1;k4;k+1),Qk 7,ns,总延迟=,Max2,3+4+1=8,时钟周期必须 4,ns,总处理数据的吞吐量增加,#1,#1,clock,为什么要设计有限状态机?,如果能严格以时钟跳变沿为前提,按排好时时序,来操作逻辑系统中每一个开关,Si,,,则系统中数据的流动和处理会按同一时钟节拍有序地进行,可以控制冒险和竞争现象对逻辑运算的破坏,,时延问题就能有效地加以解决。,利用同步有限状态机就能产生复杂的以时钟跳变沿为前提的同步时序逻辑,并提供操作逻辑系统的开关阵列所需要的复杂控制时序(具有信号互锁和先后次序等要求的)。,为什么要设计有限状态机?,如果我们能设计这样一个电路:,1)能记住自己目前所处的状态;,2)状态的变化只可能在同一个时钟的跳变沿时刻发生,而不可能发生在任意时刻;,3)在时钟跳变沿时刻,如输入条件满足,则进入下一状态,并记住自己目前所处的状态,否则仍保留原来的状态;,4)在进入不同的状态时刻,对系统的开关阵列做开启或关闭的操作。,为什么要设计有限状态机?,clock,10,ns,S2,开,关,S1,t,t,t,Sn,S3,t,t,t,S4,为什么要设计有限状态机?,有了以上电路,我们就不难设计出复杂的控制序列来操纵数字系统的控制开关阵列。能达到以上要求的电路就是时序和组合电路互相结合的产物:同步有限状态机和由状态和时钟共同控制的开关逻辑阵列。,我们只要掌握有限状态机的基本设计方法,加上对基本电路的掌握,再加上对数据处理的过程的细致了解,我们就可以避免由于逻辑器件和布线延迟产生的冒险竞争现象所造成的破坏,设计出符合要求的复杂数字逻辑系统。,数字系统的构成示意图,同步有限状态机,ena,_2,ena,_3,ena,_n,ena,_1,clock,组合逻辑,1,寄存器组,组合逻辑,2,寄存器组,组合逻辑,3,寄存器组,组合逻辑,N,寄存器组,input_1,input_2,input_n,同步有限状态机的设计,什么是有限状态机(,FSM),FSM,的种类和不同点,设计举例,什么是有限状态机?,-,有限,状态机是由,寄存器,组和,组合逻辑,构成的,硬件时序电路,;,-其状态(即由,寄存器,组的1,和,0的,组合,状态所,构成的,有限,个状态),只能,在,同一,时钟,跳变沿,的,情况,下,才能,从,一个,状态,转向另一个,状态,;,-究竟,转向,哪一状态,不但取决于各个输入,值,,还,取决于当前,状态。,-,状态,机可用于产生在时钟跳变沿时刻开关的,复杂的控制逻辑,是数字逻辑的控制核心。,Mealy,状态机,下一个状态=,F(,当前状态,输入信号);输出信号=,G(,当前状态,输入信号);,图1.时钟同步的状态机结构(,Mealy,状态机),下一状态,的逻辑,F,输出逻辑,G,状态,寄存器,时钟信号,clk,clk,输入,输入,输出,当前状态,激励信号,Moor,状态机,下一个状态=,F(,当前状态,输入信号)输出信号=,G(,当前状态);,下一状,态的逻,辑,F,输出逻辑,G,状态,寄存器,时钟信号,clk,clk,输入,输入,输出,当前状态,激励信号,图2.时钟同步的状态机结构(,Moor,状态机),带流水线输出的,Mealy,状态机,下一个状态=,F(,当前状态,输入信号);输出信号=,G(,当前状态,输入信号);,输出,图3 带流水线输出的,Mealy,状态机,下一状态,的逻辑,F,输出,逻辑,G,状态,寄存器,时钟信号,clk,clk,输入,输入,当前状态,激励信号,输出流水线寄存器,clk,输入,简单的状态机设计举例,状态转移图表示,RTL,级可综合的,Verilog,模块表示,有限状态机的图形表示,图形表示:状态、转移、条件和逻辑开关,图3.4 状态转移图,Idle,Start,Stop,Clear,A/K1=0,!,A,A/K2=1,!,Reset/K2=0 K1=0,!Reset/K2=0 K1=0,(!,Reset|!A)/K2=0 K1=1,!Reset/K2=0 K1=0,有限状态机的,Verilog,描述,定义模块名和输入输出端口;,定义输入、输出变量或寄存器;,定义时钟和复位信号;,定义状态变量和状态寄存器;,用时钟沿触发的,always,块表示状态转移过程;,在复位信号有效时给状态寄存器赋初始值;,描述状态的转换过程:符合条件,从一个状态到另外一个状态,否则留在原状态;,验证状态转移的正确性,必须完整和全面。,表示方法之一,module,fsm,(Clock,Reset,A,K2,K1);,input Clock,Reset,A;,/,定义时钟、复位和输入信号,output K2,K1;,/,定义输出控制信号的端口,reg,K2,K1;,/,定义输出控制信号的寄存器,reg,1:0 state;,/,定义状态寄存器,parameter Idle =2,b00,Start=2,b01,Stop=2,b10,Clear=2,b11;,/,定义状态变量参数值,always(,posedge,Clock),if(!Reset),begin,/,定义复位后的初始状态和输出值,state=Idle;K2=0;K1=0;,end,表示方法之一(续),else,case(state),Idle:begin,if(A)begin,state=Start;,K1=0;,end,else state=Idle;,end,Start:begin,if(!A)state=Stop;,else state=Start;,end,表示方法之一(续),Stop:begin,/,符合条件进入新状态,否则留在原状态,if(A)begin,state=Clear;,K2=1;,end,else state=Stop;,end,Clear:begin,if(!A)begin,state=Idle;,K2=0;K1=1;,end,else state=Clear;,end,endcase,endmodule,表示方法之二,我们还可以用另一个,Verilog,HDL,模型来表示同一个有限状态,,见下例。(用可综合的,Verilog,模块设计用独热码表示状态的状态机),module,fsm,(Clock,Reset,A,K2,K1);,input Clock,Reset,A;,output K2,K1;,reg,K2,K1;,reg,3:0 state;,parameter Idle =4,b1000,Start =4,b0100,Stop =4,b0010,Clear =4,b0001;,表示方法之二(续),always(,posedge,clock),if(!Reset),begin,state=Idle;K2=0;K1=0;,end,else,case(state),Idle:if(A)begin,state=Start;,K1=0;,end,else state=Idle;,表示方法之二(续),Start:if(!A)state=Stop;,else state=Start;,Stop:if(A)begin,state=Clear;,K2=1;,end,else state=Stop;,Clear:if(!A)begin,state=Idle;,K2=0;K1=1;,end,else state=Clear;,表示方法之二(续),default:state=Idle;,endcase,endmodule,例2与例1的主要不同点是状态编码,例2采用了独热编码,而例1则采用,Gray,码,究竟采用哪一种编码好要看具体情况而定。,表示方法之三,在比较复杂的状态机设计过程中,我们往往把状态的变化与输出开关的控制分成两部分来考虑。就象前面讲过的,Mealy,状态机输出部分的组合逻辑。为了调试方便,还常常把每一个输出开关写成一个个独立的,always,组合块。在调试多输出状态机时,这样做比较容易发现问题和改正模块编写中出现的问题。建议同学们在设计复杂的多输出状态机时采用下面的风格举例,说明如下:,表示方法之三(续),module,fsm,(Clock,Reset,A,K2,K1);,input Clock,Reset,A;,output K2,K1;,reg,K2,K1;,reg,1:0 state,nextstate,;,parameter,Idle =2b00,Start =2b01,Stop =2b10,Clear =2b11;,表示方法之三(续),/-,每一个时钟沿产生一次可能的状态变化-,always(,posedge,Clock),begin,if(!Reset),state=Idle;,else,state=,nextstate,;,end,/-,表示方法之三(续),/-,产生下一状态的组合逻辑-,always(state or A),case(state),Idle:if(A),nextstate,=Start;,else,nextstate,=Idle;,Start:if(!A),nextstate,=Stop;,else,nextstate,=Start;,Stop:if(A),nextstate,=Clear;,else,nextstate,=Stop;,Clear:if(!A),nextstate,=Idle;,else,nextstate,=Clear;,default:,nextstate,=2,bxx,;,endcase,表示方法之三(续),/-,产生输出,K1,的组合逻辑-,always(state or Reset or A),if(!Reset)K1=0;,else,if(state=Clear&!A)/,从,Clear,转向,Idle,K1=1;,else K1=0;,/-,产生输出,K2,的组合逻辑-,always(state or Reset or A),if(!Reset)K2=0;,else,if(state=Stop&A)/,从,Stop,转向,Clear,K2=1;,else K2=0;,/-,endmodule,表示方法之四,用输出指定的码表示状态的状态机,方法四采用了另一种方法:直接把状态码定义为输出。也就是把状态码的指定与状态机控制的输出联系起来,把状态的变化直接用作输出,这样做可以提高输出信号的开关速度并节省电路器件。这种设计方法常用在高速状态机中。建议同学们在设计高速状态机时采用方法四的风格。例中,state3,和,state0,分别表示前面两个例子中的输出,K2,和,K1。,表示方法之四(续),module,fsm,(Clock,Reset,A,K2,K1,state);,input Clock,Reset,A;,output K2,K1;,output 4:0 state;,reg,4:0 state;,assign,K2=state4;/,把状态变量的最高位用作输出,K2,assign,K1=state0;/,把状态变量的最低位用作输出,K1,表示方法之四(续),parameter,/-output coded state assignment,-,/-,K2_i_j_n_K1,Idle =5b0_0_0_0_0,Start =5b0_0_0_1_0,Stop =5b0_0_1_0_0,StopToClear,=5b1_1_0_0_0,Clear =5b0_1_0_1_0,ClearToIdle,=5b0_0_1_1_1;,表示方法之四(续),always(,posedge,Clock),if(!Reset),begin,state=Idle;,end,else,case(state),Idle:if(A),state=Start;,else state=Idle;,Start:if(!A)state=Stop;,else state=Start;,表示方法之四(续),Stop:if(A),state=,StopToClear,;,else state=Stop;,StopToClear,:state=Clear;,Clear:if(!A),state=,ClearToIdle,;,else state=Clear;,ClearToIdle,:state=Idle;,default:state=Idle;,endcase,endmodule,状态机的测试,不同风格的描述适合不同规模的状态机和不同的综合工具,有的风格查错和修改较容易,但写简单的状态机时比较麻烦。,Synopsys,公司的综合器建议使用这种风格来描述状态机。,上面四个例子是同一个状态机的四种不同的,Verilog,HDL,模型,它们都是可综合的,在设计复杂程度不同的状态机时有它们各自的优势。如用不同的综合器对这四个例子进行综合,综合出的逻辑电路可能会有些不同,但逻辑功能是相同的。下面列出测试这些不同风格状态机的测试模块,供同学们参考:,状态机的测试模块,timescale 1ns/1ns,module t;,reg,a;,reg,clock,rst,;,wire k2,k1;,initial /initial,常用于仿真时信号的给出。,begin,a=0;,rst,=1;/,给复位信号变量赋初始值,clock=0;/,给时钟变量赋初始值,#22,rst,=0;/,使复位信号有效,#133,rst,=1;/,经过一个多周期后使复位信号无效,end,状态机的测试模块,always#50 clock=clock;/,产生周期性的时钟,always (,posedge,clock)/,在每次时钟正跳变沿时刻产生不同的,a,begin,#30 a=$random%2;/,每次,a,是 0还是1是随机的。,#(3*50+12);/,a,的值维持一段时间,end,initial,begin#100000$stop;end,/,系统任务,暂停仿真以便观察仿真波形。,/-调用被测试模块,t.m-,fsm,m(.Clock(clock),.Reset(,rst,),.A(a),.K2(k2),.K1(k1);,endmodule,状态机设计的总结:,有限状态机设计的一般步骤:,1)逻辑抽象,得出状态转换图,2)状态化简,3)状态分配,在触发器资源丰富的,FPGA,或,ASIC,设计中采用独热编码(,one-hot-coding),既可以使电路性能得到保证又可充分利用其触发器数量多的优势,也可以采取输出编码的状态指定来简化电路结构,并提高状态机的运行速度。,4)选定触发器的类型并求出状态方程、驱动方程和输出方程。,5)按照方程得出逻辑图,状态机设计的总结:,用,Verilog,HDL,来描述有限状态机,可以充分发挥硬件描述语言的抽象建模能力,使用,always,块语句和,case(if),等条件语句及赋值语句即可方便地实现。具体的逻辑化简及逻辑电路到触发器映射均可由计算机自动完成,上述设计步骤中的第2步及4、5步不再需要很多的人为干预,使电路设计工作得到简化,效率也有很大的提高。,逻辑电路的测试,故障模型,测试集合的复杂性,路径的激活,树状结构的电路,随机测试,时序电路的测试,电路内部自测试(,Build-in Self-Test),线路板的测试,逻辑电路的测试,故障模型,信号无法变化的模型,信号,w,总是固定在0 或 1:,stuck_at_0,表示为:,w/0,stuck_at_1,表示为:,w/1,单个故障和多个故障,把多个故障问题简化为许多个单个故障问题来处理。,CMOS,电路的故障特点,晶体三极管的开路或短路:,stuck_at_0,或,stuck_at_1,复杂的情形,不定态;组合逻辑变为时序逻辑的行为.,逻辑电路的测试,测试集合的复杂性,想要知道模块中,a,b,c,d,f,端中是否有电平不能变化的,需要测试信号,w1,w2,w3,的各种变化组合。最全的情况有8种,最少有四种:,测试集合=001,010,011,100,w1,f,w2,w3,d,b,a,c,逻辑电路的测试,测试路径的激活,(,Sensitizing),把,w1,端的变化直接传到,f,端,必须把,w2,置1,,w3,置0,,w4,置1。这叫做从,w1,到,f,的路径被激活。,W3=0,f,W2=1,w1,b,a,c,W4=1,逻辑电路的测试,树状结构的电路,最小,测试集合的确定比较麻烦,f,W4,W1,W4,W2,W2,W3,W1,W3,W3,扫描路径的安排,clock,D,Q,y3,clock,D,Q,y2,正常0/扫描1,D,y1,Q,组合逻辑电路,1,1,1,0,0,0,扫描输入,Y3,Y2,Y1,电路内部自测试,(,Build-in Self-Test),在芯片中必须存储有对测试向量的正确响应,经过比较知道被测试电路是否有故障。,测试向量,被测试电路,测试结果处理,x,0,P,m-1,P,0,X,n,-1,四位内部逻辑块观察器,Built-in Logic Block Observer(BILBO),M1 M2,的不同组合产生不同的功能,1,0,D,Q,D,Q,D,Q,D,Q,M1,M2,q,0,q,2,q,3,q,1,clock,P,0,P,1,P,2,P,3,G/S,s,in,xor,四位内部逻辑块观察器,(,BILBO),的,M1 M2,的不同组合时不同的功能,M1M2=11,正常系统模式,,p0,到,p3,直接,传递到,q0,到,q3,;,M1M2=00,,当,G/S=1,时,为移位寄存器模式,测试矢量一位一位地移动进入,给被测试电路一位一位地加上测试信号。当,G/S=0,时,电路成为二进制伪随机序列发生器。,(,xor,的两个为输入端相同时,输出为0,否则为1),M1M2=10,,为签字模式,,p0,到,p3,与寄存器中存储的数比较后,得到签字输出,q0,到,q3,,,相同为0,不同出现1。,M1M2=01,,复位模式,所有触发器置0。,签字分析,分五个步骤完成签字分析过程:,组合电路块,CN1,组合电路块,CN2,BILBO1,BILBO2,扫描输出,扫描输入,签字分析的,五个步骤,把测试向量一位一位地输入,BILBO1,,复位,BILBO2。,用,BILBO1,做伪随机序列信号源,用,BILBO2,产生签字分析结果。,把,BILBO2,的内容逐位输出,在外面比较签字分析;然后逐位向,BILBO2,输入,CN2,的测试向量,启动测试;把,BILBO1,中的寄存器复位。,用,BILBO2,做伪随机序列信号源,用,BILBO1,产生签字分析结果。,把,BILBO1,的内容逐位输出,在外面比较签字分析。,边界扫描,电路的可测试性:可以施加测试向量,并可观察输出结果。,电路的可测试性包括:芯片的可测试、线路板可测试、系统可测试。,用移位寄存器的方法,把测试向量逐位移入寄存器,把测试结果逐位移出寄存器,与,EDA,仿真工具的结果进行比较,分析真实的物理线路是否运行正常。,这个方法非常普及。已经建立有关边界扫描的国际标准:,IEEE Standard 1149.1.,设计线路板、芯片都要符合国际标准。有自动化工具在芯片设计的过程中(功能逻辑设计结束后)插入有关,DFT(Design For Test),设计。,有关测试的总结,小规模的电路可以进行全覆盖测试来验证它的功能。,组合逻辑可以根据真值表来测试。,时序逻辑可以根据状态转移表来测试。,如果电路是根据上面介绍的可测试性来设计的,则小规模的电路进行完整的测试是比较容易的。,大规模电路无法进行全覆盖的穷举测试,因为测试向量数量太大,必须动脑筋想办法找到可管理的有效测试集合,以节省测试时间。,EDA,工具对于得到设计电路的测试集是有帮助的,但是并不能确定电路的功能确实完全符合设计初衷。,
展开阅读全文