EDA課件第四章改_第1頁
EDA課件第四章改_第2頁
EDA課件第四章改_第3頁
EDA課件第四章改_第4頁
EDA課件第四章改_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第4章章 典型數字系統(tǒng)分析與設計典型數字系統(tǒng)分析與設計u數字系統(tǒng)概述數字系統(tǒng)概述u數碼管動態(tài)顯示掃描電路原理及設計u乘法器的原理及設計u除法器的原理及設計方法u簡易CPU工作原理及設計方法u交通信號燈控制器原理及設計u數字頻率計的原理及設計u數字信號發(fā)生器的原理及設計4.1 數字系統(tǒng)概述數字系統(tǒng)概述采用數字電子技術實現(xiàn)數字信息處理、傳輸、控制的數字邏輯單元集合稱為數字系統(tǒng)。數字系統(tǒng)一般包括數據處理器和控制器兩個部分數據處理器由寄存器和組合電路組成。寄存器用于暫存信息。組合電路實現(xiàn)對數據的加工和處理。在一個操作步驟,控制器發(fā)出命令信號給數據處理器,數據處理器完成命令信號所規(guī)定的操作。在下一個操

2、作步驟,控制器發(fā)出另外一組命令信號,命令數據處理器完成相應的操作。通過多步操作(操作序列),數字系統(tǒng)完成一個操作任務,控制器接收數據處理器的狀態(tài)信息及外部輸入來選擇下一個操作步驟??刂破鳑Q定數據處理器的操作和操作序列??刂破鳑Q定操作步驟,可以記憶當前步驟,也可以確定下一步驟,因此控制器中包含存儲器,用來記憶操作步驟,及時根據外部輸入和數據處理器的狀態(tài)信息來確定下一個操作步驟。控制器數據處理器外輸入控制信息狀態(tài)信息輸入數據輸出數據無論數據處理器還是控制器都是根據其功能特點來劃分的,歸根結底是由數字電路構成的。一個實際的數字系統(tǒng)可能簡單也可能復雜。如果一個數字系統(tǒng)沒有控制器,通常稱其為子系統(tǒng),一個

3、復雜數字系統(tǒng)可能由多個子系統(tǒng)構成。4.2 數碼管動態(tài)顯示掃描電路原理及設計4.2.1 數碼管動態(tài)顯示掃描電路原理數碼管顯示器具有顯示直觀,亮度好,顯示壽命長、控制電路簡單等優(yōu)點,因此,在數字系統(tǒng)中數碼管顯示器被廣泛應用。根據數碼管的結構,可分為共陽數碼管和共陰數碼管。為了驅動相應的數碼管需要選擇對應的七段譯碼器。就可以構成顯示電路,但是這種電路需要為每一個數碼管提供一個七段譯碼器,這種結構的電路稱之為靜態(tài)顯示電路。其優(yōu)點是顯示電路具有結構簡單,可以無限擴展的特點。缺點是隨著顯示位數增加,所需要的七段譯碼器太多,并且所有的數碼管都處于常亮的狀態(tài),顯示亮度不可控制,這樣既增加了顯示電路的成本,也增

4、加了顯示器的功耗,也降低了顯示器的使用壽命。用一個七段譯碼器實現(xiàn)多位數碼管顯示電路的電路,該結構的電路通常稱為動態(tài)顯示電路。優(yōu)點是節(jié)省了七段譯碼器的使用數量,這種顯示電路是根據分時顯示的原理設計的。在同一時間,僅有一位數碼管處于顯示狀態(tài),如果在人的視覺暫留時間內,每個數碼管都被點亮至少一次,就可以看到全部數碼管都同時點亮的效果。只要適當的調整掃描時鐘頻率,就可以實現(xiàn)這樣的功能。缺點是增加了位譯碼器、掃描計數器和數據選擇器。在數碼管的數量較多時,該電路要比靜態(tài)顯示電路節(jié)省許多硬件資源。設有n位數碼管,人的視覺暫留時間約為20ms,則掃描時鐘頻率fs為5 0()2 0snfnH zm s4.2.2

