第9章verilog_HDL_程序設(shè)計_第1頁
第9章verilog_HDL_程序設(shè)計_第2頁
第9章verilog_HDL_程序設(shè)計_第3頁
第9章verilog_HDL_程序設(shè)計_第4頁
第9章verilog_HDL_程序設(shè)計_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第9章章 Verilog設(shè)計進階設(shè)計進階9.1 加法器設(shè)計加法器設(shè)計(1)級連加法器)級連加法器module add_jl(sum,cout,a,b,cin);input7:0 a,b;input cin;output7:0 sum;output cout;full_add1 f0(a0,b0,cin,sum0,cin1); full_add1 f1(a1,b1,cin1,sum1,cin2);full_add1 f2(a2,b2,cin2,sum2,cin3);full_add1 f3(a3,b3,cin3,sum3,cin4);full_add1 f4(a4,b4,cin4,sum4,c

2、in5);full_add1 f5(a5,b5,cin5,sum5,cin6);full_add1 f6(a6,b6,cin6,sum6,cin7);full_add1 f7(a7,b7,cin7,sum7,cout);endmodule8位級連加法器代碼位級連加法器代碼(2)數(shù)據(jù)流描述的加法器)數(shù)據(jù)流描述的加法器 module add_bx(cout,sum,a,b,cin);parameter WIDTH=8; input cin; output cout;inputWIDTH-1:0 a,b; outputWIDTH-1:0 sum; assign cout,sum=a+b+cin;en

3、dmodule全部由邏輯門實現(xiàn)全部由邏輯門實現(xiàn)(3) 8位超前進位加法器位超前進位加法器 module add_ahead(sum,cout,a,b,cin);input7:0 a,b;input cin;output7:0 sum;output cout;wire7:0 G,P;wire7:0 C,sum;assign G0=a0&b0; assign P0=a0|b0;assign C0=cin;assign sum0=G0P0C0;assign G1=a1&b1; assign P1=a1|b1;assign C1=G0|(P0&cin);assign sum1=

4、G1P1C1;assign G2=a2&b2; assign P2=a2|b2;assign C2=G1|(P1&C1);assign sum2=G2P2C2;assign G3=a3&b3;assign P3=a3|b3;assign C3=G2|(P2&C2);assign sum3=G3P3C3;assign G4=a4&b4;assign P4=a4|b4;assign C4=G3|(P3&C3);assign sum4=G2P2C2;assign G5=a5&b5; assign P5=a5|b5;assign C5=G4|(P

5、4&C4);assign sum5=G5P5C5;assign G6=a6&b6;assign P6=a6|b6;assign C6=G5|(P5&C5);assign sum6=G6P6C6;assign G7=a7&b7; assign P7=a7|b7;assign C7=G6|(P6&C6);assign sum7=G7P7C7;assign cout=G7|(P7&C7); endmodule(4)流水線加法器)流水線加法器 module adder8(cout,sum,a,b,cin,enable);input7:0 a,b; inp

6、ut cin,enable;output7:0 sum; reg7:0 sum;output cout;reg cout;reg3:0 tempa,tempb,firsts; reg firstc;always (posedge enable)beginfirstc,firsts=a3:0+b3:0+cin;tempa=a7:4; tempb=b7:4;endalways (posedge enable)begincout,sum7:4=tempa+tempb+firstc;sum3:0=firsts;endendmodule9.2 乘法器乘法器module mult(outcome,a,b)

7、;parameter size=8;inputsize:1 a,b;output2*size:1 outcome;assign outcome=a*b;endmodule(1)并行乘法器)并行乘法器利用利用Verilog語言的乘法操作符,可很容語言的乘法操作符,可很容易地實現(xiàn)并行乘法器,并可由易地實現(xiàn)并行乘法器,并可由EDA綜合軟綜合軟件自動轉(zhuǎn)化為電路網(wǎng)表結(jié)構(gòu)件自動轉(zhuǎn)化為電路網(wǎng)表結(jié)構(gòu)o 88并行乘法器的門級綜合原理圖并行乘法器的門級綜合原理圖 (2)移位相加乘法器)移位相加乘法器o 移位相加乘法器將乘法移位相加乘法器將乘法變?yōu)榧臃▽崿F(xiàn),其設(shè)計變?yōu)榧臃▽崿F(xiàn),其設(shè)計思路是:乘法通過逐次思路是:乘法

