




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.西安郵電學(xué)院科研訓(xùn)練報告基于FPGA的出租車計價器設(shè)計院系:電子工程學(xué)院姓名: 專業(yè)班級:微電子(05)學(xué)號: 81目錄摘要21引言:22系統(tǒng)規(guī)范:22.1,出租車計價器的要求:22.2 ,系統(tǒng)組成框圖:23 .各模塊設(shè)計:33.1分頻模塊:33.1.1,計數(shù)器的分頻模塊:33.1 .3,計數(shù)器的分頻模塊VerilogHDL源代碼:43.1 .4,仿真的結(jié)果:43.1.5,數(shù)碼管的分頻模塊:43.1 .6 ,具體框圖:43.1 .7,數(shù)碼管的分頻模塊VerilogHDL源代碼:53.2,計程模塊:53.2.1,計程模塊的框圖:53.2.2計程模塊的VerilogHDL源代碼:53.2.3計程
2、模塊的仿真結(jié)果:63.3計時模塊:73.3.1,計時模塊的框圖:73.3.2,計時模塊的VerilogHDL源代碼:73.3.3計時模塊的仿真結(jié)果:83.4,控制模塊:83.4.1, 控制模塊的框圖:93.4.2,控制模塊的VerilogHDL源代碼:93.4.3,控制模塊的仿真結(jié)果:93.5,計費模塊:93.5.1計費模塊的框圖:93.5.2,計費模塊的VerilogHDL源代碼如下所示:103.5.3,計費模塊的仿真結(jié)果:103.6,數(shù)碼管顯示模塊:113.6.1,數(shù)碼管顯示模塊的框圖:113.6.2,數(shù)碼管顯示的VerilogHDL源代碼:113.7,頂層模塊:133.7.1,頂層模塊的
3、VerilogHDL源代碼:134.驗證方案:144.1,驗證的流程圖:144.2,驗證的VerilogHDL源代碼:154.3,系統(tǒng)仿真:155.綜合:175.1, Quartus II軟件綜合的報表:175.2,綜合的RTL級電路:176. 結(jié)束語:187.參考文獻(xiàn):18基于FPGA的出租車計價器設(shè)計2系統(tǒng)規(guī)范:2.1,出租車計價器的要求: 行程3公里內(nèi)(包括3公里),且等待累計時間2分鐘內(nèi)(包括2分鐘),起步費為10元; 3公里外(不包括3公里)以每公里2元,等待累計時間2分鐘外(不包括2分鐘)以每分鐘以1.0元計費。 能顯示行駛公里數(shù)、等待累計時間和最后的總費用。本計費器的顯示范圍為0
4、99元,計價分辨率為1元;計程器顯示范圍為099公里,分辨率為1公里;計時器的顯示范圍是分鐘的顯示范圍是099, 辨率為1分鐘。秒的顯示范圍是059。辨率為1秒。2.2 ,系統(tǒng)組成框圖:出租車的一般計費過程為:出租車載客后,啟動計費器,整個系統(tǒng)開始運(yùn)行,里程計數(shù)器和時間計數(shù)器從0開始計數(shù),費用計數(shù)器從10開始計算。再根據(jù)行駛里程或停止等待的時間按以上的標(biāo)準(zhǔn)計費。若在行駛狀態(tài),則計程器開始加計數(shù),當(dāng)路程超過三公里后,計費器以每公里2元累加。若出租車停止等待狀態(tài),則計時器開始加計數(shù),當(dāng)時間超過兩分鐘后,計費器以每分鐘1元累加。出租車到達(dá)目的地停止后,停止計費器,顯示總費用。根據(jù)出租車計費器的工作過
5、程,本系統(tǒng)采用分層次、分模塊的方式設(shè)計,其本系統(tǒng)組成框圖如下所示。其中行駛路程計數(shù)模塊、等待時間計數(shù)模塊和計費模塊,用來統(tǒng)計路程、等待時間和總費用,控制模塊是用來控制計費模塊,數(shù)碼管顯示模塊用來顯示行駛的公里數(shù)、等待累計時間和總費用等信息。系統(tǒng)框圖如下所示:3 .各模塊設(shè)計:本系統(tǒng)采用層次化、模塊化的設(shè)計方法,設(shè)計順序為自下向上。首先實現(xiàn)系統(tǒng)框圖中的各子模塊,然后由頂層模塊調(diào)用各子模塊來完成整個系統(tǒng)。為了便于顯示,這里的路程、時間和費用計數(shù)器均用十六進(jìn)制表示。3.1分頻模塊:3.1.1,計數(shù)器的分頻模塊:3.1 .2 ,計數(shù)器的分頻模塊具體框圖: 此模塊的功能是對總的時鐘進(jìn)行分頻,分出的頻率是
6、讓計數(shù)器用的,因為總的時鐘是50M的。設(shè)計該模塊的時候用了一個32位的計數(shù)器,當(dāng)計數(shù)器計到25_000000的時候產(chǎn)生時鐘。在仿真的時候為了方便觀察設(shè)計了一個8分頻的電路。當(dāng)下載的時候用的是2HZ的時鐘 。3.1 .3,計數(shù)器的分頻模塊VerilogHDL源代碼:module div(clk_50M,clk,reset);/ 端口的定義input clk_50M,reset;/ 總的時鐘是50Moutput clk;/分頻后輸?shù)臅r鐘 reg clk;reg 31:0 count;/32位的計數(shù)器always (posedge clk_50M or negedge reset)/異步復(fù)位begi
7、n if(!reset) begin clk<='d0; count=32'd0;endelse if(count=32'd25_000000)/ 判斷計時器記到了25_000000嗎 begin count<=32'd0;/計到25_000000計數(shù)器清零 clk<=clk;/輸出的時鐘取反 end/end begin else count<=count+1'd1;/ 沒計到25_000000計數(shù)器加一end/end alwaysendmodule / 結(jié)束分頻模塊3.1 .4,仿真的結(jié)果: 從波形可以看出當(dāng)reset為低電平的
8、時候clk為零,當(dāng)為高電平的時候clk的高電平占了clk_50M的八個周期,低電平也占了clk_50M的八個周期。3.1.5,數(shù)碼管的分頻模塊:3.1 .6 ,具體框圖: 此模塊的功能是對總的時鐘進(jìn)行分頻,分出的頻率是讓數(shù)碼管用的,因為總的時鐘是50M的。設(shè)計該模塊的時候用了一個32位的計數(shù)器,當(dāng)計數(shù)器計到50_000的時候產(chǎn)生時鐘。在仿真的時候為了方便觀察設(shè)計了一個8分頻的電路。3.1 .7,數(shù)碼管的分頻模塊VerilogHDL源代碼:module div1(clk_50M,clk1,reset);/ 端口的定義input clk_50M,reset;/ 總的時鐘是50Moutput clk
9、1;/分頻后輸?shù)臅r鐘 reg clk1;reg 31:0 count;/32位的計數(shù)器always (posedge clk_50M or negedge reset)/異步復(fù)位begin if(!reset) begin clk1<='d0; count=32'd0;endelse if(count=32'd50_000)/ 判斷計時器記到了50_000嗎 begin count<=32'd0;/計到50_000計數(shù)器清零 clk1<=clk1;/輸出的時鐘取反 end/end begin else count<=count+1'
10、;d1;/ 沒計到50_000計數(shù)器加一end/end alwaysendmodule / 結(jié)束分頻模塊3.2,計程模塊:3.2.1,計程模塊的框圖:此模塊的功能是計算出租車行駛的路程。在出租車啟動并行駛的過程中(即復(fù)位/啟動信號reset為0,行駛/停止信號start為1),當(dāng)時鐘clk是上升沿的時候,系統(tǒng)即對路程計數(shù)器distance的里程計數(shù)器進(jìn)行加計數(shù),當(dāng)路程超過三公里時,系統(tǒng)將輸出標(biāo)志正脈沖distance_enable。3.2.2計程模塊的VerilogHDL源代碼:module distancemokuai(clk,start,reset,distance,distance_en
11、able);/端口的定義input clk,start,reset;output 7:0 distance;/ 輸出的公里reg 7:0 distance;output distance_enable;/ 控制計費的公里信號reg distance_enable;always(posedge clk or negedge reset)/異步復(fù)位begin if(!reset)/低電平復(fù)位 begin distance<=8'd0; end else if(start)/ start 高電平有效 begin if(distance3:0=9)/判斷distance的低四位計到了9沒
12、有 begin distance3:0<=4'd0;/計到9清零 if(distance7:4=9) /判斷distance的高四位計到了9沒有 distance7:4<=4'd0;/ /計到9清零 else distance7:4<= distance7:4+1'd1;/ distance的高四位沒有計到9的時候加一 end/end begin else distance3:0<=distance3:0+1'd1;/ distance的低四位沒有計到9的時候加一 end/end startend/end always/*產(chǎn)生distan
13、ce_enable信號*/always(posedge clk or negedge reset)beginif(!reset)begin distance_enable<=1'd0;/復(fù)位endelse if(distance>8'd1)/ 公里大于三的時候 begin distance_enable<=1'd1;/輸出distance_enable信號 end/end beginend/end alwaysendmodule/結(jié)束計程模塊3.2.3計程模塊的仿真結(jié)果:從波形圖可以看出在時鐘的控制下當(dāng)reset為低電平的時候distance,dist
14、ance為零,當(dāng)reset為高電平且start為高電平的時候distance開始計數(shù),當(dāng)計到大于三的時候輸出了distancedistance_enable為高電平。3.3計時模塊:3.3.1,計時模塊的框圖:此模塊用于計算停車等待的時間。在出租車行進(jìn)中,如果車輛停止等待,計數(shù)器則在1 Hz信號clk的上升沿進(jìn)行加計數(shù),每60次產(chǎn)生進(jìn)位脈沖使分鐘計數(shù)器位進(jìn)行加計數(shù),當(dāng)累計等待時間超過2(不包括2分鐘)分鐘時,輸出標(biāo)志time_enable正脈沖信號。3.3.2,計時模塊的VerilogHDL源代碼:module timemokuai(clk,reset,start,s,m,time_enabl
15、e);/ 端口的定義input clk,reset,start;output 7:0 s;/輸出的秒output 7:0 m;/輸出的分output time_enable;/輸出的控制計費的信號reg 7:0 s;reg 7:0 m;wire time_enable; always(posedge clk or negedge reset)/異步復(fù)位beginif(!reset)/低電平有效begin/復(fù)位s<=8'd0;m<=8'd0;endelse if(!start)/start 信號低電平有效beginif(s3:0=9)/ 秒的低四位是9 begin s
16、3:0<=4'd0;/清零 if(s7:4=5) / 秒的高四位是5 begin s7:4<=4'd0; /清零 if(m3:0=9) / 分的低四位是9 begin m3:0<=4'd0; /清零 if(m7:4=9) / 分的高四位是9 m7:4<=4'd0; /清零 else m7:4<=m7:4+1'd1; / 分的高四位不是9加一endelse m3:0<=m3:0+1'd1; /分的低四位不是9加一endelse s7:4<=s7:4+1'd1; / 秒的高四位不是5加一endelse
17、 s3:0<=s3:0+1'd1; /秒的低四位不是9加一 end/end always end assign time_enable=(m7:0>8'd2)&&(s7:0=8'd0)?1'd1:1'd0;/產(chǎn)生time_enable信號。 endmodule/結(jié)束計時模塊3.3.3計時模塊的仿真結(jié)果:兩分鐘之內(nèi)(包括兩分鐘)的仿真結(jié)果如下所示:從波形圖可以看出在clk的控制下當(dāng)start為低電平reset為低電平的時候時間計數(shù)但是費用沒有計數(shù),time_enable為低電平。兩分鐘之外(不包括兩分鐘)的仿真結(jié)果如下所示:從波
18、形圖可以看出在clk的控制下當(dāng)start為低電平reset為低電平的時候時間計數(shù)當(dāng)時間大于二分鐘的時候費用計數(shù),time_enable為輸出高電平。3.4,控制模塊:3.4.1, 控制模塊的框圖:控制模塊用于為計費模塊提供時鐘,當(dāng)start高電平的時候選擇公里計費,輸出的時鐘信號為distance_enable,當(dāng)start低電平的時候選擇時間計費,輸出的時鐘信號為time_enable,3.4.2,控制模塊的VerilogHDL源代碼:module control(start,distance_enable,time_enable,select_clk);input start,distan
19、ce_enable,time_enable;output select_clk;/輸出選擇的時鐘信號wire select_clk;/*當(dāng)start高電平的時候選擇公里計費,輸出的時鐘信號為distance_enable,當(dāng)start低電平的時候選擇時間計費,輸出的時鐘信號為time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/結(jié)束控制模塊3.4.3,控制模塊的仿真結(jié)果:公里計費的仿真結(jié)果如下所示:從波形圖可以看出當(dāng)start高電平的時候輸出的信號是distance_enable。時間計費的仿真結(jié)
20、果如下所示:從波形圖可以看出當(dāng)start低電平的時候輸出的信號是time_enable。3.5,計費模塊:3.5.1計費模塊的框圖:費用計數(shù)器模塊用于出租車啟動后,根據(jù)行駛路程和等待時間計算費用。當(dāng)出租車停車時,時鐘select_clk用于將費用計數(shù)器復(fù)位為起步價10元;當(dāng)車處于行駛狀態(tài)且滿3公里時,select_clk信號選擇distans_enable,此后路程每滿1公里,費用計數(shù)器加1元;當(dāng)出租車處于停止等待狀態(tài)且時鐘滿2分鐘時,select_clk信號選擇time_enable信號,時間每滿1分鐘,費用計數(shù)器加1元。3.5.2,計費模塊的VerilogHDL源代碼如下所示:module
21、 feemokuai(select_clk,reset,fee,clk);input select_clk,reset,clk;output7:0 fee;/輸出的費用reg 7:0 fee;always(posedge clk or negedge reset)/異步復(fù)位begin if(!reset)/低電平有效 begin fee<=8'h10;/起步為十元 end else if(select_clk=1d1) begin if(fee3:0=4'd9)/費用的低四位是不是計到了9 begin fee3:0<=4'd0;/計到9清零 if(fee7:
22、4=4'd9)/ 費用的高四位是不是計到了9fee7:4<=4'd0; /計到9清零 else fee7:4<=fee7:4+1'd1;/ 費用的高四位沒有計到9加1endelse fee3:0<=fee3:0+1'd1;/ 費用的低四位沒有計到9加1end/end beginend/end alwaysendmodule /結(jié)束計費模塊3.5.3,計費模塊的仿真結(jié)果:公里計費的仿真結(jié)果如下所示:時間計費的仿真結(jié)果如下所示:兩分鐘之內(nèi)(包括兩分鐘)的計費仿真結(jié)果如下所示:兩分鐘之外(不包括兩分鐘)的仿真結(jié)果如下所示:3.6,數(shù)碼管顯示模塊:3.
23、6.1,數(shù)碼管顯示模塊的框圖:數(shù)碼管有兩種顯示方式動態(tài)顯示與靜態(tài)顯示,由于在本文中用到了七個數(shù)碼管所以選擇了動態(tài)顯示,在時鐘的控制下,當(dāng)reset為高電平的時候把費用,公里,時間譯碼輸出。3.6.2,數(shù)碼管顯示的VerilogHDL源代碼:module scan_led(clk1,dig,seg,distance,s,m,fee);input clk1;input7:0 distance,fee;/輸入的公里,費用。input7:0 s;/輸入的秒input7:0 m;/輸入的分。output7:0 dig; / 譯碼結(jié)果output7:0 seg;/ 數(shù)碼管的選擇。reg 7:0 r_dig
24、;/ 譯碼結(jié)果輸出寄存器reg 7:0 r_seg; /數(shù)碼管的選擇寄存器。reg 3:0 disp_dat;reg3:0 a;assign dig=r_dig;assign seg=r_seg;always(posedge clk1)begin a<=a+1'd1;/數(shù)碼管的選擇endalways(posedge clk1)begincase(a) 4'd0: disp_dat=distance7:4;/公里的高四位用第一個數(shù)碼管顯示4'd2: disp_dat=m7:4; /時間分的高四位用第三個數(shù)碼管顯示。4'd3: disp_dat=m3:0; /
25、時間分的低四位用第四個數(shù)碼管顯示4'd4: disp_dat=s7:4; /時間秒的高四位用第五個數(shù)碼管顯示。4'd5: disp_dat=s3:0; /時間秒的低四位用第六個數(shù)碼管顯示。4'd6: disp_dat=fee7:4;/費用的高四位用第七個數(shù)碼管顯示。4'd7: disp_dat=fee3:0; /費用的低四位用第八個數(shù)碼管顯示。default: disp_dat=4'b1010;endcasecase(a)4'd0:r_dig=8'b01111111;/ 選擇第一個數(shù)碼管4'd1:r_dig=8'b1011
26、1111;/ 選擇第二個數(shù)碼管4'd2:r_dig=8'b11011111; / 選擇第三個數(shù)碼管4'd3:r_dig=8'b11101111; / 選擇第四個數(shù)碼管4'd4:r_dig=8'b11110111; / 選擇第五個數(shù)碼管4'd5:r_dig=8'b11111011; / 選擇第六個數(shù)碼管4'd6:r_dig=8'b11111101; / 選擇第七個數(shù)碼管4'd7:r_dig=8'b11111110; / 選擇第八個數(shù)碼管default:r_dig=8'b11111111;end
27、caseend/ *譯碼結(jié)果*/always(disp_dat)begin case(disp_dat) 4'h0: r_seg=8'hc0;/ 顯示0 4'h1: r_seg=8'hf9;/ 顯示1 4'h2: r_seg=8'ha4;/ 顯示2 4'h3: r_seg=8'hb0;/ 顯示3 4'h4: r_seg=8'h99;/ 顯示4 4'h5: r_seg=8'h92;/ 顯示5 4'h6: r_seg=8'h82;/ 顯示6 4'h7: r_seg=8'h
28、f8;/ 顯示7 4'h8: r_seg=8'h80;/ 顯示8 4'h9: r_seg=8'h90;/ 顯示9 default: r_seg=8'hbf;endcaseendendmodule/結(jié)束譯碼模塊3.7,頂層模塊:各模塊設(shè)計仿真實現(xiàn)后,可分別創(chuàng)建成元件符號。頂層就是將各分模塊用Verilog HDL語言或者是圖形方法連接起來,便可實現(xiàn)系統(tǒng)電路。3.7.1,頂層模塊的VerilogHDL源代碼:module taximeter(clk_50M, reset,start,seg,dig);/ 端口的定義input clk_50M,reset,st
29、art;/總的時鐘信號,復(fù)位信號,開始信號output7:0 seg,dig;/數(shù)碼管的輸出wire 7:0distance;/公里wire 7:0 s;/秒wire 7:0 m;/分wire7:0 fee;/費用wire clk;/計數(shù)時鐘wire distance_enable;/公里控制費用的信號wire time_enable;/時間控制費用的信號wire select_clk;/控制信號wire clk1;/數(shù)碼管的時鐘/*模塊的調(diào)用*/div u0(.clk_50M(clk_50M),.clk(clk),.reset(reset);/調(diào)用計數(shù)分頻模塊div1 u1(.clk_50M
30、(clk_50M),.clk1(clk1),.reset(reset);/調(diào)用數(shù)碼管分頻模塊distancemokuai u2(.clk(clk),.start(start),.reset(reset),.distance(distance),.distance_enable(distance_enable);/調(diào)用計程模塊timemokuai u4(.clk(clk),.reset(reset),.start(start),.s(s),.m(m), .time_enable(time_enable);/調(diào)用計時模塊control u3(.start(start),.distance_enab
31、le(distance_enable),.time_enable(time_enable),.select_clk(select_clk);/調(diào)用控制模塊feemokuai u5(.reset(reset),.fee(fee),.select_clk(select_clk),.clk(clk);/調(diào)用計費模塊scan_led (.clk1(clk1),.dig(dig),.seg(seg),.distance(distance),.s(s),.m(m),.fee(fee);/調(diào)用數(shù)碼管顯示模塊endmodule/結(jié)束頂層模塊4.驗證方案:4.1,驗證的流程圖:設(shè)計規(guī)范結(jié)束 Testbench的創(chuàng)建驗證規(guī)范 不滿足運(yùn)行,調(diào)試檢查驗證規(guī)范 不合格所有測試都滿足覆蓋要求 合格 驗證規(guī)范結(jié)束滿足 創(chuàng)建回歸測試4.2,驗證的VerilogHDL源代碼:timescale 1ns/100ps/時間的單位與時間的精度module taximeter_tb;/驗證的模塊名字reg clk_50M,reset,start;/輸入wire7:0 distance;/輸出的公里wire 7:0 s;/輸出的秒wire 7:0 m;/輸出的分wire 7:0 fee;/輸出的費用always #10 clk_50M=c
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 望仙谷公司團(tuán)建活動方案
- 朗誦課程活動方案
- 松江區(qū)公司團(tuán)建活動方案
- 最美民宿建設(shè)活動方案
- 月圓鳥類活動方案
- 景區(qū)暑期活動策劃方案
- 春節(jié)返鄉(xiāng)系列活動方案
- 晉安團(tuán)建活動方案
- 服裝貿(mào)易公司策劃方案
- 暑期營銷活動方案
- 《小學(xué)生心理健康教育》試題及答案
- 2025年湖北省中考道德與法治試卷真題(標(biāo)準(zhǔn)含答案)
- 化妝品標(biāo)簽審核管理制度
- 2024年全球及中國神經(jīng)康復(fù)外骨骼機(jī)器人行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年銅仁沿河土家族自治縣“特崗計劃”招聘考試筆試試題(含答案)
- 江蘇省連云港市2024-2025學(xué)年高二年級上冊期末調(diào)研考試物理試題(選修)解析版
- 2025安全生產(chǎn)月主題宣講課件十:主要負(fù)責(zé)人安全公開課
- 如何提升安全管理水平
- 地板拆除合同協(xié)議書
- 退贓協(xié)議書范本
- 【MOOC答案】《大學(xué)物理I力學(xué)、相對論、電磁學(xué)》(北京交通大學(xué))章節(jié)作業(yè)慕課答案
評論
0/150
提交評論