5、 采用采用Verilog HDL描述的動態(tài)顯示掃描電路描述的動態(tài)顯示掃描電路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(te

6、mp0), .b(temp1), .c(temp2), .sel(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 );re

7、g 2:0 qtemp;assign q=qtemp;always(posedge clk)qtemp=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

8、,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=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; a

9、ssign sel=seltemp;assign d_in=c,b,a; always(d_in)case(d_in)3b000:seltemp=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

10、( input 3:0 hex, output 6:0 segment );reg 6:0 segmenttemp; assign segment=segmenttemp; always(hex)case(hex)4b0001: segmenttemp=7b1111001;4b0010: segmenttemp=7b0100100;4b0011: segmenttemp=7b0110000;4b0100: segmenttemp=7b0011001;4b0101: segmenttemp=7b0010010;4b0110: segmenttemp=7b0000010;4b0111:segmen

11、ttemp=7b1111000;4b1000: segmenttemp=7b0000000;4b1001: segmenttemp=7b0010000;default:segmenttemp=7b1000000;endcaseendmodule七段顯示譯碼器元件4.3 乘法器的原理及設計4.3.1乘法器工作原理乘法器的一般計算過程1101被乘數被乘數1011乘數乘數1101位積位積1101位積位積0000位積位積1101位積位積10001111積積4.3.2 采用Verilog HDL描述的乘法器其中乘數b被送到串行輸出的移位寄存器,被乘數a與等寬的0被送到與積具有相同位寬的并行輸出移位寄存器

