📄 stopwatch.v
字号:
`timescale 1ns / 100ps
module StopWatch(Mode,Clk4096Hz,Clk100HzCE,StartPauseKey,HoldResetKey,GlbReset,StopWatch);
input Clk4096Hz,Clk100HzCE,StartPauseKey,HoldResetKey,GlbReset;
input [1:0] Mode;
output [31:0]StopWatch;
//variable
wire Running,Holding; //state
wire Reset,ClearCounter; //Reset for counters
reg [27:0]HoldCounter; //Temp variable to hold the Counter
//27---22 21---15 14---8 7----0
//SWHour SWMin SWSec SWPer
wire RefreshHold;
wire [5:0]SWHour; //Counters of each part
wire [6:0]SWMin,SWSec;
wire [7:0]SWPer;
wire ClkPer,ClkSec,ClkMin,ClkHour; // Clock pulse of each part
//if is current mode allow key in,
wire IsThisMode=(Mode==2'b01);
wire StartPause=(IsThisMode)?StartPauseKey:0;
wire HoldReset=(IsThisMode)?HoldResetKey:0;
assign Reset=GlbReset & ClearCounter;
//output
assign StopWatch=(Holding)?
{2'b00,HoldCounter[27:22],1'b0,HoldCounter[21:15],1'b0,HoldCounter[14:8],HoldCounter[7:0]}
:{2'b00,SWHour,1'b0,SWMin,1'b0,SWSec,SWPer};
//state part
StopWatchCtrl U_Control
(.StartPause(StartPause),.HoldReset(HoldReset),
.Clk(Clk4096Hz),.CE(Clk100HzCE),.Reset(GlbReset),
.Running(Running),.Holding(Holding),
.RefreshHold(RefreshHold),.ClearCounter(ClearCounter));
//refresh hold Counter//
always @(negedge GlbReset or posedge RefreshHold)
if(!GlbReset) HoldCounter<=0;
else HoldCounter<={SWHour,SWMin,SWSec,SWPer};
//counter part
StopWatchCount U_StopWatchCount(.CE(Running & Clk100HzCE),.Clk(Clk4096Hz),.Reset(ClearCounter),
.SWHour(SWHour),.SWMin(SWMin),.SWPer(SWPer),.SWSec(SWSec));
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -