【文章內(nèi)容簡(jiǎn)介】
begin if(distance[3:0]==9)//判斷 distance的低四位計(jì)到了 9沒有 begin distance[3:0]=439。d0。//計(jì)到 9清零 if(distance[7:4]==9) //判斷 distance的高四位計(jì)到了 9沒有 distance[7:4]=439。d0。//計(jì)到 9清零 else distance[7:4]= distance[7:4]+139。d1。 // distance的高四位沒有計(jì)到 9的時(shí)候加一 end else distance[3:0]=distance[3:0]+139。d1。 // distance的低四位沒有計(jì)到 9的時(shí)候加一 end//end start end//end always //*產(chǎn)生 distance_enable信號(hào) *// always@(posedge clk0 or negedge reset) begin if(!reset) begin distance_enable=139。d0。//復(fù)位 end else if(distance839。d2)// 大于公里三的時(shí)候 begin distance_enable=139。d1。//輸出 distance_enable信號(hào) end end//end always endmodule//結(jié)束計(jì)程模塊 計(jì)程模塊的仿真結(jié)果: 從波形圖可以看出在時(shí)鐘的控制下,當(dāng) reset 為高電平且 start 為高電平的時(shí)候 distance 開始計(jì)數(shù),當(dāng)計(jì)到大于三的時(shí)候輸出了 distancedistance_enable為高電平。 計(jì)時(shí)模塊: 計(jì)時(shí)模塊的框圖: c l k 0r e s e ts ta r tti m e _ e n a b l es [7 ..0 ]m [7 ..0 ]tm :u 4 此模塊用于計(jì)算停車等待的時(shí)間。在出租車行進(jìn)中,如果車輛停止等待,計(jì)數(shù)器則在 1Hz信號(hào) clk的上升沿進(jìn)行加計(jì)數(shù),每 60次產(chǎn)生進(jìn)位脈沖使分鐘計(jì)數(shù)器位進(jìn)行加計(jì)數(shù),當(dāng)累計(jì)等待時(shí)間超過 2( 不包括 2分鐘 ) 分鐘時(shí),輸出標(biāo)志 time_enable正脈沖信號(hào)。 計(jì)時(shí)模塊的 VerilogHDL源代碼: module tm(clk0,reset,start,s,m,time_enable)。// 端口的定義 input clk0,reset,start。 output [7:0] s。//輸出的秒 output [7:0] m。//輸出的分 output time_enable。//輸出的控制計(jì)費(fèi)的信號(hào) reg [7:0] s。 reg [7:0] m。 wire time_enable。 always@(posedge clk0 or negedge reset)//異步復(fù)位 begin if(!reset)//低電平有效 begin //復(fù)位 s=839。d0。 m=839。d0。 end else if(!start)//start 信號(hào)低電平有效 begin if(s[3:0]==9)// 秒的低四位是 9 begin s[3:0]=439。d0。//清零 if(s[7:4]==5) // 秒的高四位是 5 begin s[7:4]=439。d0。 //清零 if(m[3:0]==9) // 分的低四位是 9 begin m[3:0]=439。d0。 //清零 if(m[7:4]==9) // 分的高四位是 9 m[7:4]=439。d0。 //清零 else m[7:4]=m[7:4]+139。d1。 // 分的高四位不是 9加一 end else m[3:0]=m[3:0]+139。d1。 //分的低四位不是 9加一 end else s[7:4]=s[7:4]+139。d1。 // 秒的高四位不是 5加一 end else s[3:0]=s[3:0]+139。d1。 //秒的低四位不是 9加 一 end//end always end assign time_enable=((m[7:0]839。d2)amp。amp。(s[7:0]==839。d0))?139。d1:139。d0。 //產(chǎn)生 time_enable信號(hào)。 endmodule//結(jié)束計(jì)時(shí)模塊 計(jì)時(shí)模塊的仿真結(jié)果: 兩分鐘之內(nèi)(包括兩分鐘)的仿真結(jié)果如下所示: 從波形圖可以看出在 clk的控制下當(dāng) start為低電平 reset為高電平的 時(shí)候時(shí)間計(jì)數(shù), time_enable為低電平。 兩分鐘之外(不包括兩分鐘)的仿真結(jié)果如下所示: 從波形圖可以看出在 clk的控制下當(dāng) start為低電平 reset為高電平的時(shí)候時(shí)間計(jì)數(shù),當(dāng)時(shí)間大于二分鐘的時(shí)候, time_enable為輸出高電平。 控制模塊: 控制模塊的框圖: d i s t a n c e _ e n a b l es t a r tt i m e _ e n a b l es e l e c t _ c l kc o n t r o l : u 3 控制模塊用于為計(jì)費(fèi)模塊提供時(shí)鐘,當(dāng) start高電平的時(shí)候選擇公里計(jì)費(fèi),輸出的時(shí)鐘信號(hào)為 distance_enable,當(dāng) start低電平的時(shí)候選擇時(shí)間計(jì)費(fèi),輸出的時(shí) 鐘信號(hào)為 time_enable。 控制模塊的 VerilogHDL源代碼: module control(start,distance_enable,time_enable,select_clk)。 input start,distance_enable,time_enable。 output select_clk。//輸出選擇的時(shí)鐘信號(hào) wire select_clk。 //*當(dāng) start高電平的時(shí)候選擇公里計(jì)費(fèi),輸出的時(shí)鐘信號(hào) 為 distance_enable,當(dāng) start低電平的時(shí)候選擇時(shí)間計(jì)費(fèi),輸出的時(shí)鐘信號(hào)為 time_enable*// assign select_clk=start?distance_enable:time_enable。 endmodule//結(jié)束控制模塊 控制模塊的仿真結(jié)果: ( 1)公里計(jì)費(fèi)的仿真結(jié)果如下所示: 從波形圖可以看出當(dāng) start為高電平的時(shí)候輸出的信號(hào)是 distance_enable。 ( 2)時(shí)間計(jì)費(fèi)的仿真結(jié)果如下所示: 從波形圖可以看出當(dāng) start為低電平的 時(shí)候輸出的信號(hào)是 time_enable。 計(jì)費(fèi)模塊 : 計(jì)費(fèi)模塊的框圖: cl k 0r e se tse l e ct _ cl km o n e y [7 ..0 ]m o n e y :u 5 費(fèi)用計(jì)數(shù)器模塊用于出租車啟動(dòng)后,根據(jù)行駛路程和等待時(shí)間計(jì)算費(fèi)用。當(dāng)出租車停車時(shí),時(shí)鐘 select_clk用于將費(fèi)用計(jì)數(shù)器復(fù)位為起步價(jià) ;當(dāng)車處于行駛狀態(tài)且滿 3公里時(shí), select_clk信號(hào)選擇 distans_enable,此后路程每滿 1公里,費(fèi)用計(jì)數(shù)器加 1元;當(dāng)出租車處于停止等待狀態(tài)且時(shí)鐘滿 2分鐘時(shí),select_clk信號(hào)選擇 time_enable信號(hào),時(shí)間每滿 1分鐘,費(fèi)用計(jì)數(shù) 器加 1元。 計(jì)費(fèi)模塊的 VerilogHDL