12、中。狀態(tài)控制用于控制數據輸出時間。根據上面乘法器結構圖,可以編寫如下的4x4 乘法器的Verilog HDL程序module multiplier(a, b, clk, load, 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=8b0

13、0000000; end else begin state=state+2b1; if(bt0=1b1) pp=pp+at; bt=1b0,bt3:1; at=at6:0,1b0; endend用并置方法對被乘數進行位擴展狀態(tài)計數清零部分積清零產生位積并累加乘數左移被乘數右移always(state)begin if(state=2b00) ptemp=pp;endendmodule目前,很多EDA綜合系統(tǒng)均支持乘法器的行為描述方式,即直接使用運算符“*”來完成。module multicom (a, b, p );input 3:0 a;input 3:0 b;output7:0 p;ass

14、ign 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 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位二進制數。采用的方法是依次從被除數的高位中減去除數,如果不夠減,除數右移,直到夠減為止。當余數小于除數時則完成除法運算。從除法運算過程可以看出,其主要是移位相減

15、的操作。這里用左移被除數代替右移除數的操作,并把商直接存儲到被除數的空余位中,省去了存儲商的寄存器。因此被除數寄存器擴展為9位移位寄存器。Sh是移位信號,在時鐘上升沿控制被除數寄存器左移一位;Su是把減法器的結果裝入被除數寄存器的X8 、X7 、X6 、X5 、X4和時鐘的上升沿置商的最低位為“1”的控制信號,St是除法運算啟動信號,Ov是除法器溢出標志信號。除法器控制電路狀態(tài)圖S0(停止)S1S2S5S4S3St/0St/loadC/OVC/ShC/SuC/ShC/SuC/ShC/SuC/ShC/SuC/0當啟動信號St=1時,啟動除法器工作,產生Load信號,裝載被除數寄存器和除數寄存器。

16、如果C=1,除法溢出,除法器停止工作,溢出標志OV輸出有效;如果C=0,將發(fā)生第一次移位操作,控制電路轉到狀態(tài)S2。然后,如果C=1,執(zhí)行減法操作,減法操作完成后,C將保持為“0”,保證在下一次時鐘有效時產生移位操作。這個過程將直到完成4次移位操作結束,控制狀態(tài)轉到S5。最后,如果C=1,執(zhí)行最后一次減法運算,否則,不做減法運算。這時沒有移位操作要求,控制電路回到停止狀態(tài)S0。在這里假設啟動信號St為高有效,并且僅持續(xù)一個時鐘周期,在完成全部操作前,啟動信號St將一直保持為低電平。4.4.2 用用Verilog HDL描述的除法器描述的除法器參考程序module divider(dividen

17、d_in, divisor, st, clk,quotient, remainder, overflow );input 7:0 dividend_in;input 3:0 divisor;input st;input clk;output 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;assig

18、n subout=dividend8:4-1b0,divisor; assign c=subout4;assign remainder=dividend7:4; assign quotient=dividend3:0; 減法器分離出余數分離出商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=1

19、b1; nextstate=3d0; end else begin sh=1b1; nextstate=3d2; end3d2,3d3,3d4:if(c=1b1) beginsu=1b1;nextstate=state; end else beginsh=1b1;nextstate=state+3d1; end3d5: beginif(c=1b1)su=1b1;nextstate=3d0; endendcaseend啟動除法運算溢出判斷狀態(tài)2、3、4:實現(xiàn)除法運算結束運算過程,返回初始態(tài)always(posedge clk)beginstate=nextstate;if(load=1b1)di

20、vidend=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和Ry中的內容L

21、oad操作是把數據總線輸入的數據Data傳輸到內部寄存器Rx,Move操作完成把寄存器Ry的內容傳輸到寄存器Rx的操作。Load操作和Move操作都是單周期指令,僅需一個時鐘周期(1個Clock)。加法和減法操作需要三個時鐘周期。第一個時鐘周期把寄存器Rx的內容傳輸到寄存器A,第二個時鐘周期把寄存器Ry的內容傳輸到內部總線Bus上,然后ALU執(zhí)行加法或減法操作,并把結果存儲到寄存器G。第三個時鐘周期把寄存器G的內容傳輸到寄存器Rx。狀態(tài)控制電路加法和減法所需的時鐘周期最長,因此,設計控制電路至少需要有四個狀態(tài)T0、T1、T2、T3,其中T0狀態(tài)表示沒有任何操作的狀態(tài),即初始狀態(tài)。T1對應各種操

22、作的第一步,T2、T3則分別對應加法和減法器的第二步和第三步。用4進制計數器實現(xiàn)4個狀態(tài)轉換控制,用2-4譯碼器對這4個狀態(tài)進行譯碼,產生相應的控制信號。功能編碼狀態(tài)譯碼器用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 采用采用Verilog HDL描

23、述的描述的ALU思路:首先需要設計4進制計數器作為狀態(tài)控制器單元,2-4譯碼器電路作為狀態(tài)譯碼單元,8位寄存器電路作為ALU內部寄存器單元,然后對這些基本單元進行元件例化,在ALU的主程序中引用。參考程序module upcount(clock, clear, q );input 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譯碼器電

24、路模塊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)3b100:ytemp=4b1000;3b101:ytemp=4b0100;3b110:ytemp=4b0010;3b111:ytemp=4b0001;default:ytemp=4b0000;endcaseendendmoduleALU內部8位寄存器模塊module regn#(parameter n=8) (

25、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;endendmoduleALU頂層模塊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

26、: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; reg 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=donetem