8、通過逐次移位相加實現(xiàn),每次判移位相加實現(xiàn),每次判斷乘數(shù)的最低位,若為斷乘數(shù)的最低位,若為1則將被乘數(shù)移位相加。則將被乘數(shù)移位相加。44移位相加乘法操作示意圖移位相加乘法操作示意圖8 8位移位相加乘法器頂層設(shè)計位移位相加乘法器頂層設(shè)計 8位移位相加乘法器時序仿真波形位移位相加乘法器時序仿真波形(3)加法樹乘法器)加法樹乘法器 【例9.7】 8位加法樹乘法器module add_tree(out,a,b,clk);input7:0 a,b; input clk; output wire15:0 out;wire14:0 out1,c1; wire12:0 out2; wire10:0 out3,c

9、2;wire8:0 out4; reg14:0 temp0; reg13:0 temp1;reg12:0 temp2; reg11:0 temp3; reg10:0 temp4;reg9:0 temp5; reg8:0 temp6; reg7:0 temp7;function7:0 mult8x1;/該函數(shù)實現(xiàn)81乘法input7:0 operand; input sel;begin mult8x1=(sel)?(operand):8b00000000; endendfunctionalways (posedge clk)/調(diào)用函數(shù)實現(xiàn)操作數(shù)b各位與操作數(shù)a的相乘begintemp7=mult

10、8x1(a,b0);temp6=(mult8x1(a,b1)1);temp5=(mult8x1(a,b2)2);temp4=(mult8x1(a,b3)3);temp3=(mult8x1(a,b4)4);temp2=(mult8x1(a,b5)5);temp1=(mult8x1(a,b6)6);temp0=(mult8x1(a,b7)7);endassign out1=temp0+temp1;/加法樹運算assign out2=temp2+temp3;assign out3=temp4+temp5;assign out4=temp6+temp7;assign c1=out1+out2;assi

11、gn c2=out3+out4;assign out=c1+c2;endmodule(4)查找表乘法器)查找表乘法器o 查找表乘法器將乘積直接存放在存儲器中,將操作數(shù)查找表乘法器將乘積直接存放在存儲器中,將操作數(shù)(乘數(shù)和被乘數(shù))作為地址訪問存儲器,得到的輸出(乘數(shù)和被乘數(shù))作為地址訪問存儲器,得到的輸出數(shù)據(jù)就是乘法運算的結(jié)果。數(shù)據(jù)就是乘法運算的結(jié)果。o 查找表方式的乘法器速度只局限于所使用存儲器的存查找表方式的乘法器速度只局限于所使用存儲器的存取速度。但由于查找表規(guī)模隨操作數(shù)位數(shù)增加而迅速取速度。但由于查找表規(guī)模隨操作數(shù)位數(shù)增加而迅速增大,因此如用于實現(xiàn)位數(shù)寬的乘法操作,需要增大,因此如用于實

