基于FPGA的出租车简易计数器Word下载.docx
《基于FPGA的出租车简易计数器Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的出租车简易计数器Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
3.当里程数大于3km时,每km增加2元。
4.里程数精确到0.1km,价格精确到0.1元,价格和里程数用数码管显示。
2、顶层划分
管脚功能:
管脚名称
PIN
功能
CLK
input
输入时钟50M
rst
复位信号
start
计价启动/暂停/停止信号
Led1
output
里程数信号十位
Led2
里程数信号个位
Led3
里程数信号小数点后一位
Led4
价格信号十位
Led5
价格信号个位
Led6
价格信号小数点后一位
3、子模块描述
1、分频模块
<
1>
功能描述:
通过分频,产生一个10hz的分频时钟信号。
<
2>
原时钟信号
counter
计数信号
fclk
分频时钟信号
即模拟车轮每转动一圈所用时间
3>
实现原理:
当复位信号有效时,counter,fclk清零,当复位信号无效且计价开始信号有效时,counter开始自加,每加到2500000,fclk取反,生成一个1hz的时钟信号,即模拟车轮每转动一圈产生脉冲。
4>
代码:
modulefclk(CLK,rst,fclk);
inputCLK,rst;
outputfclk;
reg[24:
0]counter;
regfclk;
always@(posedgeCLKornegedgerst)
begin
if(!
rst)
fclk<
=1'
d0;
counter<
=25'
end
else
=counter+25'
d1;
if(counter==25'
d2500000)
=~fclk;
end
endmodule
2、计数模块
功能描述:
当fclk上升沿来临时,count自加1,当count加到25次时,即出租车行驶0.1km时(以车轮转一周为2m计算),标志信号load取反。
管脚功能:
计数器时钟信号
count
load
计数结束标志信号
当复位信号有效时,count,load清零;
当复位信号无效且计价开始信号有效时,count开始自加,每加到50,load<
=~load.
代码:
modulecounter(fclk,rst,start,load);
inputfclk,rst,start;
outputload;
regload;
reg[4:
0]count;
always@(posedgefclkornegedgerst)
load<
count<
=5'
else
=count+5'
if(start==1'
d1)
if(count==5'
d24)
load<
=~load;
endmodule
3、计价器模块
记录产生计价数据和里程数数据。
计数标志信号
Input
journey[9:
0]
Output
里程数信号
price[9:
价格输出信号
当复位信号有效时,count,load,journey,price清零;
当复位信号无效且计价开始信号有效时,load信号每经过一个周期,里程数自加0.1km,然后判断里程数与3km比较,若里程数小于3km,则价格信号price为7.0,当里程数大于3km,则价格信号price为70+2*(里程数-30)。
moduleprice(start,rst,load,journey,price);
inputstart,rst,load;
output[9:
0]journey,price;
reg[9:
0]cnt;
always@(posedgeloadornegedgerst)
cnt<
=10'
journey<
price<
=cnt+10'
price<
d70;
=cnt;
if(journey>
10'
d29)
=price+10'
d2;
endmodule
4、数码管显示模块
用数码管显示里程数和价格信号。
计价开始信号
在rst或价格信号或里程数信号变化时,将数码管的译码数据存入一个10位寄存器中,当复位信号有效时,数码管清零显示;
当复位信号无效时,将journey的百位给led1,并调用数码管显示出来,同理将journey个位和小数点后一位也调用显示,price同理。
module
led(journey,price,CLK,rst,start,led1,led2,led3,led4,led5,led6)
input[9:
inputrst,start,CLK;
output[6:
0]led1,led2,led3,led4,led5,led6;
reg[6:
0]LED[9:
0];
reg[3:
0]number[5:
always@(posedgeCLKornegedgerst)
begin
number[5]<
=journey/100;
number[4]<
=(journey%100)/10;
number[3]<
=journey%10;
number[2]<
=price/100;
number[1]<
=(price%100)/10;
number[0]<
=price%10;
rst)
led1<
=7'
b1000000;
led2<
led3<
led4<
led5<
led6<
begin
case(number[0])
4'
d0:
led6<
=7'
d1:
b1111001;
4'
d2:
b0100100;
d3:
b0110000;
d4:
b0011001;
d5:
b0010010;
d6:
b0000010;
d7:
b1111000;
d8:
b0000000;
d9:
b0010000;
default:
led6<
endcase
case(number[1])
led5<
led5<
case(number[2])
led4<
led4<
case(number[3])
led3<
led3<
case(number[4])
led2<
led2<
case(number[5])
led1<
led1<
end