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 综合练习 电子钟的实现】主模块程序:
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
编译逻辑仿真:
文章图片
主要部分电路图(老师设计绘制):
文章图片
文章图片
最终实现12小时制电子钟,包含复位校时功能。
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 科塔德综合征
- Python基础|Python基础 - 练习1
- 呼吸练习心得
- 2018-04-16动画练习作业
- 一组水彩小练习
- 《简社》绝句练习之九
- 20180322【w4复盘日志】
- 暑期综合症
- 礼仪是一门综合应用学科