12、現(xiàn)位數(shù)寬的乘法操作,需要FPGA器件具有較大的片內(nèi)存儲器模塊。比如,要實器件具有較大的片內(nèi)存儲器模塊。比如,要實現(xiàn)現(xiàn)88乘法,要求存儲器的地址位寬為乘法,要求存儲器的地址位寬為16位,字長位,字長為為16位,即存儲器大小為位,即存儲器大小為1M比特。比特。o 乘累加器的結(jié)構(gòu)框圖 9.3 乘累加器(乘累加器(MAC)乘累加器(乘累加器(MAC)module MAC(out,opa,opb,clk,clr);output15:0 out;input7:0 opa,opb;input clk,clr; wire15:0 sum; reg15:0 out;function15:0 mult; /函數(shù)定

13、義,函數(shù)定義,mult函數(shù)完成乘法操作函數(shù)完成乘法操作input7:0 opa,opb; reg 15:0 result; integer i;beginresult=opa0? opb : 0;for(i=1; i=7; i=i+1)begin if(opai=1) result=result+(opb(i-1);endmult=result;endendfunction assign sum=mult(opa,opb)+out;always (posedge clk or posedge clr)begin if(clr) out=0; else out=sum; end endmodul

14、eo 在實際中我們經(jīng)常會遇到這樣的問題,需要在實際中我們經(jīng)常會遇到這樣的問題,需要進行奇數(shù)次分頻,同時又要得到占空比是進行奇數(shù)次分頻,同時又要得到占空比是50%的方波波形。的方波波形。o 可采用如下方法:用兩個計數(shù)器,一個由輸可采用如下方法:用兩個計數(shù)器,一個由輸入時鐘上升沿觸發(fā),一個由輸入時鐘下降沿入時鐘上升沿觸發(fā),一個由輸入時鐘下降沿觸發(fā),最后將兩個計數(shù)器的輸出相或,即可觸發(fā),最后將兩個計數(shù)器的輸出相或,即可得到占空比為得到占空比為50%的方波波形。的方波波形。 9.4 奇數(shù)分頻與小數(shù)分頻奇數(shù)分頻與小數(shù)分頻 (1)奇數(shù)分頻)奇數(shù)分頻【例【例9.10】 占空比占空比50%的奇數(shù)分頻(模的奇數(shù)

15、分頻(模7)module count7(reset,clk,cout);input clk,reset; output wire cout;reg2:0 m,n; reg cout1,cout2;assign cout=cout1|cout2;/兩個計數(shù)器的輸出相或兩個計數(shù)器的輸出相或always (posedge clk)beginif(!reset) begin cout1=0; m=0; endelse begin if(m=6) m=0; else m=m+1;if(m3) cout1=1;else cout1=0; endendalways (negedge clk)beginif(

16、!reset) begin cout2=0; n=0; endelse begin if(n=6) n=0; else n=n+1;if(n3) cout2=1; else cout2=0; endendendmoduleo 模模7奇數(shù)分頻器功能仿真波形圖(奇數(shù)分頻器功能仿真波形圖(Quartus ) 【例【例9.11】 占空比占空比50%的奇數(shù)分頻的奇數(shù)分頻module count_num(reset,clk,cout);parameter NUM=13;input clk,reset; output wire cout;reg4:0 m,n; reg cout1,cout2;assign

17、cout=cout1|cout2;always (posedge clk)begin if(!reset) begin cout1=0; m=0; endelsebegin if(m=NUM-1) m=0; else m=m+1;if(m(NUM-1)/2) cout1=1; else cout1=0;endendalways (negedge clk)begin if(!reset) begin cout2=0; n=0; endelse beginif(n=NUM-1) n=0; else n=n+1; if(n(NUM-1)/2) cout2=1; else cout2=0; enden

18、dendmoduleo 模13奇數(shù)分頻器功能仿真波形圖(Quartus ) 【例【例9.12】 5.5半整數(shù)分頻源代碼半整數(shù)分頻源代碼module fdiv5_5(clkin,clr,clkout);input clkin,clr; output reg clkout;reg clk1; wire clk2; integer count;xor xor1(clk2,clkin,clk1); /異或門異或門always(posedge clkout or negedge clr) /2分頻器分頻器begin if(clr) begin clk1=1b0; end else clk1=clk1;e

19、ndalways(posedge clk2 or negedge clr) /模模5分頻器分頻器begin if(clr)begin count=0; clkout=1b0; endelse if(count=5) /要改變分頻器的模,只需改變要改變分頻器的模,只需改變count的值的值begincount=0; clkout=1b1; endelse begin count=count+1; clkout=1b0; endendendmodule功能仿真波形功能仿真波形5.5倍半整數(shù)分頻器功能仿真波形圖(倍半整數(shù)分頻器功能仿真波形圖(Quartus )小數(shù)分頻小數(shù)分頻 o 可用下面的方法大致

20、實現(xiàn)小數(shù)分頻,即先可用下面的方法大致實現(xiàn)小數(shù)分頻,即先設(shè)計兩個不同分頻比的整數(shù)分頻器,然后設(shè)計兩個不同分頻比的整數(shù)分頻器,然后通過控制兩種分頻比出現(xiàn)的不同次數(shù)來獲通過控制兩種分頻比出現(xiàn)的不同次數(shù)來獲得所需要的小數(shù)分頻值,從而實現(xiàn)平均意得所需要的小數(shù)分頻值,從而實現(xiàn)平均意義上的小數(shù)分頻。義上的小數(shù)分頻。 【例【例9.13】 9.1小數(shù)分頻源代碼小數(shù)分頻源代碼module fdiv8_1(clk_in,rst,clk_out);input clk_in,rst; output reg clk_out;reg3:0 cnt1,cnt2;/cnt1計分頻的次數(shù)計分頻的次數(shù)always(posedge

21、clk_in or posedge rst)begin if(rst) begin cnt1=0; cnt2=0; clk_out=0; end else if(cnt19)/9次次8分頻分頻 begin if(cnt27) begin cnt2=cnt2+1; clk_out=0; end else begin cnt2=0; cnt1=cnt1+1; clk_out=1; end end else begin /1次次9分頻分頻 if(cnt28) begin cnt2=cnt2+1; clk_out=0; end else begin cnt2=0; cnt1=0; clk_out=1;

22、 end endendendmoduleo 9.1小數(shù)分頻功能仿真波形(小數(shù)分頻功能仿真波形(Quartus ) 9.5 數(shù)字跑表數(shù)字跑表 o 設(shè)計一個數(shù)字跑表,設(shè)計一個數(shù)字跑表,該跑表具有復(fù)位、暫該跑表具有復(fù)位、暫停、秒表計時等功能。停、秒表計時等功能。n 跑表設(shè)三個輸入端,分別為時鐘輸入(跑表設(shè)三個輸入端,分別為時鐘輸入(CLK)、復(fù))、復(fù)位(位(CLR)和啟動)和啟動/暫停(暫停(PAUSE)按鍵。復(fù)位信號)按鍵。復(fù)位信號高電平有效,可對跑表異步清零;當啟動高電平有效,可對跑表異步清零;當啟動/暫停鍵為暫停鍵為低電平時跑表開始計時,為高電平時暫停,變低后在低電平時跑表開始計時,為高電平時

23、暫停,變低后在原來的數(shù)值基礎(chǔ)上繼續(xù)計數(shù)。原來的數(shù)值基礎(chǔ)上繼續(xù)計數(shù)。 9.6 實用多功能數(shù)字鐘實用多功能數(shù)字鐘 o 用用Verilog語言設(shè)計一個多功能數(shù)字鐘,數(shù)字鐘具有語言設(shè)計一個多功能數(shù)字鐘,數(shù)字鐘具有下述功能下述功能(1)計時功能:包括時、分、秒的計時。)計時功能:包括時、分、秒的計時。(2)定時與鬧鐘功能:能在設(shè)定的時間發(fā)出鬧鈴音。)定時與鬧鐘功能:能在設(shè)定的時間發(fā)出鬧鈴音。(3)校時功能:對小時、分鐘和秒能手動調(diào)整以校準)校時功能:對小時、分鐘和秒能手動調(diào)整以校準時間。時間。(4)整點報時功能:每逢整點,產(chǎn)生)整點報時功能:每逢整點,產(chǎn)生“嘀嘀嘀嘀嘀嘀嘀嘀嘟嘟”,四短一長的報時音。,四

24、短一長的報時音。 9.7 字符液晶顯示控制字符液晶顯示控制 o 基于基于DE2-70平臺用平臺用FPGA控制字符液晶實控制字符液晶實現(xiàn)字符的顯示。字符液晶由液晶顯示器和?,F(xiàn)字符的顯示。字符液晶由液晶顯示器和專用的行、列驅(qū)動器、控制器及必要的連接件用的行、列驅(qū)動器、控制器及必要的連接件裝配而成,可顯示數(shù)字和英文字符。字符液裝配而成,可顯示數(shù)字和英文字符。字符液晶本身具有字符發(fā)生器,顯示容量大,功能晶本身具有字符發(fā)生器,顯示容量大,功能豐富,一般最少可顯示豐富,一般最少可顯示1行行8個或個或l行行16個字個字符,每個字符由符,每個字符由57、58或或511的一的一組像素點陣排列構(gòu)成,字符間有一定的

25、間隔,組像素點陣排列構(gòu)成,字符間有一定的間隔,行與行間也有一定的間隔。行與行間也有一定的間隔。 用狀態(tài)機實現(xiàn)字符顯示控制 o H1602B液晶模塊的讀液晶模塊的讀/寫操作、屏幕和光標的操寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的,為了方便控制,采作都是通過指令編程來實現(xiàn)的,為了方便控制,采用狀態(tài)機實現(xiàn)設(shè)計。在設(shè)計中設(shè)置用狀態(tài)機實現(xiàn)設(shè)計。在設(shè)計中設(shè)置8個狀態(tài),分別個狀態(tài),分別是起始狀態(tài)是起始狀態(tài)CLEAR,設(shè)置,設(shè)置CGRAM狀態(tài)狀態(tài)SETCGRAM,工作方式設(shè)置狀態(tài),工作方式設(shè)置狀態(tài)SETFUNCTION,顯示方式設(shè)置狀態(tài),顯示方式設(shè)置狀態(tài)SWITCHMODE,輸入方式設(shè)置狀態(tài),輸入方式

26、設(shè)置狀態(tài)SETMODE,光標歸位狀態(tài),光標歸位狀態(tài)RETURNCURSOR,字符移位狀態(tài)字符移位狀態(tài)SHIFT,寫,寫RAM狀態(tài)狀態(tài)WRITERAM,狀態(tài)編碼采用,狀態(tài)編碼采用One-Hot方式。方式。 9.8 VGA圖像顯示控制器設(shè)計圖像顯示控制器設(shè)計 VGA顯示器采用光柵掃描方式,即轟擊熒光屏的電子束顯示器采用光柵掃描方式,即轟擊熒光屏的電子束在在CRT顯示器上從左到右、從上到下做有規(guī)律的移動,其顯示器上從左到右、從上到下做有規(guī)律的移動,其水平移動受水平同步信號水平移動受水平同步信號HSYNC控制,垂直移動受垂直同控制,垂直移動受垂直同步信號步信號VSYNC控制。掃描方式一般分為逐行掃描和

27、隔行掃控制。掃描方式一般分為逐行掃描和隔行掃描,這里采用逐行掃描。完成一行掃描的時間稱為水平掃描,這里采用逐行掃描。完成一行掃描的時間稱為水平掃描時間,其倒數(shù)稱為行頻率,完成一幀(整屏)掃描的時描時間,其倒數(shù)稱為行頻率,完成一幀(整屏)掃描的時間稱為垂直掃描時間,其倒數(shù)稱為場頻,又稱刷新率。間稱為垂直掃描時間,其倒數(shù)稱為場頻,又稱刷新率。VGA工業(yè)標準要求的時鐘頻率如下:工業(yè)標準要求的時鐘頻率如下:時鐘頻率(時鐘頻率(Clock frequency)25.175MHz(像素輸出(像素輸出的頻率)的頻率)行頻(行頻(Line frequency)31469Hz場頻(場頻(Field freque

28、ncy)59.94HzVGA行掃描時序行掃描時序VGA場掃描時序場掃描時序VGA時序時序行掃描時序要求(單位:像素,即輸出一個像素行掃描時序要求(單位:像素,即輸出一個像素Pixel的時間間隔)的時間間隔)場掃描時序要求(單位:行,即輸出一行場掃描時序要求(單位:行,即輸出一行Line的時間間隔)的時間間隔)場同步頭場同步頭場圖像場圖像場周期場周期對應(yīng)位置對應(yīng)位置V_TfV_TaV_TbV_TcV_TdV_TeV_Tg時間(時間(Lines)222584808525行同步頭行同步頭行圖像行圖像行周期行周期對應(yīng)位置對應(yīng)位置H_TfH_TaH_TbH_TcH_TdH_TeH_Tg時間(時間(Pix

29、els)8964086408800VGA圖像顯示控制器設(shè)計圖像顯示控制器設(shè)計VGA圖像顯示控制器結(jié)構(gòu)框圖圖像顯示控制器結(jié)構(gòu)框圖 本例顯示的圖像選擇標準圖像本例顯示的圖像選擇標準圖像LENA,如圖,如圖9.32所示,所示,圖像的尺寸為圖像的尺寸為128128點,格式為點,格式為.bmp文件,文件,R,G,B三基色信號分別用三基色信號分別用5 bit,6 bit,5 bit來表示的來表示的LENA圖像的顯示效果,與用圖像的顯示效果,與用真彩顯示的圖像效果比較真彩顯示的圖像效果比較,直觀感受沒有很大的區(qū)別。圖像數(shù)據(jù)由自己編寫直觀感受沒有很大的區(qū)別。圖像數(shù)據(jù)由自己編寫Matlab程序得到,具體如例程序

30、得到,具體如例9.17所示,該程序從所示,該程序從lena.bmp圖圖像中得到像中得到R,G,B三基色數(shù)據(jù)并將數(shù)據(jù)寫入三基色數(shù)據(jù)并將數(shù)據(jù)寫入ROM存儲存儲器的器的*.mif文件中(本例中為文件中(本例中為lena16.mif)。 R,G,B三基色信號分別采用三基色信號分別采用5 bit,6 bit,5 bit表示的表示的LENA圖像圖像 9.9 點陣式液晶顯示控制點陣式液晶顯示控制 GDM12864的結(jié)構(gòu)及指令的結(jié)構(gòu)及指令 GDM12864A原理簡圖原理簡圖 “寫數(shù)據(jù)寫數(shù)據(jù)”時序圖時序圖 指令名稱指令名稱控制信號控制信號控制代碼控制代碼RSR/WD7D6D5D4D3D2D1D0顯示開關(guān)設(shè)置顯示

31、開關(guān)設(shè)置000011111D顯示起始行設(shè)置顯示起始行設(shè)置0011L5L4L3L2L1L0頁面地址設(shè)置頁面地址設(shè)置0010111P2P1P0列地址設(shè)置列地址設(shè)置0001C5C4C3C2C1C0讀取狀態(tài)字讀取狀態(tài)字01busy0on/offreset0000寫顯示數(shù)據(jù)寫顯示數(shù)據(jù)10數(shù)數(shù) 據(jù)據(jù)控制指令功能表控制指令功能表 用狀態(tài)機來進行設(shè)計。設(shè)置用狀態(tài)機來進行設(shè)計。設(shè)置5個狀態(tài),分別是空閑狀態(tài)個狀態(tài),分別是空閑狀態(tài)“Idle”,寫頁面地址狀態(tài),寫頁面地址狀態(tài)“Xpage”,寫列地址狀態(tài),寫列地址狀態(tài)“Yline”,寫數(shù)據(jù)狀態(tài),寫數(shù)據(jù)狀態(tài)“Data”,顯示狀態(tài),顯示狀態(tài)“Display”。當處于當處于

32、Xpage狀態(tài)時,狀態(tài)時,rs=0,rw=0,按照前面介紹的命,按照前面介紹的命令格式令格式“1 0 1 1 1 P2 P1 P0”將頁面地址送上數(shù)據(jù)總線將頁面地址送上數(shù)據(jù)總線(P2 P1 P0表示頁面地址表示頁面地址)。當處于。當處于Yline狀態(tài)時,狀態(tài)時,rs=0,rw=0,將列地址,將列地址“0 1 C5 C4 C3 C2 C1 C0”送上數(shù)據(jù)總送上數(shù)據(jù)總線(線(C5 C4 C3 C2 C1 C0代表代表0至至63的列地址)。當處于的列地址)。當處于Data狀態(tài)時,狀態(tài)時,rs=1,rw=0,依次將,依次將ROM中的顯示數(shù)據(jù)中的顯示數(shù)據(jù)送上數(shù)據(jù)總線。將送上數(shù)據(jù)總線。將8個頁面全部掃描過

33、一遍后,進入個頁面全部掃描過一遍后,進入Display狀態(tài),狀態(tài),rs=0,rw=0,將命令,將命令“00111111”送上送上數(shù)據(jù)總線。數(shù)據(jù)總線。 液晶控制液晶控制 9.10 樂曲演奏電路樂曲演奏電路o 采用采用FPGA器件驅(qū)動小揚聲器構(gòu)成一個樂器件驅(qū)動小揚聲器構(gòu)成一個樂曲演奏電路,演奏的樂曲選擇曲演奏電路,演奏的樂曲選擇“梁祝梁?!逼危淝V如下。段,其曲譜如下。 樂曲演奏的原理樂曲演奏的原理o 組成樂曲的每個音符的頻率值(音調(diào))及其持續(xù)組成樂曲的每個音符的頻率值(音調(diào))及其持續(xù)的時間(音長)是樂曲能連續(xù)演奏所需的兩個基的時間(音長)是樂曲能連續(xù)演奏所需的兩個基本數(shù)據(jù),因此只要控制輸出

34、到揚聲器的激勵信號本數(shù)據(jù),因此只要控制輸出到揚聲器的激勵信號的頻率的高低和持續(xù)的時間,就可以使揚聲器發(fā)的頻率的高低和持續(xù)的時間,就可以使揚聲器發(fā)出連續(xù)的樂曲聲。出連續(xù)的樂曲聲。 樂曲演奏電路原理框圖樂曲演奏電路原理框圖 9.11 異步串行接口(異步串行接口(UART)設(shè)計)設(shè)計 基本的基本的UART通信只需要兩條信號線:通信只需要兩條信號線:RXD和和TXD,TXD是是UART的發(fā)送端的發(fā)送端, RXD是是UART的接收端,接收的接收端,接收與發(fā)送全雙工工作。與發(fā)送全雙工工作。 UART是異步通信方式,發(fā)送方和接收方分別有各是異步通信方式,發(fā)送方和接收方分別有各自獨立的時鐘,傳輸?shù)乃俾视呻p方約

35、定,使用起至式自獨立的時鐘,傳輸?shù)乃俾视呻p方約定,使用起至式異步協(xié)議。異步協(xié)議。起止式異步協(xié)議起止式異步協(xié)議起止式異步協(xié)議的特點是一個字符一個字符地進行傳輸,起止式異步協(xié)議的特點是一個字符一個字符地進行傳輸,字符之間沒有固定的時間間隔要求,每個字符都以起始字符之間沒有固定的時間間隔要求,每個字符都以起始位開始,以停止符結(jié)束。每一個字符的前面都有一位起位開始,以停止符結(jié)束。每一個字符的前面都有一位起始位(低電平,邏輯值始位(低電平,邏輯值0),字符本身有),字符本身有5到到8比特數(shù)據(jù)比特數(shù)據(jù)位組成,接著是一位校驗位(也可以沒有校驗位),最位組成,接著是一位校驗位(也可以沒有校驗位),最后是一位(

36、或一位半、二位)停止位,停止位后面是不后是一位(或一位半、二位)停止位,停止位后面是不定長度的空閑位。停止位和空閑位都規(guī)定為高電平,這定長度的空閑位。停止位和空閑位都規(guī)定為高電平,這樣就保證起始位開始處一定有一個下降沿。樣就保證起始位開始處一定有一個下降沿。數(shù)據(jù)接收數(shù)據(jù)接收o 數(shù)據(jù)接收:接收的首要任務(wù)是能夠正確找到數(shù)據(jù)數(shù)據(jù)接收:接收的首要任務(wù)是能夠正確找到數(shù)據(jù)的位置。這主要靠檢測數(shù)據(jù)的起始位和停止位來的位置。這主要靠檢測數(shù)據(jù)的起始位和停止位來實現(xiàn)。起始位是一位實現(xiàn)。起始位是一位0,它作為聯(lián)絡(luò)信號附加進發(fā),它作為聯(lián)絡(luò)信號附加進發(fā)送信息,因為空閑位都為高電平,所以當接收數(shù)送信息,因為空閑位都為高電

37、平,所以當接收數(shù)據(jù)線的信號突然變?yōu)榈碗娖綍r,告訴接收端數(shù)據(jù)據(jù)線的信號突然變?yōu)榈碗娖綍r,告訴接收端數(shù)據(jù)的到來。一個字符接收完畢后,對數(shù)據(jù)進行校驗的到來。一個字符接收完畢后,對數(shù)據(jù)進行校驗(若數(shù)據(jù)包含奇偶校驗位),最后檢測停止位,(若數(shù)據(jù)包含奇偶校驗位),最后檢測停止位,以確認數(shù)據(jù)接收完畢。以確認數(shù)據(jù)接收完畢。 UART接收示意圖接收示意圖 由于傳輸中有可能會產(chǎn)生毛刺,接收端極有可能將毛由于傳輸中有可能會產(chǎn)生毛刺,接收端極有可能將毛刺誤認為是起始位,所以要對檢測到的下降沿進行判別。刺誤認為是起始位,所以要對檢測到的下降沿進行判別。一般采用如下的方法:取接收端的時鐘頻率是發(fā)送頻率一般采用如下的方法:

38、取接收端的時鐘頻率是發(fā)送頻率的的16倍頻,當檢測到一個下降沿后,在接下來的倍頻,當檢測到一個下降沿后,在接下來的16個周個周期內(nèi)檢測數(shù)據(jù)線上期內(nèi)檢測數(shù)據(jù)線上“0”的個數(shù),若的個數(shù),若“0”的個數(shù)超過的個數(shù)超過8個或個或者者10(根據(jù)具體情況設(shè)置),則認為是起始位到來,否(根據(jù)具體情況設(shè)置),則認為是起始位到來,否則認為起始位沒有到來,繼續(xù)檢測傳輸線,等待起始位。則認為起始位沒有到來,繼續(xù)檢測傳輸線,等待起始位。 起始位的檢測起始位的檢測n數(shù)據(jù)發(fā)送:數(shù)據(jù)的發(fā)送實際上就是按照幀格式將寄存器數(shù)據(jù)發(fā)送:數(shù)據(jù)的發(fā)送實際上就是按照幀格式將寄存器中的并行數(shù)據(jù)轉(zhuǎn)為串行數(shù)據(jù),為其加上起始位和停止位,中的并行數(shù)據(jù)轉(zhuǎn)為串行數(shù)據(jù),為其加上起始位和停止位,以一定的波特率進行傳輸。波特率可以有多種選擇,如以一定的波特率進行傳輸。波特率可以有多種選擇,如9600b

溫馨提示

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

評論

0/150

提交評論