秒表电路设计
wire [3:0] ge,shi;
fenpin inst (
.CLK_50M(CLK),
always @ (A)
//8段码译码模块
begin
case(A)
0: LED7<=8'b00111111;
1: LED7<=8'b00000110;
2: LED7<=8'b01011011;
3: LED7<=8'b01001111;
4: LED7<=8'b01100110;
5: LED7<=8'b01101101;
知识回顾
分频器电路设计
本讲知识点
掌握层次化系统设计方法 元件例化语句 模块化设计
一、设计任务
采用Verilog HDL语言,设计简 易秒表电路,在数码管上显示结 果。
二、设计原理
采用计数器原理,如果计数器时钟信号是1Hz(基准单位周期为1S),那么计 数结果即可表示0~59秒,然后采用数码管动态扫描进行译码显示。
end
endmodule
//组合电路之过程,构建进位信号
//当counter=59时,输出进位标志为1 //否则,输出进位标志为0
3.动态扫描显示模块
,
•【例3-16】秒表显示模块设计
•
module display (CLK,SEC_GE,SEC_SHI,LED7_CS,LED7);
•
input
// 输入时钟上升沿
•
begin
•
if (counter1==25000000)
//如果计数器等于分频比一半
•
begin
•
counter1<=0;
//分频计数器清0
•
clk1<= ~ clk1;
//clk1hz进行翻转
•
end
•
else counter1<=counter1+1;
//计数器累加
•
end
•
reg address;
•
always @(posedge CLK)
选状态变量
//构建2个数码管对应的2个状态位t;=address+1;
•
end
•
always @(address)
数码管位置和与内容统一
//2选1多路选择器,确定
•
begin
•
if (address) begin A<=SEC_SHI; LED7_CS<='B001; end
设计方案
三、实现过程
分频器模块 计数器模块 动态扫描显示模块 顶层设计(原理图或文本)
1.分频器模块
1Hz 根据系统功能需求,此分频器模块需要实现两个信号分频输出,一个是
的标准秒信号提供基准时钟,另一个是用于数码管动态显示的扫描信号,频率为
1KHz。
,
•【例3-14】分频器设计
• module fenpin(CLK_50M,CLK_1Hz,CLK_1KHz);
always @ (posedge CLK_50M ) begin if (counter2==25000) begin counter2<=0; clk1k<= ~ clk1k; end else counter2<=counter2+1; end
assign CLK_1Hz=clk1; assign CLK_1KHz=clk1k; endmodule
//计数器对10取余,提取个位
•
assign SEC_SHI=counter/10;
//对10取整,提取十位
•
always @(posedge CLK or negedge RST )
•
begin
•
if ( ! RST) counter<=0;
//RST=0时,异步清0
•
else if (EN)
// EN=1,同步使能允许计数
•
input CLK_50M;
//输入时钟信号50MHz
•
output CLK_1Hz;
//分频输出信号1Hz
•
output CLK_1KHz;
•
reg clk1,clk1k;
//中间变量clk1
•
reg [24:0] counter1;
•
reg [14:0] counter2;
•
always @ (posedge CLK_50M )
•
begin
•
if ( counter<59 ) counter<=counter+1;
•
else counter<=0;
//否则counter>=9时,清0
•
end
•
end
always @ ( counter )
begin
if (counter==59) COUT<=1;
else
COUT<=0;
//频率为1KHz的扫描信号
CLK;
•
input [3:0] SEC_GE,SEC_SHI;
十位
//输入的秒个位和
•
output [7:0] LED7;
段码
//8位
•
output [2:0] LED7_CS;
//3位位选
•
reg
[2:0] LED7_CS;
•
reg
[7:0] LED7;
•
reg
[3:0] A;
6: LED7<=8'b01111101;
7: LED7<=8'b00000111;
8: LED7<=8'b01111111;
9: LED7<=8'b01101111;
default : LED7<=8'b00000000;
endcase
end
endmodule
4.顶层设计(原理图)
,
4.顶层设计(文本)
•
input CLK,RST,EN;
//时钟、复位和暂停
•
output [3:0] SEC_GE,SEC_SHI;
//秒的个位、十位输出0~9
•
output COUT;
//分钟进位信号
•
reg [5:0] counter;
//定义计数器变量
•
reg COUT;
•
assign SEC_GE=counter %10;
【例3-17】秒表顶层设计代码
module miaobiao_top (CLK,RST,EN,LED7_CS,LED7,COUT);
input CLK,RST,EN; output [7:0] LED7;
//8位段码
output [2:0] LED7_CS;
output COUT;
wire clka, clkb;
// 输入时钟上升沿 //如果计数器等于分频比一半
//分频计数器清0 //clk1khz进行翻转 //计数器累加 //将中间结果向端口输出
2.计数器模块
该模块功能主要是实现0-59的计数,并将计数结果的个位和十位分别输出。
,
•【例3-15】秒表计数器设计
• module cnt60(CLK,RST,EN,SEC_GE,SEC_SHI,COUT);