Verilog|Verilog 综合练习 电子钟的实现

此次试验为我们的一次课程练习,仅供参考。
所用硬件为老师基于MAXll系列EMP240T100C5芯片设计的电路板,包含振荡器、64个发光二极管、按钮,4个七段译码显示器等相关器件。要求编写程序完成电子钟功能。
程序接口:
pin_50, pin_51,未用。
CP,振荡器脉冲输入。RST,Ch,Cm,三个按钮 这里设计为 复位 校时 校分。Hc,未用。
wire [7:0] Sh,Sl,用于控制60个发光二极管显示秒针(硬件上为8×8的行列矩阵)。
wire [3:0] W,用于选择显示4个七段译码显示器(每次只亮一个显示器)。
wire [7:0] ddo,控制七段译码显示器显示的数字。
引脚连接:
Verilog|Verilog 综合练习 电子钟的实现
文章图片

【Verilog|Verilog 综合练习 电子钟的实现】主模块程序:

module Clk ( input pin_50, pin_51, input CP,RST,Ch,Cm,Hc, output wire [7:0] Sh,Sl, output wire [3:0] W, output wire [7:0] ddo ); wire SP,MP,HP,DP; //秒脉冲,分脉冲,时脉冲,天脉冲。 wire [14:0]Q; //振荡器计数,所用振荡器为32768Hz。 wire [5:0]S; //秒计数。 wire [5:0]M; //分计数。 wire [3:0]H; //时计数。 wire [6:0] Hhdo,Hldo,Mhdo,Mldo; //4个七段译码显示器信号。//从振荡器脉冲开始依此分频得到秒、分、时。 Pulse#(15,32768) SecP(CP,RST,1,0,SP,Q); Pulse#(6,60) MinP(SP,RST,1,0,MP,S); Pulse#(6,60) HourP(MP,RST,Cm,Q[13],HP,M); Pulse#(4,12) DayP(HP,RST,Ch,Q[13],DP,H); //将分与时转换为4片七段译码器信号。 LED_7Seg#(1) HH(W[3],CP,H/10,Hhdo); LED_7Seg#(4) HL(W[2],CP,H%10,Hldo); LED_7Seg#(3) MH(W[1],CP,M/10,Mhdo); LED_7Seg#(4) ML(W[0],CP,M%10,Mldo); //根据秒数S置Sh、Sl接通相应的发光二极管。 assign Sh=8'b00000001<<({S[5],S[4],S[3]}); assign Sl=~(8'b00000001<<({S[2],S[1],S[0]})); //按合适频率依此显示各个七段译码显示器。 assign W=4'b0001<<({Q[9],Q[8]}); assign ddo={Q[14]&~W[1]&~W[3],Hhdo+Hldo+Mhdo+Mldo}; endmodule

分频模块:
实现高频脉冲分频,用于得到秒分时。
module Pulse #( parameter W,//寄存器位数 parameter N//进制数 ) ( input OP,//源脉冲 input RS,//复位脉冲 input RV,//校时脉冲 input SP,//秒脉冲 output reg GP,//目的脉冲 output reg[W-1:0]R//源脉冲计数 ); wire TP; assign TP=OP|(~RV&SP); always @(posedge TP or negedge RS) begin if(~RS) begin R<=0; end else begin if(R

七段译码器信号转换模块:
实现个位数七段译码器信号的输出。
module LED_7Seg #( parameter N//所表示的个位数最大所需位数 ) ( input W,//片选信号 input OP,//振荡器脉冲 input [N-1:0]num,//目标个位数 output [6:0]line//该数的七段译码器信号 ); reg [6:0]sig; always @(posedge OP) case (num) 4'd0:sig<=7'b0111111; // 1111110; 4'd1:sig<=7'b0000110; // 0110000; 4'd2:sig<=7'b1011011; // 1101101; 4'd3:sig<=7'b1001111; // 1111001; 4'd4:sig<=7'b1100110; // 0110011; 4'd5:sig<=7'b1101101; // 1011011; 4'd6:sig<=7'b1111101; // 1011111; 4'd7:sig<=7'b0000111; // 1110000; 4'd8:sig<=7'b1111111; // 1111111; 4'd9:sig<=7'b1101111; // 1111011; default:sig<=7'b0; endcase assign line={sig}&{7{W}}; endmodule

编译逻辑仿真:
Verilog|Verilog 综合练习 电子钟的实现
文章图片

主要部分电路图(老师设计绘制):
Verilog|Verilog 综合练习 电子钟的实现
文章图片
Verilog|Verilog 综合练习 电子钟的实现
文章图片


最终实现12小时制电子钟,包含复位校时功能。




    推荐阅读