赞
踩
(1)学习数码管动态扫描方法,进一步熟悉模块调用的方法,锻炼编程设计数字系统的能力。
(2)掌握灵活运用Verilog HDL语言进行各种描述与建模的技巧和方法。
(1)分频模块:因出租车计费器模拟以秒为单位,即分频1秒产生一个clk_out,控制其他模块工作。
(2)计程模块:用于根据有效的单位时间、速度来增加相应的里程数。
(3)出租车等红绿灯模块:用于进行等红绿灯时的计时,若为10秒,产生一个time_enable信号控制计费器是否进行等红绿灯计费。
(4)计费模块:根据传入的里程来计算相应的费用,以及根据time_enable信号判断是否增加额外的等红绿灯计费。
(5)数码管刷新模块:用于刷新数码管,以62.5Hz为刷新率保证人视觉上感受不到数码管的闪烁。
(6)二进制转BCD码模块:用于将传入的里程、费用转换成BCD码以便于数码管显示。
(7)数码管显示模块:根据相应的控制信号来将里程或费用转换成位选、段选信号来实现数码管的实现。
程序模块关系
(1)分频模块的分频1s有效的时钟信号控制计程模块、出租车等红绿灯模块、计费模块工作。
(2)计程模块的里程数用于计费模块的费用计算。
(3)出租车等红绿灯模块的time_enable用于控制计费模块是否产生出租车等红绿灯额外费用。
(4)数码管刷新模块产生的位选信号用于控制数码管显示。
(5)二进制转BCD码模块产生的里程BCD码、费用BCD码用于数码管显示。
module sy_last_code(reset, clk_M, start, pause, waitL, speedup, d_m, Seg, AN); input reset; input clk_M; input start; input pause; input waitL; input [1:0] speedup; input d_m; //段选 output [7:0] Seg; //位选 output [3:0] AN; wire [9:0] fee_before; wire [9:0] distance_before; wire [15:0] distance_b; wire [15:0] fee_b; wire time_enable; wire clk_out; wire [1:0] Bit_Sel; Fdiv u1(reset, clk_M, clk_out); // 计程 Distance u2(clk_out, reset, start, speedup, waitL, pause, distance_before); // 等待红绿灯时间 Time u3(clk_out, reset, pause, waitL, time_enable); // 计费 Fee u4(clk_out, reset, waitL, pause, time_enable, distance_before, start, fee_before); // 分频刷新数码管 Delay_4ms u5(clk_M, Bit_Sel); // 二进制转换为BCD码 Binary u6(distance_before, distance_b); Binary u7(fee_before, fee_b); // 显示数码管 Smg u8(d_m, fee_b, distance_b, Bit_Sel, Seg, AN); endmodule //分频模块 // 1s module Fdiv( input wire reset, input wire clk_M, output reg clk_out ); // 定义计数器 reg [31:0] counter; initial begin counter = 32'd0; end initial begin clk_out = 0; end always @(posedge reset or posedge clk_M) begin if(reset)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。