本帖最后由 夏沫沫1112 于 2012-7-11 22:58 编辑
出租车计价器的计费过程为:
(1)系统上电显示自己的学号(8位:1005XXXX);
(2)按下并松开S1(按下时S1=0,松开时S1=1),启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从6开始计算。在行驶状态,计程器开始累加计数。当路程超过3km后,计费器以每1元 / km累加,实时显示里程和费用;
(3)出租车到达目的地停止后,按下并松开S2,停止计费器,显示总里程和总费用;
(4)按下并松开S3则计费器清零。
(5)重复(2)~(4)。
-----------------------------------------------------------------------------
以下是里程和计费模块
module jiliang(clk,s3,s1,s2,distance,fee);
//端口的定义
input clk,s1,s2,s3;
output [15:0] distance,fee;// 输出的公里,费用
reg [15:0] distance,fee;
reg start;
always@(posedge[/email] clk or negedge s3 or negedge s1 or negedge s2)//异步启动,停止,清零
begin
if(!s1)//启动
start<=1'd1;
if(!s2)// 停止
start<=1'd0;
if(!s3)//清零
start<=1'd0;
end
[email=always@(posedge]always@(posedge[/email] clk or negedge s3)
begin
if(!s3)//清零
distance<=15'd0;
else if(start)// start 高电平有效
begin
if(distance[3:0]==9)//判断distance的个位计到了9没有
begin
distance[3:0]<=4'd0;//计到9清零
if(distance[7:4]==9) //判断distance的十位计到了9没有
begin
distance[7:4]<=4'd0;//计到9清零
if(distance[11:8]==9)//判断distance的百位计到了9没有
begin
distance[11:8]<=4'd0;//计到9清零
if(distance[15:12]==9)//判断distance的千位计到了9没有
distance[15:12]<=4'd0;//计到9清零
else distance[15:12]<= distance[15:12]+1'd1;// distance的千位没有计到9的时候加一
end
else distance[11:8]<= distance[11:8]+1'd1;
// distance的百位没有计到9的时候加一
end
else distance[7:4]<= distance[7:4]+1'd1;
// distance的十位没有计到9的时候加一
end
else distance[3:0]<=distance[3:0]+1'd1;
// distance的个位没有计到9的时候加一
end//end start
end//end always
//计费模块//
always@(posedge[/email] clk or negedge s1 or negedge s3)//异步启动,清零
begin
if(!s3)//清零
begin
fee<=15'd0;
end
else if(!s1)//启动
begin
fee<=15'd6;//起步为六元
end
else if(distance>15'd2)//大于公里三的时候
begin
if(fee[3:0]==4'd9)//费用的个位是不是计到了9
begin
fee[3:0]<=4'd0;//计到9清零
if(fee[7:4]==4'd9)// 费用的十位是不是计到了9
begin
fee[7:4]<=4'd0; //计到9清零
if(fee[11:8]==4'd9)// 费用的百位是不是计到了9
begin
fee[11:8]<=4'd0; //计到9清零
if(fee[15:12]==4'd9)// 费用的千位是不是计到了9
fee[15:12]<=4'd0; //计到9清零
else fee[15:12]<=fee[15:12]+1'd1;// 费用的千位没有计到9加1
end
else fee[11:8]<=fee[7:4]+1'd1;// 费用的百位没有计到9加1
end
else fee[7:4]<=fee[7:4]+1'd1;// 费用的十位没有计到9加1
end
else fee[3:0]<=fee[3:0]+1'd1;// 费用的个位没有计到9加1
end//end begin
end//end always
endmodule//结束计量模块
--------------------------------------------------------------------------------------------------------仿真结果为什么是这样?怎么改 |