27、p;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);assign i=funcreg1:2;assign sel=rout,gout,extern;assign sum=addsub?(a+buswires):(a-buswires);upcount counter(.clear(clear), .c

28、lock(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 reg0( .r(buswirestemp), .rin(rin0), .clock(clock), .q(r0) );regn reg1( .r(buswirestemp), .rin(rin1

29、), .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( .r(sum), .rin(gin), .clock(clock),.q(g) );always(t or i or x or y)begi

30、nextern=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: case(i)2b10: begin rout=y; gin=1b1; end 2b11: begin

31、rout=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:buswirestemp=data;endcaseendmodule4.6 交通信

32、號燈控制器原理及設計4.6.1 交通信號燈控制器原理S0主路通行期S3支路過渡期S1主路過渡期S2支路通行期定時T1未到定時T1到定時T2未到定時T2到定時T3未到定時T3到定時Tm未到定時Tm到控制器原理框圖1. 狀態(tài)控制電路輸入信號輸入信號輸出信號輸出信號Q2nQ1nLSMQ2n+1Q1 n+10100111100010000100011101010用S0=00表示主路通行狀態(tài),用S1=01表示主路過渡狀態(tài)、用S2=11表示次干道通行狀態(tài),用S3=10表示次干道過渡狀態(tài)。JK觸發(fā)器的狀態(tài)轉換表 定時控制信號與控制狀態(tài)邏輯關系表輸入信號輸入信號輸出信號輸出信號Q2Q1ELESEM010011

33、00010010011010用EL、ES、EM表示定時器Tl、Ts、Tm的定時控制信號2. 定時電路在定時電路中,若輸入時鐘的頻率為1Hz信號,根據定時時間Tl、Ts、Tm的長短,設計相應的計數器既可以實現(xiàn)定時電路,并且每個計數器應該受到狀態(tài)定時控制電路所控制。3. 譯碼電路譯碼電路真值表控制器控制器的狀態(tài)的狀態(tài)主干道主干道次干道次干道Q2Q1紅燈R1黃燈Y1綠燈G1紅燈R2黃燈Y2綠燈G2000011000101010011100001101000104.6.2 交通信號燈的Verilog HDL描述參考程序假設定時器Tl、Ts、Tm的定時時間分別為45s、25s和5s,定時器輸入時鐘頻率為

34、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狀態(tài)控制器模塊module control_state(clk, l, s, m, el, es, em, q );i

35、nput 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; end else em_buffer=1

36、b0;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:0 qin

37、;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

38、; 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

39、 u3(clk(clk), .l(tl), .s(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實現(xiàn)各個底層模塊的例化4.7 數字頻率計的原理及設計4.7.1 數字頻率計的原理根據頻率的定義直接進行測量的。即在確定的閘門時間Tw內,記錄被測信號的脈沖數目Nx, 則被測信號的頻率fx為:xxwNfT測量方法有直接測頻法和等精度測頻法直接測頻法原理波形圖測量電路可以采用一個具有計數使能控制端的計

40、數器即可。用圖中的Tw信號作為計數器的計數使能控制,被測信號作為計數器的時鐘輸入端,假設計數器的計數使能信號為高電平有效,當Tw有效時計數器開始計數,當Tw無效時,計數器停止計數。如果Tw的寬度為1s,則此時計數器的計數值就是被測信號的頻率值。由于被測信號與閘門信號的相對獨立性,也就是說被測信號不能與閘門信號完全同步,所以這種測量中計數器的計數值存在1的絕對計數誤差。當在Tw時間內計數器的計數值較小時,頻率計測量的相對誤差較大。等精度測頻法原理等精度測量方法是在直接測頻方法的理論基礎上加以改進而得出的。在這種方法中,其閘門信號是隨著被測信號頻率的變化而改變的,不再是固定寬度,而且其恰好是被測信

41、號的整數倍,即與被測信號完全同步,可以消除了1個絕對計數誤差。波形圖在測量過程中,有兩個計數器分別對標準信號和被測信號同時計數。首先給出閘門開啟信號(預置閘門上升沿)此時計數器不開始計數,等到被測信號的上升沿到來時,計數器才開始計數。當預置閘門關閉信號(下降沿)到時,計數器并不立即停止計數,而是等到被測信號的上升沿到來時才結束計數,完成一次測量過程??梢钥闯觯瑢嶋H閘門時間Tr與預置閘門時間Tp并不嚴格相等,但差值不超過被測信號的一個周期。設在一次實際閘門時間Tr中計數器對被測信號的計數值為Nx,對標準信號的計數值為Ns。標準信號的頻率為fs。則被測信號的頻率為:xxssNffN由上式可知,若忽

42、略標準頻率的誤差,則等精度測頻方法可能產生的相對誤差為:100%xexxeffffxe為被測信號頻率的準確值在測量中,由于fs計數的起停時間都是由該信號的上升沿觸發(fā)的,在閘門時間Tr內對fx的計數Nx無誤差,對fs的計數Ns最多相差個數的誤差,即1sN 其測量頻率為:xxesssNffNN 因此可得:11sssrsNNNTf結論:測量頻率的相對誤差與被測信號頻率的大小無關,僅與閘門時間和標準信號頻率有關,即實現(xiàn)了整個測試頻段的等精度測量。閘門時間越長,標準頻率越高,Ns的計數值越大,測頻的相對誤差就越小。標準頻率可由穩(wěn)定度好、精度高的高頻晶體振蕩器產生,在保證測量精度不變的前提下,提高標準信號

43、頻率,可使閘門時間縮短,提高測量速度。一個D觸發(fā)器實現(xiàn)實際閘門信號與被測信號的上升沿同步,其輸出作為實際閘門信號分別控制被測信號計數器(計數器1)和標準信號計數器(計數器2)的計數使能端EN,當閘門信號結束時,兩個計數器停止計數,然后運算器對計數結果進行運算,獲得測量結果fs。預置閘門信號需要根據被測信號的頻率作相應的調整,以獲得滿意的測量精度。為此需要設計一個預置閘門信號發(fā)生器,用于產生不同寬度的預置閘門信號。三個計數器和三個D觸發(fā)器,依次對時基信號進行分頻,分頻后的信號經過數據選擇器由用戶根據需要選擇合適的預置閘門信號輸出。實際可以根據需要來選擇頻率的測量時間,以獲得更為精確的測量結果。4

44、.7.2 數字頻率計的數字頻率計的Verilog HDL描述描述頻率計由標準信號單元、預置閘門信號單元、測量單元和計算單元組成。為了便于說明設計過程,選取時基信號的頻率為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_bu

45、ffer;assign tp=tp_buffer;assign hign=1b1;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;endcas

46、eendmodule分頻器選通信號計數器模塊module counter(clk, en, qcc );input 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

47、(clk, sel, fs_out );input clk;input 1:0 sel;output fs_out;wire 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_b

48、uffer=fs1;2b01:fs_out_buffer=fs2;2b10:fs_out_buffer=fs3;default:fs_out_buffer=fs1;endcaseendmodule該電路由兩個十進制計數器和一個3選1的數據選擇器構成。其中十進制計數器把輸入的高頻標準信號fs兩次分頻,與相應的閘門信號對應。當fs=10MHz時,分別產生1MHz和100KHz信號。當閘門信號為0.01S、0.1S和1S時,分別與10MHz、1MHz和100KHz對應。實現(xiàn)等精度測量。測量模塊module measure(fs_in, fx_in, tp, clear, Ns, Nx );input

49、 fs_in;input fx_in;input tp;input clear;output 19:0 Ns;output 19:0 Nx; reg 19: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

50、,Ns。頻率計的頂層主程序module top(sel, fb_in, fs_in, fx_in, clear, Ns, Nx ); input 1:0 sel;input fb_in;input 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_i

51、n(fx_in), .fs_in(fstemp), .tp(tp),.clear(clear), .Ns(Ns), .Nx(Nx) );endmodule4.8 數字信號發(fā)生器的原理及設計4.8.1 數字信號發(fā)生器(DDS)的原理工作原理是以數控振蕩器的方式產生頻率、相位可控制的不同波形,用DDS實現(xiàn)的信號發(fā)生器電路主要包括時基電路、相位累加器、波形發(fā)生器、d/A轉換器和濾波器。每來一個時鐘脈沖Fclk,n位加法器將頻率控制數據X與累加寄存器輸出的累加相位數據相加,把相加后的結果Y送至累加寄存器的輸入端。累加寄存器一方面將在上一時鐘周期作用后所產生的新的相位數據反饋到加法器的輸入端,以使加法器

52、在下一時鐘的作用下繼續(xù)與頻率控制數據X相加;另一方面將這個值作為取樣地址值送入波形存儲器,波形存儲器根據這個地址輸出相應的波形數據。最后經D/A轉換器和濾波器將波形數據轉換成所需要頻率的模擬波形。相位累加器在基準時鐘的作用下,進行線性相位累加,當相位累加器加滿量程時就會產生一次溢出,這樣就完成了一個波形周期。存在問題是單個周期的數據抽樣越少,會在一定程度上降低輸出信號的平滑度。若要產生低頻信號時,單個周期的數據抽樣太多,會浪費波形存儲器的存儲空間。改進后的DDS控制器結構框圖仍然用相位累加器作為頻率控制電路,但是不輸出其累加結果,而是輸出其累加溢出信號,即相位累加器每溢出一次,就在Fout輸出

53、一個脈沖。其頻率為:2outclknXFF其中n為相位累加器的位寬,X為輸入頻率控制數據數值在波形發(fā)生器中,用Fout作為地址發(fā)生器的時鐘輸入脈沖。在每個周期的數據抽樣點M數目固定的條件下,可以得到的輸出信號頻率為:2outwaveclknFXFFMM其中M為單周期的數據抽樣點數目4.8.2 數字信號發(fā)生器(數字信號發(fā)生器(DDS)的)的Verilog HDL 描述描述頂層文件結構圖相位累加器(寬度為16位)在時基脈沖clk的控制下對頻率控制數據x(15:0)進行累加,累加器每溢出一次,在clk_out輸出一個脈沖,其頻率為:_162clkoutclkXff其中X為頻率控制數據x(15:0)所

54、對應的數值波形數據存儲單元中分別存儲了正弦波、方波和三角波的數據。這些波形數據用以計數頻率為fclk_out的地址發(fā)生器讀出,然后根據波形選擇控制信號sel(1:0)的狀態(tài)選擇一種波形數據輸出。由波形數據存儲單元輸出的波形數據直接輸出到D/A轉換器中,經過D/A轉換和濾波器就可以獲得所需要的波形。參考程序相位累加器模塊module fre_control (clk, load, x, clk_out );input clk;input load;input 15:0 x;output clk_out;reg clk_out_buffer;reg 16:0 reg0;reg 16:0 regt;

55、assign clk_out=clk_out_buffer;always(posedge clk or posedge load)beginif (load=1b1) regt=1b0,x;else begin reg0=reg0+regt; if(reg016=1b1) begin clk_out_buffer=1b1; reg0=16b0;endelseclk_out_buffer=1b0;endendendmodule正弦波發(fā)生器模塊module gen_sin(clk, d );input clk;output 7:0 d;reg 7:0 d_buffer;reg 5:0 temp;a

56、ssign d=d_buffer;always(posedge clk)begin if(temp=6d63) temp=6d0; else temp=temp+6d1; case(temp) 6d0:d_buffer=8d255; 6d1:d_buffer=8d254; 6d2:d_buffer=8d252; 6d3:d_buffer=8d249; 6d4:d_buffer=8d245; 6d5:d_buffer=8d239; 6d6:d_buffer=8d2336d7:d_buffer=8d225;6d8:d_buffer=8d217;6d9:d_buffer=8d207;6d10:d_b

57、uffer=8d197;6d11:d_buffer=8d186;6d12:d_buffer=8d174;6d13:d_buffer=8d162;6d14:d_buffer=8d150;6d15:d_buffer=8d137;6d16:d_buffer=8d124;6d17:d_buffer=8d112;6d18:d_buffer=8d99;6d19:d_buffer=8d87;6d20:d_buffer=8d75;6d21:d_buffer=8d64;6d22:d_buffer=8d53;6d23:d_buffer=8d43;6d24:d_buffer=8d34;6d25:d_buffer=8d26;6d26:d_buffer=8d19;6d27:d_buffer=8d13;6d28:d_buffer=8d8;6d29:d_buffer=8d4;6d30:d_buffer=8d1;6d31:d_buffer=8d0;6d32:d_buffer=8d0;6d33:d_buffer=8d1;6d34:d_buffer=8d4;6d35:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論