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 综合练习 电子钟的实现_第1张图片

主模块程序:

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 综合练习 电子钟的实现_第2张图片

主要部分电路图(老师设计绘制):

Verilog 综合练习 电子钟的实现_第3张图片Verilog 综合练习 电子钟的实现_第4张图片

 

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

 

 

 

 

你可能感兴趣的:(Verilog 综合练习 电子钟的实现)