設計并制作一臺出租車計費器。 1.1.2 性能指標要求 ① 用EDA實訓儀的I/O設備和PLD芯片實現出租車計費器的設計。 ② 出租車起步開始計程和計費,計程系統按實際公里數計程,計費系統首先顯示起步價(如7.0),車行駛2km以內,只收起步價7元。 ③ 出租車行駛超過2km后,按每公里1.6元在7.0元的基礎上增加。 ④ 出租車行駛超過10km后(或超過20元路費),每公里加收50%的車費,即車費變為每公里2.4元。 ⑤ 出租車達到目的地后,(用一個按鈕)計程和計費數據清零,為下一次計費開始。 1.2 設計思路及設計框圖 1.2.1設計思路 本次設計首先在QuartusⅡ環境中對出租車計費器的各個部分利用verilog HDL這一硬件描述語言予以設計、生成模塊。而整個設計的核心部分就在分頻/計量模塊和路程車費計數模塊,分頻/計量模塊的功能主要是用來產生路程脈沖功能,路程車費技術模塊主要包括計算路程和車費,通過路程和車費之間的關系,當路程少于一定公里數時車費保持不變,達到一定公里數按照規則每公里增加車費,超過某公里時,再每公里加收車費。待所有模塊的功能正確之后,運用原理圖搭建頂層電路并進行整體仿真直至達到設計要求,最后再在實驗箱上檢驗設計的正確與否。在實現基本功能的基礎上,做了一個創新,設計流水燈,當乘客上車時,流水燈開始運轉,乘客下車時,流水燈停止。
51hei.png (6.17 KB, 下載次數: 111)
下載附件
2020-11-4 21:38 上傳
2.1一秒鐘分頻器路程計數器的設計 通過秒脈沖來實現計費器調價,超過9自動進一位、實現計費脈沖。
路程模塊用于控制數碼管SEG4~SEG7的顯示,輸入有2個,分別是nclk,clrn。這里還有一個寄存器類型的輸出d,是為了給計費器進行一個路程提示。 。
計費模塊是用來計出租車的路費的,一共有3個輸入,d,clrn,j。 d是計圈模塊給的一個輸出,主要給計費器提供一個路程的提示,開始計費。2公里內,數碼管顯示起步價7.0元;2公里到10公里,按每公里1.6元在7.0元的基礎上增加;10公里以外,每公里2.4元;期間,低位的逢十進一。另外輸入j是用來給計程車一個起步價的設定的。clrn仍未清零端。 
流水燈模塊是出租車計費器設計的創新點,一共有2個輸入,clk,key。給led燈賦初值為1,然后設置一個中間變量temp,將led燈的初值給temp。然后在key=0時執行對led燈的左移,左移完成后給led賦temp的值,即又回到初值,循環執行。
3 調試過程 將程序鎖好實訓箱上的管腳后,將程序下載到實訓箱模擬出租車的路程計費。實訓箱前四個數碼管表示路程,后四個數碼管表示車費。將分頻器的按鍵置于高電平狀態,分頻器開始輸送1秒時鐘信號,將控制路程開始的按鍵置于高電平,模擬乘客上車,車費數碼管開始顯示起步價7.0元,路程開始計算,2公里內,車費數碼管一直顯示7.0元,路程大于2公里后小于10公里時,車費數碼管開始每公里增加1.6元,路程大于10公里后,車費數碼管開始每公里增加2.4元,之后將按鍵置于低電平,按下清零鍵,8個數碼管重置,恢復起步價。并且當乘客上車時,路程和計費都開始增加,流水燈也會一直轉著,當乘客下車時,流水燈就停止,這是實訓的創新也是亮點。 4 功能測試 4.1 測試儀器與設備 EDA實訓箱,數據連接線,電腦quartus仿真。 4.2 性能指標測試 ① 用EDA實訓儀的I/O設備和PLD芯片實現出租車計費器的設計。 ② 出租車起步開始計程和計費,計程系統按實際公里數計程,計費系統首先顯示起步價(如7.0),車行駛2km以內,只收起步價7元。 ③ 出租車行駛超過2km后,按每公里1.6元在7.0元的基礎上增加。 ④ 出租車行駛超過10km后(或超過20元路費),每公里加收50%的車費,即車費變為每公里2.4元。 ⑤ 出租車達到目的地后,(用一個按鈕)計程和計費數據清零,為下一次計費開始。 性能指標要求指標全部完成。
5 心得體會 EDA的學習在某些方面和CAD很像。也涉及到軟件Quartus II的應用,還涉及到數電與c語言的學習,可以說結合很多知識。而且程序寫出來后,編譯有錯誤又應該一個個改錯,然后還要驗證能否在實驗箱上實現功能,驗證和實現
6 參考文獻 《EDA技術與應用》第3版 江國強編著 電子工業出版社
附錄 附錄1:仿真波形圖(部分模塊) 
附錄2:程序清單
(1)計費模塊:
module jf(d,clrn,q,j);
input j,d,clrn ;
output reg[15:0] q;
reg[3:0] c;
always @(posedge d&&j or negedge clrn)
begin
if(clrn==0) begin c=0;q=0;end
else begin c=c+1;
if(c<=2) q[7:4]=7;
else if(c<=10) begin q[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;
if(q[3:0]>9)begin q[3:0]=q[3:0]%10;q[7:4]=q[7:4]+1;end
if(q[7:4]>9)begin q[7:4]=q[7:4]%10;q[11:8]=q[11:8]+1; end
end
else if(c>10) begin q[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;
if(q[3:0]>9)begin q[3:0]=q[3:0]%10;q[7:4]=q[7:4]+1;end
if(q[7:4]>9)begin q[7:4]=q[7:4]%10;q[11:8]=q[11:8]+1;
if(q[11:8]>9)begin q[11:8]=q[11:8]%10;q[15:12]=q[15:12]+1;end
end
end
end
end
endmodule
(2)路程模塊:
module lc (nclk,clrn,d,q);
input nclk,clrn;
output reg[15:0] q;
output reg d;
reg[11:0]i;
always @(negedge clrn or posedge nclk)
begin
if(clrn==0) begin q=0;i=0; end
else
begin i=i+5;
if(i>9)
begin q[3:0]=q[3:0]+1;i=0; d=1;
if(q[3:0]>9)
begin
q[3:0]=0;q[7:4]=q[7:4]+1;
//if(q[7:0]<=2) d=1;
if(q[7:4]>9)
begin
q[7:4]=0;q[11:8]=q[11:8]+1;
if(q[11:8]>9)
begin
q[11:8]=0;q[15:12]=q[15:12]+1;
end
end
end
end
else d=0;
end
end
endmodule
(4)分頻器模塊:
module fpq(clk,kaishi,clk_1s);
input clk,kaishi;
output reg clk_1s;
reg[24:0] qs;
always @(posedge clk)
if(kaishi==1)
begin
if(qs==20000000-1) qs=0;
else qs=qs+1;
if(qs==20000000-1) clk_1s=0;
else clk_1s=1;
end
endmodule
(5)流水燈模塊:
module deng(led,key,clk);
input clk,key;
output[11:0] led;
reg[11:0] led;
reg temp;
initial led=12'b000000000001;
always @(posedge clk)
begin
if(key==0)
begin
temp=12'b000000000001;
led=led<<1;
if(led==12'b000000000000)
led=temp;
end
end
endmodule
51hei.png (10.14 KB, 下載次數: 115)
下載附件
2020-11-4 21:37 上傳
全部資料51hei下載地址:
出租車計費器.7z
(523.9 KB, 下載次數: 59)
2020-11-4 20:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
出租車計費器.doc
(106 KB, 下載次數: 36)
2020-11-4 20:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|