EDA数字系统设计课件第四章改.ppt

上传人(卖家):晟晟文业 文档编号:4145159 上传时间:2022-11-14 格式:PPT 页数:75 大小:390.45KB
下载 相关 举报
EDA数字系统设计课件第四章改.ppt_第1页
第1页 / 共75页
EDA数字系统设计课件第四章改.ppt_第2页
第2页 / 共75页
EDA数字系统设计课件第四章改.ppt_第3页
第3页 / 共75页
EDA数字系统设计课件第四章改.ppt_第4页
第4页 / 共75页
EDA数字系统设计课件第四章改.ppt_第5页
第5页 / 共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为5 0()2 0snfnH zm s4.2.2

5、 采用采用Verilog HDL描述的动态显示扫描电路描述的动态显示扫描电路module top(clk,x0,x1,x2,x3,x4,x5,x6,x7,segment,y);input clk;/扫描时钟input 3:0 x0,x1,x2,x3,x4,x5,x6,x7;/显示数据output 6:0 segment;/数码管的段码output 7:0 y;/数码管的位码wire 2:0 temp;wire 3:0 muxout;counter u0(.clk(clk),.q(temp);/扫描计数器decoder138 u1(.a(temp0),.b(temp1),.c(temp2),.s

6、el(y);/位码译码器mux32_4 u2(.x0(x0),.x1(x1),.x2(x2),.x3(x3),.x4(x4),.x5(x5),.x6(x6),.x7(x7),.sel(temp),.mux_out(muxout);/输入数据选择器t7_seg u3(.hex(muxout),.segment(segment);/显示段译码器endmodule顶层模块逻辑图扫描计数器位码译码器输入数据选择器显示段译码器module counter(input clk,inout 2:0 q);reg 2:0 qtemp;assign q=qtemp;always(posedge clk)qtem

7、p=qtemp+3d1;endmodule三位二进制计数器元件module mux32_4(input 3:0 x0,input 3:0 x1,input 3:0 x2,input 3:0 x3,input 3:0 x4,input 3:0 x5,input 3:0 x6,input 3:0 x7,input 2:0 sel,output 3:0 mux_out);reg 3:0 muxout;assign mux_out=muxout;always(sel,x0,x1,x2,x3,x4,x5,x6,x7)case(sel)3b000:muxout=x0;3b001:muxout=x1;3b0

8、10:muxout=x2;3b011:muxout=x3;3b100:muxout=x4;3b101:muxout=x5;3b110:muxout=x6;3b111:muxout=x7;default:muxout=4d0;endcaseendmodule 32选4的数据选择器元件module decoder138(input a,input b,input c,output 7:0 sel);reg 7:0 seltemp;wire 2:0 d_in;assign sel=seltemp;assign d_in=c,b,a;always(d_in)case(d_in)3b000:seltem

9、p=8b00000010;3b010:seltemp=8b00000100;3b011:seltemp=8b00001000;3b100:seltemp=8b00010000;3b101:seltemp=8b00100000;3b110:seltemp=8b01000000;3b111:seltemp=8b10000000;default:seltemp=8b00000000;endcaseendmodule3线-8线译码器元件module t7_seg(input 3:0 hex,output 6:0 segment);reg 6:0 segmenttemp;assign segment=s

10、egmenttemp;always(hex)case(hex)4b0001:segmenttemp=7b1111001;4b0010:segmenttemp=7b0100100;4b0011:segmenttemp=7b0110000;4b0100:segmenttemp=7b0011001;4b0101:segmenttemp=7b0010010;4b0110:segmenttemp=7b0000010;4b0111:segmenttemp=7b1111000;4b1000:segmenttemp=7b0000000;4b1001:segmenttemp=7b0010000;default:

11、segmenttemp=7b1000000;endcaseendmodule七段显示译码器元件4.3 乘法器的原理及设计4.3.1乘法器工作原理乘法器的一般计算过程1101被乘数被乘数1011乘数乘数1101位积位积1101位积位积0000位积位积1101位积位积10001111积积4.3.2 采用Verilog HDL描述的乘法器其中乘数b被送到串行输出的移位寄存器,被乘数a与等宽的0被送到与积具有相同位宽的并行输出移位寄存器中。状态控制用于控制数据输出时间。根据上面乘法器结构图,可以编写如下的4x4 乘法器的Verilog HDL程序module multiplier(a,b,clk,lo

12、ad,p );input 3:0 a,b;input clk;input load;output 7:0 p;reg 7:0 at,pp;reg 3:0 bt;reg 1:0 state;reg 7:0 ptemp;assign p=ptemp;时序乘法器always(posedge clk)begin if(load=1b1)begin at=4b0000,a;bt=b;state=2b00;pp=8b00000000;end else begin state=state+2b1;if(bt0=1b1)pp=pp+at;bt=1b0,bt3:1;at=at6:0,1b0;endend用并置方

13、法对被乘数进行位扩展状态计数清零部分积清零产生位积并累加乘数左移被乘数右移always(state)begin if(state=2b00)ptemp=pp;endendmodule目前,很多EDA综合系统均支持乘法器的行为描述方式,即直接使用运算符“*”来完成。module multicom(a,b,p);input 3:0 a;input 3:0 b;output7:0 p;assign p=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 1

14、0 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位二进制数。采用的方法是依次从被除数的高位中减去除数,如果不够减,除数右移,直到够减为止。当余数小于除数时则完成除法运算。从除法运算过程可以看出,其主要是移位相减的操作。这里用左移被除数代替右移除数的操作,并把商直接存储到被除数的空余位中,省去了存储商的寄存器。因此被除数寄存器扩展为9位移位寄存器。Sh是移位信号,在时钟上升沿控制被除数寄存器左移一位;Su是把减法器的结果装入被

15、除数寄存器的X8、X7、X6、X5、X4和时钟的上升沿置商的最低位为“1”的控制信号,St是除法运算启动信号,Ov是除法器溢出标志信号。除法器控制电路状态图S0(停止)S1S2S5S4S3St/0St/loadC/OVC/ShC/SuC/ShC/SuC/ShC/SuC/ShC/SuC/0当启动信号St=1时,启动除法器工作,产生Load信号,装载被除数寄存器和除数寄存器。如果C=1,除法溢出,除法器停止工作,溢出标志OV输出有效;如果C=0,将发生第一次移位操作,控制电路转到状态S2。然后,如果C=1,执行减法操作,减法操作完成后,C将保持为“0”,保证在下一次时钟有效时产生移位操作。这个过程

16、将直到完成4次移位操作结束,控制状态转到S5。最后,如果C=1,执行最后一次减法运算,否则,不做减法运算。这时没有移位操作要求,控制电路回到停止状态S0。在这里假设启动信号St为高有效,并且仅持续一个时钟周期,在完成全部操作前,启动信号St将一直保持为低电平。4.4.2 用用Verilog HDL描述的除法器描述的除法器参考程序module divider(dividend_in,divisor,st,clk,quotient,remainder,overflow);input 7:0 dividend_in;input 3:0 divisor;input st;input clk;outpu

17、t 3:0 quotient;output 3:0 remainder;output overflow;reg 2:0 state,nextstate;reg load,su,sh;wire c;wire 4:0 subout;reg 8:0dividend;reg overflowtemp;assign overflow=overflowtemp;assign subout=dividend8:4-1b0,divisor;assign c=subout4;assign remainder=dividend7:4;assign quotient=dividend3:0;减法器分离出余数分离出商

18、always(state,st,c)beginload=1b0;overflowtemp=1b0;sh=1b0;su=1b0;case(state)3d0:if(st=1b1)begin load=1b1;nextstate=3d1;end else nextstate=3d0;3d1:if(c=1b1)begin overflowtemp=1b1;nextstate=3d0;end else begin sh=1b1;nextstate=3d2;end3d2,3d3,3d4:if(c=1b1)beginsu=1b1;nextstate=state;end else beginsh=1b1;n

19、extstate=state+3d1;end3d5:beginif(c=1b1)su=1b1;nextstate=3d0;endendcaseend启动除法运算溢出判断状态2、3、4:实现除法运算结束运算过程,返回初始态always(posedge clk)beginstate=nextstate;if(load=1b1)dividend=1b0,dividend_in;if(su=1b1)begindividend8:4=subout;dividend0=1b1;endif(sh=1b1)dividend=dividend7:0,1b0;endendmodule4.5简易CPU工作原理及设计

20、方法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和Ry中的内容Load操作是把数据总线输入的数据Data传输到内部寄存器Rx,Move操作完成把寄存器Ry的内容传输到寄存器Rx的操作。Load操作和Move操作都是单周期指令,仅需一个时钟周期(1个Clock)。加法和减法操作需要三个时钟周期。第一个时钟周期把寄存器Rx的内容传输到寄存

21、器A,第二个时钟周期把寄存器Ry的内容传输到内部总线Bus上,然后ALU执行加法或减法操作,并把结果存储到寄存器G。第三个时钟周期把寄存器G的内容传输到寄存器Rx。状态控制电路加法和减法所需的时钟周期最长,因此,设计控制电路至少需要有四个状态T0、T1、T2、T3,其中T0状态表示没有任何操作的状态,即初始状态。T1对应各种操作的第一步,T2、T3则分别对应加法和减法器的第二步和第三步。用4进制计数器实现4个状态转换控制,用2-4译码器对这4个状态进行译码,产生相应的控制信号。功能编码状态译码器用6位二进制编码表示的不同操作。这些编码就是功能码,也被称为指令编码,最左边两位二进制数代码F(f1

22、,f0)可以组成4组不同的代码,分别表示4种不同的操作。设f1f0=00,01,10,11分别表示Load,Move,Add,Sub四种操作。Rx1Rx0表示操作数Rx的编码,而Ry1Ry0表示操作数Ry的编码。当功能码输入信号FRin有效时,6位功能码被存储到一个6位功能寄存器中。4.5.2 采用采用Verilog HDL描述的描述的ALU思路:首先需要设计4进制计数器作为状态控制器单元,2-4译码器电路作为状态译码单元,8位寄存器电路作为ALU内部寄存器单元,然后对这些基本单元进行元件例化,在ALU的主程序中引用。参考程序module upcount(clock,clear,q);inpu

23、t clock;input clear;inout 1:0 q;reg 1:0 qtemp;assign q=qtemp;always(posedge clock)beginif(clear=1b1)qtemp=2b00;elseqtemp=qtemp+2b01;endendmodule4进制计数器模块 2-4译码器电路模块module dec2to4(w,en,y);input 1:0 w;input en;output 0:3 y;reg 3:0 ytemp;reg 2:0 enw;assign y=ytemp;always(en or w)beginenw=en,w;case(enw)3

24、b100:ytemp=4b1000;3b101:ytemp=4b0100;3b110:ytemp=4b0010;3b111:ytemp=4b0001;default:ytemp=4b0000;endcaseendendmoduleALU内部8位寄存器模块module regn#(parameter n=8)(r,rin,clock,q);input n-1:0 r;input rin;input clock;inout n-1:0 q reg n-1:0 qtemp;assign q=qtemp;always(posedge clock)beginif(rin=1b1)qtemp=r;ende

25、ndmoduleALU顶层模块module proc#(parameter n=8)(data,reset,w,clock,f,rx,ry,done,buswires);input 7:0 data;input reset;input w;input clock;input 1:0 f;input 1:0 rx;input 1:0 ry;inout done;inout 7:0 buswires;wire 1:0 zero,t,i;wire high,clear,frin;wire 1:6 func,funcreg,sel;wire 7:0 sum;reg 0:3 x,y,rin,rout;r

26、eg addsub;reg extern,ain,gin,gout;reg 1:0 count;reg 7:0 r0,r1,r2,r3;reg 7:0 a,g;reg buswirestemp;reg donetemp;外部端口内部信号assign done=donetemp;assign buswire=buswirestemp;assign zero=2b00;assign high=1b1;assign clear=reset|done|(w&(t1)&(t0);assign t=count;assign func=f,rx,ry;assign frin=w&(t1)&(t0);assi

27、gn i=funcreg1:2;assign sel=rout,gout,extern;assign sum=addsub?(a+buswires):(a-buswires);upcount counter(.clear(clear),.clock(clock),.q(count);regn#(6)functionreg(.r(func),.rin(frin),.clock(clock),.q(funcreg);dec2to4 decx(.w(funcreg3:4),.en(high),.y(x);dec2to4 decy(.w(funcreg5:6),.en(high),.y(y);regn

28、 reg0(.r(buswirestemp),.rin(rin0),.clock(clock),.q(r0);regn reg1(.r(buswirestemp),.rin(rin1),.clock(clock),.q(r1);regn reg2(.r(buswirestemp),.rin(rin2),.clock(clock),.q(r2);regn reg3(.r(buswirestemp),.rin(rin3),.clock(clock),.q(r3);regn rega(.r(buswirestemp),.rin(ain),.clock(clock),.q(a);regn regg(.

29、r(sum),.rin(gin),.clock(clock),.q(g);always(t or i or x or y)beginextern=1b0;donetemp=1b0;ain=1b0;gin=1b0;gout=1b0;addsub=1b0;rin=4b0000;rout=4b0000;case(t)2b01:case(i)2b00:begin extern=1b1;rin=x;donetemp=1b1;end 2b01:begin rout=y;rin=x;donetemp=1b1;end default:begin rout=x;ain=1b1;end endcase 2b10:

30、case(i)2b10:begin rout=y;gin=1b1;end 2b11:beginrout=y;addsub=1b1;gin=1b1;enddefault:;endcasedefault:begin gout=1b1;rin=x;donetemp=1b1;endendcaseendalways(sel)case(sel)6b100000:buswirestemp=r0;6b010000:buswirestemp=r1;6b001000:buswirestemp=r2;6b000100:buswirestemp=r3;6b000100:buswirestemp=g;default:b

31、uswirestemp=data;endcaseendmodule4.6 交通信号灯控制器原理及设计4.6.1 交通信号灯控制器原理S0主路通行期S3支路过渡期S1主路过渡期S2支路通行期定时T1未到定时T1到定时T2未到定时T2到定时T3未到定时T3到定时Tm未到定时Tm到控制器原理框图1.状态控制电路输入信号输入信号输出信号输出信号Q2nQ1nLSMQ2n+1Q1 n+10100111100010000100011101010用S0=00表示主路通行状态,用S1=01表示主路过渡状态、用S2=11表示次干道通行状态,用S3=10表示次干道过渡状态。JK触发器的状态转换表 定时控制信号与控制

32、状态逻辑关系表输入信号输入信号输出信号输出信号Q2Q1ELESEM01001100010010011010用EL、ES、EM表示定时器Tl、Ts、Tm的定时控制信号2.定时电路在定时电路中,若输入时钟的频率为1Hz信号,根据定时时间Tl、Ts、Tm的长短,设计相应的计数器既可以实现定时电路,并且每个计数器应该受到状态定时控制电路所控制。3.译码电路译码电路真值表控制器控制器的状态的状态主干道主干道次干道次干道Q2Q1红灯R1黄灯Y1绿灯G1红灯R2黄灯Y2绿灯G2000011000101010011100001101000104.6.2 交通信号灯的Verilog HDL描述参考程序假设定时器

33、Tl、Ts、Tm的定时时间分别为45s、25s和5s,定时器输入时钟频率为1Hz。此处只给出45s定时器的参考程序。45s定时器模块module coun45(clk,el,l);input clk;input el;output l;reg l_buffer;reg 5:0 q;assign l=l_buffer;always(posedge clk)beginif(el=1b1)if(q=6d44)beginq=6d0;l_buffer=1b1;endelsebeginq=q+6d1;l_buffer=1b0;endendendmodule状态控制器模块module control_sta

34、te(clk,l,s,m,el,es,em,q);input clk;input l;input s;input m;output el;output es;output em;output 1:0 q;reg 1:0 state;reg el_buffer,es_buffer,em_buffer;assign q=state;assign el=el_buffer;assign es=es_buffer;assign em=em_buffer;always(posedge clk)case(state)2b00:if(l=1b1)begin state=2b01;em_buffer=1b1;

35、end else em_buffer=1b0;2b01:if(m=1b1)beginstate=2b11;es_buffer=1b1;end else es_buffer=1b0;2b11:if(s=1b1)begin state=2b10;em_buffer=1b1;end elseem_buffer=1b0;2b10:if(m=1b1)begin state=2b00;el_buffer=1b1;end else el_buffer=1b0;default:;endcaseendmodule输出译码器模块module decoder(qin,m_r_g_y,s_r_g_y);input 1

36、:0 qin;output 2:0 m_r_g_y;output 2:0 s_r_g_y;reg 2:0 mrgy,srgy;assign m_r_g_y=mrgy;assign s_r_g_y=srgy;主路输出驱动信号,依次为红灯、绿灯、黄灯支路输出驱动信号,依次为红灯、绿灯、黄灯always(qin)case(qin)2b00:beginmrgy=3b010;srgy=3b100;end2b01:beginmrgy=3b001;srgy=3b100;end2b10:beginmrgy=3b100;srgy=3b001;end2b11:beginmrgy=3b100;srgy=3b010;

37、enddefault:;endcaseendmodule交通信号灯控制器顶层模块module top(clk,m_r_g_y,s_r_g_y);input clk;output 2:0 m_r_g_y;output 2:0 s_r_g_y;reg tel,tes,tem,tl,ts,tm;reg1:0 state;coun45 u0(.clk(clk),.el(tel),.l(tl);coun25 u1(.clk(clk).es(tes),.s(ts);coun5 u2(.clk(clk),.em(tem),.m(tm);control_state u3(clk(clk),.l(tl),.s(

38、ts),.m(tm),.el(tel),.es(tes),.em(tem),.q(state);decoder u4(.qin(state),.m_r_g_y(m_r_g_y),.s_r_g_y(s_r_g_y);endmodule实现各个底层模块的例化4.7 数字频率计的原理及设计4.7.1 数字频率计的原理根据频率的定义直接进行测量的。即在确定的闸门时间Tw内,记录被测信号的脉冲数目Nx,则被测信号的频率fx为:xxwNfT测量方法有直接测频法和等精度测频法直接测频法原理波形图测量电路可以采用一个具有计数使能控制端的计数器即可。用图中的Tw信号作为计数器的计数使能控制,被测信号作为计数器的

39、时钟输入端,假设计数器的计数使能信号为高电平有效,当Tw有效时计数器开始计数,当Tw无效时,计数器停止计数。如果Tw的宽度为1s,则此时计数器的计数值就是被测信号的频率值。由于被测信号与闸门信号的相对独立性,也就是说被测信号不能与闸门信号完全同步,所以这种测量中计数器的计数值存在1的绝对计数误差。当在Tw时间内计数器的计数值较小时,频率计测量的相对误差较大。等精度测频法原理等精度测量方法是在直接测频方法的理论基础上加以改进而得出的。在这种方法中,其闸门信号是随着被测信号频率的变化而改变的,不再是固定宽度,而且其恰好是被测信号的整数倍,即与被测信号完全同步,可以消除了1个绝对计数误差。波形图在测

40、量过程中,有两个计数器分别对标准信号和被测信号同时计数。首先给出闸门开启信号(预置闸门上升沿)此时计数器不开始计数,等到被测信号的上升沿到来时,计数器才开始计数。当预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来时才结束计数,完成一次测量过程。可以看出,实际闸门时间Tr与预置闸门时间Tp并不严格相等,但差值不超过被测信号的一个周期。设在一次实际闸门时间Tr中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。标准信号的频率为fs。则被测信号的频率为:xxssNffN由上式可知,若忽略标准频率的误差,则等精度测频方法可能产生的相对误差为:100%xexx

41、effffxe为被测信号频率的准确值在测量中,由于fs计数的起停时间都是由该信号的上升沿触发的,在闸门时间Tr内对fx的计数Nx无误差,对fs的计数Ns最多相差个数的误差,即1sN 其测量频率为:xxesssNffNN 因此可得:11sssrsNNNTf结论:测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。闸门时间越长,标准频率越高,Ns的计数值越大,测频的相对误差就越小。标准频率可由稳定度好、精度高的高频晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,提高测量速度。一个D触发器实现实际闸门信号与被测

42、信号的上升沿同步,其输出作为实际闸门信号分别控制被测信号计数器(计数器1)和标准信号计数器(计数器2)的计数使能端EN,当闸门信号结束时,两个计数器停止计数,然后运算器对计数结果进行运算,获得测量结果fs。预置闸门信号需要根据被测信号的频率作相应的调整,以获得满意的测量精度。为此需要设计一个预置闸门信号发生器,用于产生不同宽度的预置闸门信号。三个计数器和三个D触发器,依次对时基信号进行分频,分频后的信号经过数据选择器由用户根据需要选择合适的预置闸门信号输出。实际可以根据需要来选择频率的测量时间,以获得更为精确的测量结果。4.7.2 数字频率计的数字频率计的Verilog HDL描述描述频率计由

43、标准信号单元、预置闸门信号单元、测量单元和计算单元组成。为了便于说明设计过程,选取时基信号的频率为2KHz,标准信号的频率为10MHz。测量预置闸门时间分别选定为0.01S、0.1S和1S。与测量时间的长短相对应的标准信号频率依次为10MHz、1MHz 和100KHz。这样测量的相对误差为:5110psT f参考程序预置闸门时间控制模块module tp_generator(clk,sel,tp);input clk;input 1:0 sel;output tp;reg tp1,tp2,tp3,high,tp_buffer;assign tp=tp_buffer;assign hign=1b

44、1;counter c1(.clk(clk),.en(hign),.qcc(tp1);counter c2(.clk(clk),.en(tp1),.qcc(tp2);counter c3(.clk(clk),.en(tp2),.qcc(tp3);always(sel or tp1 or tp2 or tp3)case(sel)2b00:tp_buffer=tp1;2b01:tp_buffer=tp2;2b10:tp_buffer=tp3;default:tp_buffer=tp1;endcaseendmodule分频器选通信号计数器模块module counter(clk,en,qcc);in

45、put clk;input en;output qcc;reg qcctemp,qt;reg 3:0 q;assign qcc=qt;always(posedge clk)beginif(en=1b1)if(q=4d9)begin q=4d0;qcctemp=1b1;end else begin q=q+4d1;qcctemp=1b0;endendalways(posedge qcctemp)qt=qt;endmodule标准信号产生模块module fs_generator(clk,sel,fs_out);input clk;input 1:0 sel;output fs_out;wire

46、fs1;reg fs_out_buffer,fs2,fs3,high;assign fs1=clk;assign fs_out=fs_out_buffer;assign hign=1b1;counter c1(.clk(clk),.en(high),.qcc(fs2);counter c2(.clk(clk),.en(fs2),.qcc(fs3);always(sel or fs1 or fs2 or fs3)case(sel)2b00:fs_out_buffer=fs1;2b01:fs_out_buffer=fs2;2b10:fs_out_buffer=fs3;default:fs_out_

47、buffer=fs1;endcaseendmodule该电路由两个十进制计数器和一个3选1的数据选择器构成。其中十进制计数器把输入的高频标准信号fs两次分频,与相应的闸门信号对应。当fs=10MHz时,分别产生1MHz和100KHz信号。当闸门信号为0.01S、0.1S和1S时,分别与10MHz、1MHz和100KHz对应。实现等精度测量。测量模块module measure(fs_in,fx_in,tp,clear,Ns,Nx);input fs_in;input fx_in;input tp;input clear;output 19:0 Ns;output 19:0 Nx;reg 19:

48、0 Nstemp,Nxtemp;assign Ns=Nstemp;assign Nx=Nstemp;m_counter c1(.clk(clk),.en(tp),.clr(clear),.q(Nstemp);m_counter c2(.clk(clk),.en(tp),.clr(clear),.q(Nxtemp);endmodule该模块主要完成闸门信号与被测信号同步和实际闸门信号内被测信号和标准信号的计数功能。计数输出Nx,Ns。频率计的顶层主程序module top(sel,fb_in,fs_in,fx_in,clear,Ns,Nx);input 1:0 sel;input fb_in;i

49、nput fs_in;input fx_in;input clear;output 19:0 Ns;output 19:0 Nx;reg tp,fstemp;tp_generator u0(.clk(fb_in),.tp(tp),.sel(sel);fs_generator u1(.clk(fs_in),.fs_out(fstemp),.sel(sel);measure u2(.fx_in(fx_in),.fs_in(fstemp),.tp(tp),.clear(clear),.Ns(Ns),.Nx(Nx);endmodule4.8 数字信号发生器的原理及设计4.8.1 数字信号发生器(DDS

50、)的原理工作原理是以数控振荡器的方式产生频率、相位可控制的不同波形,用DDS实现的信号发生器电路主要包括时基电路、相位累加器、波形发生器、d/A转换器和滤波器。每来一个时钟脉冲Fclk,n位加法器将频率控制数据X与累加寄存器输出的累加相位数据相加,把相加后的结果Y送至累加寄存器的输入端。累加寄存器一方面将在上一时钟周期作用后所产生的新的相位数据反馈到加法器的输入端,以使加法器在下一时钟的作用下继续与频率控制数据X相加;另一方面将这个值作为取样地址值送入波形存储器,波形存储器根据这个地址输出相应的波形数据。最后经D/A转换器和滤波器将波形数据转换成所需要频率的模拟波形。相位累加器在基准时钟的作用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(EDA数字系统设计课件第四章改.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|