北京至芯FPGA培训数字系统设计的核心知识•复杂数字系统的构成;•基本电路和Verilog的对应关系;•同步有限状态机在电路中的作用;•时钟树与自动综合技术北京至芯FPGA培训数字逻辑电路的构成-组合逻辑:输出只是输入逻辑电平的函数(有延时),与电路的原始状态无关。-时序逻辑:输出不只是输入的逻辑电平的函数,还与电路所处的状态有关。同步时序逻辑是在同一时钟跳变节拍的前提下,如输入条件满足,则进入下一状态,否则仍留在原来的状态的状态机。北京至芯FPGA培训数字逻辑电路的构成-组合逻辑:由与、或、非门组成的网络。常用的有:多路器、数据通路开关、加法器、乘法器等,没有记忆功能。-时序逻辑:由多个触发器和多个组合逻辑块组成的网络。常用的有:计数器、复杂的数据流动控制逻辑、运算控制逻辑、指令分析和操作控制逻辑。同步时序逻辑的设计是设计复杂的数字逻辑系统的核心。-存储器和寄存器:用于暂时存储数据信息。北京至芯FPGA培训组合逻辑举例之一一个八位数据通路控制器`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wire[7:0]out,in;assignout=(ControlSwith==`ON)?in:8‘h00in[7]ControlSwitchout[7]in[0]out[0]…...…...北京至芯FPGA培训一个八位数据通路控制器的波形:in[7:0]开关out[7:0]tt3102153262880215320000in[7]ControlSwitchout[7]in[0]out[0]…...…...北京至芯FPGA培训带寄存器的八位数据通路控制器的波形in[7]ControlSwitchout[7]CLOCKDQ[7]CLOCKin[0]ControlSwitchout[0]DQ[0]out[7]out[0]北京至芯FPGA培训带寄存器的八位数据通路控制器的Verilog描述`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wireclockwire[7:0]out,in;always@(posedgeclock)if(ControlSwith==`ON)out=in;elseout=out;北京至芯FPGA培训带复位端和使能端的寄存器moduleregena(clock,ena,reset,R,Q);parametern=8;input[n-1:0]R;inputclock,enareset;output[n-1:0]Q;always@(posedgeclockornegedgereset)if(!reset)Q=0;elseif(ena)Q=R;endmoduleenaRclockDQQreset北京至芯FPGA培训具有并行置数和使能控制输入的移位寄存器R1enawclockDQQresetQ1DQQ0R0load北京至芯FPGA培训具有并行置数和使能控制输入的移位寄存器moduleshiftregs(R,load,ena,w,clock,Q,reset);input[3:0]R;inputw,load,ena,reset,clock;output[3:0]Q;reg[3:0]Q;integerk;always@(posedgeclockornegedgereset)if(!reset)Q=0;elseif(load)Q=R;elseif(ena)beginQ[0]=W;for(k=1;k4;k+1)Q[k]=Q[k-1];endendmodule北京至芯FPGA培训组合逻辑举例之二:一个八位三态数据通路控制器`defineON1‘b1`defineOFF1‘b0wireLinkBusSwitch;wire[7:0]outbuf;inout[7:0]bus;assignbus=(LinkBusSwitch==`ON)?outbuf:8‘hzz…...…...outbuf[7]LinkBusSwitchbus[7]北京至芯FPGA培训八位三态数据通路控制器的波形:outbuf[7:0]开bus[7:0]tt310215326288021532ZZZZLinkBusSwitch关outbuf[7]LinkBusSwitchbus[7]北京至芯FPGA培训静态随机存储器(SRAM)Sel信号必须维持一定时间,直到经过两个反向器传递过来的Data信号可以自动保持;Data的驱动能力必须大于小反向器的驱动能力;用的三极管很少,可以把密度做得很高。SelData北京至芯FPGA培训静态随机存储器(SRAM)阵列Sel0Data[0]Sel1Data[1]北京至芯FPGA培训地址译码和SRAM块的读写DataoutputAddressAm-1A1A0Am-2writereadDatainputsel0sel1Sel2m-2Sel2m-1地址译码器北京至芯FPGA培训开关逻辑应用举例寄存器间数据流动的控制开关qdqdqdqdqdqdqdqdqdqdqdqdclock开关S1开关S2组合逻辑组合逻辑寄存器1寄存器2寄存器3北京至芯FPGA培训开关逻辑应用举例寄存器间数据流动的控制开关clock开关S5寄存器Cqd开关S6开关S3寄存器Bqd开关S4开关S1寄存器Aqd开关S2北京至芯FPGA培训开关逻辑的时延问题控制数据运算和流动的开关的开启和关闭时序.组合逻辑输出控制开关Snin[7:0]out[15:0]in[7:0]8‘d318‘d20216‘d9316‘d606延时10nsSn开关out[15:0]ttt北京至芯FPGA培训全局时钟网和平衡树结构全局时钟网络触发器缓冲器触发器1触发器n图1全局时钟网示意图图2平衡树结构示意图北京至芯FPGA培训避免冒险和竞争•由于组合逻辑和布线的延迟引起abttcclockabc北京至芯FPGA培训避免冒险和竞争与流水线•组合逻辑和布线的延迟在组合逻辑中的叠加ba#2#3#4cedba#2#3#4ced总延迟=Max{2,3}+4=7时钟周期必须7ns总延迟={Max{2,3}+4+1}=8时钟周期必须4ns总处理数据的吞吐量增加#1#1clock北京至芯FPGA培训为什么要设计有限状态机?如果能严格以时钟跳变沿为前提,按排好时时序,来操作逻辑系统中每一个开关Si,则系统中数据的流动和处理会按同一时钟节拍有序地进行,可以控制冒险和竞争现象对逻辑运算的破坏,时延问题就能有效地加以解决。利用同步有限状态机就能产生复杂的以时钟跳变沿为前提的同步时序逻辑,并提供操作逻辑系统的开关阵列所需要的复杂控制时序(具有信号互锁和先后次序等要求的)。北京至芯FPGA培训为什么要设计有限状态机?如果我们能设计这样一个电路:1)能记住自己目前所处的状态;2)状态的变化只可能在同一个时钟的跳变沿时刻发生,而不可能发生在任意时刻;3)在时钟跳变沿时刻,如输入条件满足,则进入下一状态,并记住自己目前所处的状态,否则仍保留原来的状态;4)在进入不同的状态时刻,对系统的开关阵列做开启或关闭的操作。北京至芯FPGA培训为什么要设计有限状态机?clock10nsS2开关S1tttSnS3tttS4北京至芯FPGA培训为什么要设计有限状态机?有了以上电路,我们就不难设计出复杂的控制序列来操纵数字系统的控制开关阵列。能达到以上要求的电路就是时序和组合电路互相结合的产物:同步有限状态机和由状态和时钟共同控制的开关逻辑阵列。我们只要掌握有限状态机的基本设计方法,加上对基本电路的掌握,再加上对数据处理的过程的细致了解,我们就可以避免由于逻辑器件和布线延迟产生的冒险竞争现象所造成的破坏,设计出符合要求的复杂数字逻辑系统。北京至芯FPGA培训数字系统的构成示意图同步有限状态机ena_2ena_3ena_nena_1clock组合逻辑1寄存器组组合逻辑2寄存器组组合逻辑3寄存器组组合逻辑N寄存器组input_1input_2input_n北京至芯FPGA培训同步有限状态机的设计什么是有限状态机(FSM)FSM的种类和不同点设计举例北京至芯FPGA培训什么是有限状态机?-有限状态机是由寄存器组和组合逻辑构成的硬件时序电路;-其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态;-究竟转向哪一状态不但取决于各个输入值,还取决于当前状态。-状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑,是数字逻辑的控制核心。北京至芯FPGA培训Mealy状态机下一个状态=F(当前状态,输入信号);输出信号=G(当前状态,输入信号);图1.时钟同步的状态机结构(Mealy状态机)下一状态的逻辑F输出逻辑G状态寄存器时钟信号clkclk输入输入输出当前状态激励信号北京至芯FPGA培训Moor状态机下一个状态=F(当前状态,输入信号)输出信号=G(当前状态);下一状态的逻辑F输出逻辑G状态寄存器时钟信号clkclk输入输入输出当前状态激励信号图2.时钟同步的状态机结构(Moor状态机)北京至芯FPGA培训带流水线输出的Mealy状态机下一个状态=F(当前状态,输入信号);输出信号=G(当前状态,输入信号);输出图3带流水线输出的Mealy状态机下一状态的逻辑F输出逻辑G状态寄存器时钟信号clkclk输入输入当前状态激励信号输出流水线寄存器clk输入北京至芯FPGA培训简单的状态机设计举例状态转移图表示RTL级可综合的Verilog模块表示北京至芯FPGA培训有限状态机的图形表示•图形表示:状态、转移、条件和逻辑开关图3.4状态转移图IdleStartStopClearA/K1=0!AA/K2=1!Reset/K2=0K1=0!Reset/K2=0K1=0(!Reset|!A)/K2=0K1=1!Reset/K2=0K1=0北京至芯FPGA培训有限状态机的Verilog描述1.定义模块名和输入输出端口;2.定义输入、输出变量或寄存器;3.定义时钟和复位信号;4.定义状态变量和状态寄存器;5.用时钟沿触发的always块表示状态转移过程;6.在复位信号有效时给状态寄存器赋初始值;7.描述状态的转换过程:符合条件,从一个状态到另外一个状态,否则留在原状态;8.验证状态转移的正确性,必须完整和全面。北京至芯FPGA培训表示方法之一modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;//定义时钟、复位和输入信号outputK2,K1;//定义输出控制信号的端口regK2,K1;//定义输出控制信号的寄存器reg[1:0]state;//定义状态寄存器parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;//定义状态变量参数值always@(posedgeClock)if(!Reset)begin//定义复位后的初始状态和输出值state=Idle;K2=0;K1=0;end北京至芯FPGA培训表示方法之一(续)elsecase(state)Idle:beginif(A)beginstate=Start;K1=0;endelsestate=Idle;endStart:beginif(!A)state=Stop;elsestate=Start;end北京至芯FPGA培训表示方法之一(续)Stop:begin//符合条件进入新状态,否则留在原状态if(A)beginstate=Clear;K2=1;endelsestate=Stop;endClear:beginif(!A)beginstate=Idle;K2=0;K1=1;endelsestate=Clear;endendcaseendmodule北京至芯FPGA培训表示方法之二我们还可以用另一个VerilogHDL模型来表示同一个有限状态,见下例。(用可综合的Verilog模块设计用独热码表示状态的状态机)mo