东北大学EDA数字系统设计课件第四章改.ppt
《东北大学EDA数字系统设计课件第四章改.ppt》由会员分享,可在线阅读,更多相关《东北大学EDA数字系统设计课件第四章改.ppt(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 典型数字系统分析与设计典型数字系统分析与设计u数字系统概述数字系统概述u数码管动态显示扫描电路原理及设计u乘法器的原理及设计u除法器的原理及设计方法u简易CPU工作原理及设计方法u交通信号灯控制器原理及设计u数字频率计的原理及设计u数字信号发生器的原理及设计4.1 数字系统概述数字系统概述采用数字电子技术实现数字信息处理、传输、控制的数字逻辑单元集合称为数字系统。数字系统一般包括数据处理器和控制器两个部分数据处理器由寄存器和组合电路组成。寄存器用于暂存信息。组合电路实现对数据的加工和处理。在一个操作步骤,控制器发出命令信号给数据处理器,数据处理器完成命令信号所规定的操作。在下一个操
2、作步骤,控制器发出另外一组命令信号,命令数据处理器完成相应的操作。通过多步操作(操作序列),数字系统完成一个操作任务,控制器接收数据处理器的状态信息及外部输入来选择下一个操作步骤。控制器决定数据处理器的操作和操作序列。控制器决定操作步骤,可以记忆当前步骤,也可以确定下一步骤,因此控制器中包含存储器,用来记忆操作步骤,及时根据外部输入和数据处理器的状态信息来确定下一个操作步骤。控制器数据处理器外输入控制信息状态信息输入数据输出数据无论数据处理器还是控制器都是根据其功能特点来划分的,归根结底是由数字电路构成的。一个实际的数字系统可能简单也可能复杂。如果一个数字系统没有控制器,通常称其为子系统,一个
3、复杂数字系统可能由多个子系统构成。4.2数码管动态显示扫描电路原理及设计4.2.1 数码管动态显示扫描电路原理数码管显示器具有显示直观,亮度好,显示寿命长、控制电路简单等优点,因此,在数字系统中数码管显示器被广泛应用。根据数码管的结构,可分为共阳数码管和共阴数码管。为了驱动相应的数码管需要选择对应的七段译码器。就可以构成显示电路,但是这种电路需要为每一个数码管提供一个七段译码器,这种结构的电路称之为静态显示电路。其优点是显示电路具有结构简单,可以无限扩展的特点。缺点是随着显示位数增加,所需要的七段译码器太多,并且所有的数码管都处于常亮的状态,显示亮度不可控制,这样既增加了显示电路的成本,也增加
4、了显示器的功耗,也降低了显示器的使用寿命。用一个七段译码器实现多位数码管显示电路的电路,该结构的电路通常称为动态显示电路。优点是节省了七段译码器的使用数量,这种显示电路是根据分时显示的原理设计的。在同一时间,仅有一位数码管处于显示状态,如果在人的视觉暂留时间内,每个数码管都被点亮至少一次,就可以看到全部数码管都同时点亮的效果。只要适当的调整扫描时钟频率,就可以实现这样的功能。缺点是增加了位译码器、扫描计数器和数据选择器。在数码管的数量较多时,该电路要比静态显示电路节省许多硬件资源。设有n位数码管,人的视觉暂留时间约为20ms,则扫描时钟频率fs为4.2.2 采用采用Verilog HDL描述的
5、动态显示扫描电路描述的动态显示扫描电路moduletop(clk,x0,x1,x2,x3,x4,x5,x6,x7,segment,y);inputclk;/扫描时钟input3:0 x0,x1,x2,x3,x4,x5,x6,x7;/显示数据output6:0segment;/数码管的段码output7:0y;/数码管的位码wire2:0temp;wire3:0muxout;counteru0(.clk(clk),.q(temp);/扫描计数器decoder138u1(.a(temp0),.b(temp1),.c(temp2),.sel(y);/位码译码器mux32_4u2(.x0(x0),.x
6、1(x1),.x2(x2),.x3(x3),.x4(x4),.x5(x5),.x6(x6),.x7(x7),.sel(temp),.mux_out(muxout);/输入数据选择器t7_segu3(.hex(muxout),.segment(segment);/显示段译码器endmodule顶层模块逻辑图扫描计数器位码译码器输入数据选择器显示段译码器modulecounter(inputclk,inout2:0q);reg2:0qtemp;assignq=qtemp;always(posedgeclk)qtemp=qtemp+3d1;endmodule三位二进制计数器元件modulemux32
7、_4(input3:0 x0,input3:0 x1,input3:0 x2,input3:0 x3,input3:0 x4,input3:0 x5,input3:0 x6,input3:0 x7,input2:0sel,output3:0mux_out);reg3:0muxout;assignmux_out=muxout;always(sel,x0,x1,x2,x3,x4,x5,x6,x7)case(sel)3b000:muxout=x0;3b001:muxout=x1;3b010:muxout=x2;3b011:muxout=x3;3b100:muxout=x4;3b101:muxout=
8、x5;3b110:muxout=x6;3b111:muxout=x7;default:muxout=4d0;endcaseendmodule32选4的数据选择器元件moduledecoder138(inputa,inputb,inputc,output7:0sel);reg7:0seltemp;wire2:0d_in;assignsel=seltemp;assignd_in=c,b,a;always(d_in)case(d_in)3b000:seltemp=8b00000010;3b010:seltemp=8b00000100;3b011:seltemp=8b00001000;3b100:se
9、ltemp=8b00010000;3b101:seltemp=8b00100000;3b110:seltemp=8b01000000;3b111:seltemp=8b10000000;default:seltemp=8b00000000;endcaseendmodule3线-8线译码器元件modulet7_seg(input3:0hex,output6:0segment);reg6:0segmenttemp;assignsegment=segmenttemp;always(hex)case(hex)4b0001:segmenttemp=7b1111001;4b0010:segmenttemp=
10、7b0100100;4b0011:segmenttemp=7b0110000;4b0100:segmenttemp=7b0011001;4b0101:segmenttemp=7b0010010;4b0110:segmenttemp=7b0000010;4b0111:segmenttemp=7b1111000;4b1000:segmenttemp=7b0000000;4b1001:segmenttemp=7b0010000;default:segmenttemp=7b1000000;endcaseendmodule七段显示译码器元件4.3乘法器的原理及设计乘法器工作原理乘法器的一般计算过程110
11、1被乘数被乘数1011乘数乘数1101位积位积1101位积位积0000位积位积1101位积位积10001111积积4.3.2采用VerilogHDL描述的乘法器其中乘数b被送到串行输出的移位寄存器,被乘数a与等宽的0被送到与积具有相同位宽的并行输出移位寄存器中。状态控制用于控制数据输出时间。根据上面乘法器结构图,可以编写如下的4x4乘法器的VerilogHDL程序modulemultiplier(a,b,clk,load,p);input3:0a,b;inputclk;inputload;output7:0p;reg7:0at,pp;reg3:0bt;reg1:0state;reg7:0pte
12、mp;assignp=ptemp;时序乘法器always(posedgeclk)beginif(load=1b1)beginat=4b0000,a;bt=b;state=2b00;pp=8b00000000;endelsebeginstate=state+2b1;if(bt0=1b1)pp=pp+at;bt=1b0,bt3:1;at=at6:0,1b0;endend用并置方法对被乘数进行位扩展状态计数清零部分积清零产生位积并累加乘数左移被乘数右移always(state)beginif(state=2b00)ptemp=pp;endendmodule目前,很多EDA综合系统均支持乘法器的行为描
13、述方式,即直接使用运算符“*”来完成。modulemulticom(a,b,p);input3:0a;input3:0b;output7:0p;assignp=a*b;endmodule组合乘法器的描述方式4.4除法器的原理及设计方法4.4.1除法器的工作原理1 0 1 0商除数11 0 11 0 0 0 0 1 1 1被除数1 1 0 10 1 1 10 0 0 01 1 1 11 1 0 113513=10 余 50 1 0 10 0 0 00 1 0 1余数从前面的乘法器介绍可知4x4位乘法器的积是一个8位二进制数,因此,4位除法器应该是一个8位二进制数除以一个4位二进制数。采用的方法是
14、依次从被除数的高位中减去除数,如果不够减,除数右移,直到够减为止。当余数小于除数时则完成除法运算。从除法运算过程可以看出,其主要是移位相减的操作。这里用左移被除数代替右移除数的操作,并把商直接存储到被除数的空余位中,省去了存储商的寄存器。因此被除数寄存器扩展为9位移位寄存器。Sh是移位信号,在时钟上升沿控制被除数寄存器左移一位;Su是把减法器的结果装入被除数寄存器的X8、X7、X6、X5、X4和时钟的上升沿置商的最低位为“1”的控制信号,St是除法运算启动信号,Ov是除法器溢出标志信号。除法器控制电路状态图S0(停止)S1S2S5S4S3St/0St/loadC/OVC/ShC/SuC/ShC
15、/SuC/ShC/SuC/ShC/SuC/0当启动信号St=1时,启动除法器工作,产生Load信号,装载被除数寄存器和除数寄存器。如果C=1,除法溢出,除法器停止工作,溢出标志OV输出有效;如果C=0,将发生第一次移位操作,控制电路转到状态S2。然后,如果C=1,执行减法操作,减法操作完成后,C将保持为“0”,保证在下一次时钟有效时产生移位操作。这个过程将直到完成4次移位操作结束,控制状态转到S5。最后,如果C=1,执行最后一次减法运算,否则,不做减法运算。这时没有移位操作要求,控制电路回到停止状态S0。在这里假设启动信号St为高有效,并且仅持续一个时钟周期,在完成全部操作前,启动信号St将一
16、直保持为低电平。4.4.2 用用Verilog HDL描述的除法器描述的除法器参考程序moduledivider(dividend_in,divisor,st,clk,quotient,remainder,overflow);input7:0dividend_in;input3:0divisor;inputst;inputclk;output3:0quotient;output3:0remainder;outputoverflow;reg2:0state,nextstate;regload,su,sh;wirec;wire4:0subout;reg8:0dividend;regoverflow
17、temp;assignoverflow=overflowtemp;assignsubout=dividend8:4-1b0,divisor;assignc=subout4;assignremainder=dividend7:4;assignquotient=dividend3:0;减法器分离出余数分离出商always(state,st,c)beginload=1b0;overflowtemp=1b0;sh=1b0;su=1b0;case(state)3d0:if(st=1b1)beginload=1b1;nextstate=3d1;endelsenextstate=3d0;3d1:if(c=1
18、b1)beginoverflowtemp=1b1;nextstate=3d0;endelsebeginsh=1b1;nextstate=3d2;end3d2,3d3,3d4:if(c=1b1)beginsu=1b1;nextstate=state;endelsebeginsh=1b1;nextstate=state+3d1;end3d5:beginif(c=1b1)su=1b1;nextstate=3d0;endendcaseend启动除法运算溢出判断状态2、3、4:实现除法运算结束运算过程,返回初始态always(posedgeclk)beginstate=nextstate;if(load
19、=1b1)dividend=1b0,dividend_in;if(su=1b1)begindividend8:4=subout;dividend0=1b1;endif(sh=1b1)dividend=dividend7:0,1b0;endendmodule4.5简易CPU工作原理及设计方法4.5.1简易CPU的工作原理4个n位寄存器R0、R1、R2、R3ALU算术逻辑单元控制单元基本操作操作操作功能功能Load Rx,dataRxdataMove Rx,RyRxRyAdd Rx,RyRxRx+RySub Rx,RyRyRx-RyRx和Ry代表R0-R3的任意寄存器,Rx和Ry代表寄存器Rx和R
20、y中的内容Load操作是把数据总线输入的数据Data传输到内部寄存器Rx,Move操作完成把寄存器Ry的内容传输到寄存器Rx的操作。Load操作和Move操作都是单周期指令,仅需一个时钟周期(1个Clock)。加法和减法操作需要三个时钟周期。第一个时钟周期把寄存器Rx的内容传输到寄存器A,第二个时钟周期把寄存器Ry的内容传输到内部总线Bus上,然后ALU执行加法或减法操作,并把结果存储到寄存器G。第三个时钟周期把寄存器G的内容传输到寄存器Rx。状态控制电路加法和减法所需的时钟周期最长,因此,设计控制电路至少需要有四个状态T0、T1、T2、T3,其中T0状态表示没有任何操作的状态,即初始状态。T
21、1对应各种操作的第一步,T2、T3则分别对应加法和减法器的第二步和第三步。用4进制计数器实现4个状态转换控制,用2-4译码器对这4个状态进行译码,产生相应的控制信号。功能编码状态译码器用6位二进制编码表示的不同操作。这些编码就是功能码,也被称为指令编码,最左边两位二进制数代码F(f1,f0)可以组成4组不同的代码,分别表示4种不同的操作。设f1f0=00,01,10,11分别表示Load,Move,Add,Sub四种操作。Rx1Rx0表示操作数Rx的编码,而Ry1Ry0表示操作数Ry的编码。当功能码输入信号FRin有效时,6位功能码被存储到一个6位功能寄存器中。4.5.2 采用采用Verilo
22、g HDL描述的描述的ALU思路:首先需要设计4进制计数器作为状态控制器单元,2-4译码器电路作为状态译码单元,8位寄存器电路作为ALU内部寄存器单元,然后对这些基本单元进行元件例化,在ALU的主程序中引用。参考程序moduleupcount(clock,clear,q);inputclock;inputclear;inout1:0q;reg1:0qtemp;assignq=qtemp;always(posedgeclock)beginif(clear=1b1)qtemp=2b00;elseqtemp=qtemp+2b01;endendmodule4进制计数器模块2-4译码器电路模块modul
23、edec2to4(w,en,y);input1:0w;inputen;output0:3y;reg3:0ytemp;reg2:0enw;assigny=ytemp;always(enorw)beginenw=en,w;case(enw)3b100:ytemp=4b1000;3b101:ytemp=4b0100;3b110:ytemp=4b0010;3b111:ytemp=4b0001;default:ytemp=4b0000;endcaseendendmoduleALU内部8位寄存器模块moduleregn#(parametern=8)(r,rin,clock,q);inputn-1:0r;i
24、nputrin;inputclock;inoutn-1:0qregn-1:0qtemp;assignq=qtemp;always(posedgeclock)beginif(rin=1b1)qtemp=r;endendmoduleALU顶层模块moduleproc#(parametern=8)(data,reset,w,clock,f,rx,ry,done,buswires);input7:0data;inputreset;inputw;inputclock;input1:0f;input1:0rx;input1:0ry;inoutdone;inout7:0buswires;wire1:0zer
25、o,t,i;wirehigh,clear,frin;wire1:6func,funcreg,sel;wire7:0sum;reg0:3x,y,rin,rout;regaddsub;regextern,ain,gin,gout;reg1:0count;reg7:0r0,r1,r2,r3;reg7:0a,g;regbuswirestemp;regdonetemp;外部端口内部信号assigndone=donetemp;assignbuswire=buswirestemp;assignzero=2b00;assignhigh=1b1;assignclear=reset|done|(w&(t1)&(t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 EDA 数字 系统 设计 课件 第四
限制150内