- 32
- 0
- 约1.05万字
- 约 12页
- 2016-11-27 发布于重庆
- 举报
基于verilog語言的出租车计费器
1时间分频:
module div(clk_50M,clk);// 端口的定义
input clk_50M;// 总的时钟是50M
output clk;//分频后输的时钟
reg clk;
reg [31:0] count;//32位的计数器
always@ (posedge clk_50M )//异步复位
begin
if(count==32d25_000000)// 判断计时器记到了25_000000吗
begin
count=32d0;//计到25_000000计数器清零
clk=~clk;//输出的时钟取反
end//end begin
else count=count+1d1;// 没计到25_000000计数器加一
end//end always
endmodule // 结束分频模块
2速度分频;
module sududiv(op,clk_50M,clk,reset);// 端口的定义
input clk_50M,reset;// 总的时钟是50M
input [2:0] op;
output clk;//分频后输的时钟
reg clk;
reg [31:0] count;//32位的计数器
always@ (posedge clk_50M or negedge reset)//异步复位
begin
if(!reset)
begin
clk=d0;
count=32d0;
end
else
begin
case(op)
3b001:
if(count==32d50_000000)// 判断计时器记到了25_000000吗
begin
count=32d0;//计到25_000000计数器清零
clk=~clk;//输出的时钟取反
end//end begin
else count=count+1d1;// 没计到25_000000计数器加一
3b010:
if(count==32d40_000000)// 判断计时器记到了25_000000吗
begin
count=32d0;//计到25_000000计数器清零
clk=~clk;//输出的时钟取反
end//end begin
else count=count+1d1;// 没计到25_000000计数器加一
3b011:
if(count==32d30_000000)// 判断计时器记到了25_000000吗
begin
count=32d0;//计到25_000000计数器清零
clk=~clk;//输出的时钟取反
end//end begin
else count=count+1d1;// 没计到25_000000计数器加一
default:clk=clk;
endcase
end//
end//end always
endmodule // 结束分频模块
3系统时间计数:
module xttimemokuai(clk,s,m,);// 端口的定义
input clk;
output [7:0] s;//输出的秒
output [7:0] m;//输出的分
reg [7:0] s;
reg [7:0] m;
always@(posedge clk )//异步复位
begin
if(s[3:0]==9)// 秒的低四位是9
begin
s[3:0]=4d0;//清零
if(s[7:4]==5) // 秒的高四位是5
begin
s[7:4]=4d0; //清零
if(m[3:0]==9) // 分的低四位是9
begin
m[3:0]=4d0; //清零
if(m[7:4]==9) // 分的高四位是9
m[7:4]=4d0; //清零
else m[7:4]=m[7:4]+1d1; // 分的高四位不是9加一
end
else m[3:0]=m[3:0]+1d1; //分的低四位不是9加一
end
else s[7:4]=s[7:4]+1d1; // 秒的高四位不是5加一
end
else s[3:0]=s[3:0]+1d1; //秒的低四位不是9加一
原创力文档

文档评论(0)