1,用開關按鍵代表脈沖,每個脈沖代表100m,10脈沖1km,1.4元每公裏,可同步顯示裏程和費用;
2.不足2km的,按5元計費,超過2km的,總費用=起步費用+(裏程-2km) *裏程單價+。
等待時間*等待後的單價;
3.等待時間超過2分鐘的,按每分鐘1.3元收費;
4.可以設置起步價和裏程單價。
壹、設計原則和技術方法:
包括:電路工作原理分析及原理圖、元器件選擇及參數計算、電路調試方法及結果說明;
軟件設計說明書和流程圖,軟件源代碼,軟件調試方法和運行結果說明。
根據設計要求,系統輸入信號clk、計價開始信號start、等待信號stop和裏程脈沖信號fin。系統輸出信號包括:總費用C0-C3,行駛距離K0-K1,等待時間M0-M1等。系統有兩個脈沖輸入信號,clk_750k和FIN,其中CLK _ 750K將根據設計要求分為14hz、15hz和1hz,分別作為公裏計費和超時計費的脈沖。兩個控制輸入開關啟動和停止;;控制過程如下:start作為開關開始充電。當start為高電平時,系統根據輸入情況開始充電。當有乘客上車開始行駛時,fin脈沖來充電行駛,此時的stop需要置0;如果需要停車等待,將stop轉到高電平。
並去掉鰭輸入脈沖等待充電;乘客下車不等待時,直接將start設置為0,系統停止工作;價格開始歸類為5.0元起步價。
整個設計由分頻模塊、計量模塊、充電模塊、控制模塊和顯示模塊五部分組成。
計量模塊是整個系統的重要組成部分,實現裏程計數和時間計數;控制模塊是實現不同充電方式的選擇部件。根據設計的使能終端,選擇是按裏程計費還是按等待時間計費。同時設計了分頻模塊,產生不同頻率的脈沖信號,實現對系統的充電。計量模塊采用1hz的驅動信號,充電模塊采用1.4 Hz和1.3 Hz的驅動信號;計量模塊每計數壹次,計量模塊就會計數14次或13次,即計時1.3元/分鐘,測井1.4元/公裏。組成框圖如下:
1.十進制模塊:
為實現100m脈沖的驅動信號,其組成框圖如圖3所示:
圖3十進制模塊框圖
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;
實體柏金誌是
端口(start,clk2:在std_logic中;-第二次脈沖
a: out std_logic_vector(3降0));
端白金枝;
白金之建築rt1為
信號count _ 1:STD _ logic _ vector(3 down to 0);
開始
a & lt= count _ 1;
進程(開始,時鐘2)
開始
if(start='0 ')然後
count _ 1 & lt;="0000";
elsif(clk2 '事件和clk2='1 ')則
if(count _ 1 = " 0111 ")則
count _ 1 & lt;="0000";
其他
count _ 1 & lt;= count _ 1+' 1 ';
結束if;
結束if;
結束進程;
結束rt1
2.充電模塊
;實現裏程和等待時間的計費並輸出到顯示器。組件框圖如下:
圖4計費模塊框圖
源程序如下:
圖書館IEEE
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ arith . all;
使用IEEE . STD _ logic _ unsigned . all;
齊斐是實體
端口(clk2:在std_logic中;-充電驅動信號
start:在std_logic中;-計費開始信號
c0,c1,c2,C3:buffer STD _ logic _ vector(3 down to 0));
端姬妃;
齊飛的架構rt1是
開始
進程(clk2,啟動)
開始
如果start='0 ',那麽c3 & lt="0000";c2 & lt="0000";c 1 & lt;="0101";c0 & lt="0000";-起步價5元
elsif clk2 '事件,而clk2='1 '則
如果c0="1001 "那麽c0 & lt="0000";
如果c1="1001 ",則c 1 & lt;="0000";
如果c2="1001 ",那麽c2 & lt="0000";
如果c3="1001 ",那麽c3 & lt="0000";
else c3 & lt= C3+1;
結束if;
else c2 & lt= C2+1;
結束if;
else c 1 & lt;= c 1+1;
結束if;
else c0 & lt= c0+1;
結束if;
結束if;
結束進程;
end rt 1;
3.千米模塊
實現過程計數和充電脈沖輸出,組成框圖如下:
圖5公裏模塊框圖
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;
實體鞏俐是
port(clk1,start:in STD _ logic;-100米脈沖
k1,k2,k3,k4:out STD _ logic _ vector(3 down to 0);-裏程顯示
temp 2:out STD _ logic);
結束鞏俐;
鞏俐的建築rt1是
信號count _ 1:STD _ logic _ vector(3 down to 0);
信號count _ 2:STD _ logic _ vector(3 down to 0);
信號count _ 3:STD _ logic _ vector(3 down to 0);
信號count _ 4:STD _ logic _ vector(3 down to 0);
開始
k 1 & lt;= count _ 1;
k2 & lt= count _ 2;
k3 & lt= count _ 3;
k4 & lt= count _ 4;
進程(開始,clk1)
開始
if(start='0 ')然後
count _ 1 & lt;="0000";
count _ 2 & lt="0000";
count _ 3 & lt="0000";
count _ 4 & lt="0000";公裏清理完畢
elsif(clk1 '事件和clk1='1 ')然後
if(count _ 1 = " 1001 ")則-公裏計數器
count _ 1 & lt;="0000";count _ 2 & lt= count _ 2+1;temp2 & lt='1';
if(count_2="1001 ")那麽
count _ 2 & lt="0000";count _ 3 & lt= count _ 3+' 1 ';
if(count_3="1001 ")那麽
count _ 3 & lt="0000";count _ 4 & lt= count _ 4+' 1 ';
結束if;
結束if;
其他
count _ 1 & lt;= count _ 1+' 1 ';temp2 & lt='0';
結束if;
結束if;
結束進程;
end rt 1;
4.輸出模塊
為了實現所有數據的輸出,部件框圖如下:
圖6輸出模塊框圖
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;
實體書處是
port(y:in STD _ logic _ vector(3 down to 0);
e:out STD _ logic _ vector(6 down to 0));
端書處;
蜀楚建築rt 1為
開始
過程
開始
案例y是
當" 0000"= >時;e & lt="0111111";
當" 0001"= >時;e & lt="0000110";
當" 0010"= >時;e & lt="1011011";
當" 0011"= >時;e & lt="1001111";
當" 0100"= >e & lt="1100110";
當" 0101"= >e & lt="1101101";
當" 0110"= >e & lt="1111101";
當" 0111"= >時;e & lt="0000111";
當" 1000"= >e & lt="1111111";
當" 1001"= >e & lt="1100111";
當別人= & gte & lt="0000000";
結束案例;
結束進程;
end rt 1;
5.顯示組件
為實現所有數據的顯示,組件框圖如下:
圖7示出了該模塊的框圖。
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;
實體石現是
端口(start:在std_logic中;
答:在STD _ logic _ vector(3 down to 0);-選擇信號
c1,c2,c3,c4,out1,out2,out3,out 4:in STD _ logic _ vector(3 down to 0);-裏程顯示、時間顯示輸入
y:out STD _ logic _ vector(3 down to 0));-裏程顯示,時間顯示輸出
結束石現;
石現的建築rt1是
開始
過程
開始
if(start='0 ')然後
y & lt="0000";
否則情況a是
當" 0000"= >時;y & lt= c 1;
當" 0001"= >時;y & lt= c2
當" 0010"= >時;y & lt= c3
當" 0011"= >時;y & lt= c4
當" 0100"= >y & lt= out 1;
當" 0101"= >y & lt= out2
當" 0110"= >y & lt= out3
當" 0111"= >時;y & lt= out4
當別人= & gty & lt= "0000";
結束案例;
結束if;
結束進程;
end rt 1;
6.dian模塊
圖8 dian模塊框圖
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;
實體點是
端口(a:在std_logic_vector中(3向下到0);
e:out STD _ logic);
端典;
dian的架構rt1是
開始
過程
開始
案例a是
當" 0001"= >時;e & lt='1';
當" 0101"= >e & lt='1';
當別人= & gte & lt='0';
結束案例;
結束進程;
end rt 1;
第三,各個模塊的設計分析。
系統的總體頂層框圖如下:
系統總體頂層框圖
程序的最終功能是實現波形模擬。
1.分頻模塊
由於實驗箱中沒有14hz和13hz的整數倍時鐘信號,所以采用750khz的頻率進行分頻,從而近似得到14hz、13hz和1hz的時鐘頻率。通過以上三種不同頻率的脈沖信號,驅動出租車,等待兩種情況下不同的計費。模塊元素如下:
分頻模塊框圖
源程序如下:
圖書館IEEE
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ arith . all;
使用IEEE . STD _ logic _ unsigned . all;
實體分聘是
端口(clk_750k:在std_logic中;-系統時鐘
clk _ 14:buffer STD _ logic;-14分頻
clk _ 13:buffer STD _ logic;-13分頻
clk _ 1:buffer STD _ logic);-1分頻
端分聘;
分拼的架構rt1是
信號q_14:整數範圍0到53570;-定義中間信號量
信號q_13:整數範圍0到57691;
信號q_1:整數範圍0到749999;
開始
進程(clk_750k)
開始
如果(clk_750k '事件和clk_750k='1 '),則
如果q_14=53570,那麽q _ 14 & lt;=0;clk _ 14 & lt;= not clk _ 14;
else q _ 14 & lt;= q _ 14+1;
結束if;-獲得14hz頻率信號。
如果q_13=57691,則q _ 13 & lt;=0;clk _ 13 & lt;= not clk _ 13;
else q _ 13 & lt;= q _ 13+1;
結束if;-獲得13hz頻率信號。
如果q_1=749999,那麽q _ 1 & lt;=0;clk _ 1 & lt;= not clk _ 1;
else q _ 1 & lt;= q _ 1+1;
結束if;-獲得1hz頻率信號
結束if;
結束進程;
end rt 1;
2.計量模塊
計量模塊主要完成定時和記錄功能。
計時部分:計算乘客的累計等待時間。當等待時間超過2分鐘時,該模塊中的en1使能信號變為1;當clk1的每壹個上升沿到來時,定時器會自動遞增1,其量程為59min,滿刻度後自動歸零。
日誌部分:計算乘客出行的公裏數。當裏程超過2km時,該模塊中的en0使能信號會變成1;clk的每個上升沿到來時,log都會增加1,log的量程為99km,滿量程後自動歸零。
組件框圖如下:
計量模塊框圖
計量模塊的模擬波形為:
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ arith . all;
使用IEEE . STD _ logic _ unsigned . all;
實體季良是
端口(start:在std_logic中;-計費開始信號
fin:在std_logic中;-裏程脈沖信號
stop:在std_logic中;-在行駛過程中等待信號
clk1:在std_logic中;-驅動脈沖
en1,en0:buffer STD _ logic;-計費單價啟用信號
k1,k0:buffer STD _ logic _ vector(3 down to 0);-裏程計數
m1,m0:buffer STD _ logic _ vector(3 down to 0));-等待時間計數
結束季良;
季良的建築rt2是
信號w:整數範圍0到59;-定時範圍0~59
開始
流程(clk1)
開始
如果(clk1 '事件和clk1='1 '),則
如果start='0 ',則
w & lt=0;en 1 & lt;='0';en0 & lt='0';m 1 & lt;="0000";
m0 & lt="0000";k 1 & lt;="0000";k0 & lt="0000";
Elsif stop =' 1 '然後計時開始信號
如果w=59,那麽
w & lt=0;
else w & lt= w+1;
結束if;
如果m0="1001 ",則
m0 & lt="0000";
如果m1="0101 ",則
m 1 & lt;="0000";
else m 1 & lt;= m 1+1;
結束if;
else m0 & lt= m0+1;
結束if;
如果stop='1 ',則en0 & lt='0';
if m 1 & amp;m0 & gt“00000001”然後en 1 & lt;='1';-如果等待時間大於2分鐘,en1被設置為1。
else en 1 & lt;='0';
結束if;
結束if;
Elsefin =' 1 '然後開始計算裏程。
如果k0="1001 "那麽k0 & lt="0000";
如果k1="1001 ",則k 1 & lt;="0000";-日誌範圍0~99
else k 1 & lt;= k 1+1;
結束if;
else k0 & lt= k0+1;
結束if;
如果stop='0 ',則
en 1 & lt;='0';
如果k 1 & amp;k0 & gt那麽“00000001”
en0 & lt='1';-如果裏程大於2km,則en0為1。
else en0 & lt='0';
結束if;
結束if;
結束if;
結束if;
結束進程;
結束rt2
3.控制模塊
該模塊主要是通過計量模塊產生的兩路不同的輸入使能信號en0和en1,選擇輸出各分頻模塊輸出的14hz和13hz的脈沖的過程。該模塊實現了雙脈沖的選擇;最終目標是在收費模塊中計算出行駛過程中不同時間段的價格。
模塊元素如下:
控制模塊框圖
控制模塊的模擬波形為:
源程序如下:
圖書館IEEE
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ arith . all;
使用IEEE . STD _ logic _ unsigned . all;
實體控制是
端口(en0,en1:在std_logic中;-啟用選擇信號
clk _ in 1:in STD _ logic;-14分頻輸入信號
clk_in2:在std_logic中;-13分頻輸入信號
clk _ out:out STD _ logic);-輸出信號
端孔誌;
空之建築rt3是
開始
過程(en0,en1)
開始
Ifen0 =' 1 '然後——實現二選壹的功能。
clk _ out & lt= clk _ in 1;
elsif en1='1 '然後
clk _ out & lt= clk _ in2
結束if;
結束進程;
結束rt3
4.充電模塊
當充電信號start始終處於高電平,即充電狀態時,該模塊根據控制模塊選擇的信號,對不同的單價時段進行充電。即行程在2km以內,累計等待時間小於2min的,起步價為5元;2公裏以外,按每公裏1.4元計費,累計時間超過2min,按每分鐘1.3元計費。C0、c1、c2和c3分別表示費用的顯示。
模塊元素包括:
計費模塊框圖
充電模塊的模擬波形為:
源程序如下:
圖書館IEEE
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ arith . all;
使用IEEE . STD _ logic _ unsigned . all;
齊斐是實體
端口(clk2:在std_logic中;-充電驅動信號
start:在std_logic中;-計費開始信號
c0,c1,c2,C3:buffer STD _ logic _ vector(3 down to 0));
端姬妃;
吉飛的rt4架構是
開始
進程(clk2,啟動)
開始
如果start='0 ',那麽c3 & lt="0000";c2 & lt="0000";c 1 & lt;="0101";c0 & lt="0000";-起步價5元
elsif clk2 '事件,而clk2='1 '則
如果c0="1001 "那麽c0 & lt="0000";
如果c1="1001 ",則c 1 & lt;="0000";
如果c2="1001 ",那麽c2 & lt="0000";
如果c3="1001 ",那麽c3 & lt="0000";-估價範圍為0~999.9
else c3 & lt= C3+1;
結束if;
else c2 & lt= C2+1;
結束if;
else c 1 & lt;= c 1+1;
結束if;
else c0 & lt= c0+1;
結束if;
結束if;
結束進程;
結束rt4
5.顯示組件
顯示模塊完成定價、計時和日誌數據的顯示。計費數據送到顯示模塊進行解碼,最後送到相應的以100元、10元、元、角為單位的數碼管進行顯示。定時數據送到顯示模塊解碼,最後送到除法單元對應的數碼管顯示。日誌數據送到顯示模塊解碼,最後送到以km為單位的數碼管顯示。
模塊元素包括:
顯示模塊框圖
源程序如下:
圖書館ieee
使用IEEE . STD _ logic _ 1164 . all;
使用IEEE . STD _ logic _ unsigned . all;-定義庫包
定義實體。
端口(
clk_scan:在std_logic中;-掃描時鐘信號端口設置
c3,c2,c1,c0:在std_logic_vector(3 downto 0)中;-總成本輸入端口
k0,k 1:in STD _ logic _ vector(3 down to 0);-裏程輸入端口
m0,m 1:in STD _ logic _ vector(3 down to 0);-等待時間輸入端口
sel:out STD _ logic _ vector(2 down to 0);-控制掃描信號輸出口的數碼管位置選擇信號。
led:out STD _ logic _ vector(6 down to 0);-數碼管的控制端口
led _ DP:out STD _ logic-數碼管的小數點輸出端口。
);
結束石現;
石現的建築rt5是
信號段:STD _ logic _ vector(6 down to 0);-數字顯示管中間變量
信號Shu ju:STD _ logic _ vector(3 down to 0);-選擇輸入端的中間變量。
信號CNT:STD _ logic _ vector(2 down to 0);-控制數碼管的中間變量
信號小電:std _ logic-小數點中間變量
開始
process(clk _ scan)-啟動進程。
開始
如果clk_scan事件和clk_scan='1 '則
cnt & lt= CNT+1;-每次掃描信號有壹個上升沿,實現1掃描。
結束if;
結束進程;-結束這個過程
過程(cnt) -啟動過程(選擇掃描顯示數碼管)
開始
掃描過程中給每個數碼管賦值。
當" 000"= >時;舒居& lt= c0
當" 001"= >時;舒居& lt= c 1;
當" 010"= >時;舒居& lt= c2
當" 011"= >舒居& lt= c3
當" 100"= >舒居& lt= k0
當" 101"= >舒居& lt= k 1;
當" 110"= >舒居& lt= m0
當" 111"= >舒居& lt= m 1;
當別人= & gtnull
結束案例;
if (cnt="001 "或cnt="110 ")
然後小電& lt='1';-以裏程和總成本為單位顯示小數點。
else小電& lt='0';
結束if;
結束進程;-結束這個過程
進程(shuju) -啟動進程(解碼顯示)
開始
案例樹居是
當" 0000"= >時;段& lt="0111111";- 0
當" 0001"= >時;段& lt="0000110";- 1
當" 0010"= >時;段& lt="1011011";- 2
當" 0011"= >時;段& lt="1001111";- 3
當" 0100"= >段& lt="1100110";- 4
當" 0101"= >段& lt="1101101";- 5
當" 0110"= >段& lt="1111101";- 6
當" 0111"= >時;段& lt="0000111";- 7
當" 1000"= >段& lt="1111111";- 8
當" 1001"= >段& lt="1101111";- 9
當別人= & gtnull
結束案例;
結束進程;
sel & lt= cnt
led & lt=段;
led _ dp & lt=小電;
結束rt5
二、課程設計工作記錄:
包括:設計步驟及時間安排,調試步驟及時間安排,項目完成結果說明。
2.項目完成結果描述:
這個計價器可以實現的起步價是5元;實現了實驗所需的單價1 km。行駛距離大於2km時,按每公裏1.4元計費,並可顯示裏程和總費用。行駛6公裏,等待4分鐘,費用顯示15.8元。而計算公式的總費用=起步費用+(裏程-2km) *裏程單價+等待時間*以此類推;即15.8 = 5+(6-2)* 1.4+4 * 1.3。實驗結果與理論結果完全壹致,實驗設計是成功的。