`timescale 1ns / 1ps
//记录里程数
module jicheng(clk,start,reset,distance,distance_enable); //端口的定义
input clk,start,reset;
output [7:0] distance;// 输出的公里
reg [7:0] distance;
output distance_enable;//控制计费的公里信号
reg distance_enable;
always@(posedge clk or negedge reset)//异步复位
begin
if(!reset)//低电平复位
begin
distance<=8'd0;
end
else if(start)// start 高电平有效
begin
if(distance[3:0]==9)//判断 distance 的低四位计到 了 9 没有
begin
distance[3:0]<=4'd0;//计到 9 清零
if (distance[7:4] ==9) //判断 di stance 的高四位计到了 9 没有
distance [7:4] <=4'd0;//计到9清零
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
//产生distance_enable 信号
always@(posedge clk or negedge reset)
begin
if (reset)
begin
distance_enable<=1'd0; // 复位
end
else
if(distance>8'd2)//大于公里三的时候
begin
distance_enable<=1'd1;//输出 distance_enable 信号
end
end//end always
endmodule//结束计程模块
//测试模块是:
`timescale 1ns / 1ps
//计程模块测试
module jicheng_test;
// Inputs
reg clk;
reg start;
reg reset;
// Outputs
wire [7:0] distance;
wire distance_enable;
always #500 clk<=~clk;
initial begin
// Initialize Inputs
clk = 0;
start = 0;
reset = 1;
#100 start=1;
#100000 $stop;
end
jicheng jicheng(.clk(clk),.reset(reset),.start(start),.distance(distance),.distance_enable(distance_enable));
endmodule
激励信号给的不对
1.reset 信号不完整,这个信号应该是低有效,需要有一段大于时钟周期1000的低电平,最后一直是高电平。
2.start 的时间也太短了,也需要大于1000
3.两段代码中 reset 信号不一致,应该和激励信号一致,都是低电平有效