番茄钟设计:基于Xilinx Ego1开发板的计时器介绍?
番茄钟设计:基于Xilinx Ego1开发板的计时器介绍?
番茄钟设计一、总体设计1.番茄工作法简介 番茄工作法由意大利的奇列洛创造。其内容就是:工作25分钟休息5分钟,循环四次后休息15分钟。
许多人觉得高效工作便是长时间低头奋身苦干,然而,意大利人弗朗西斯科·奇列洛在二十世纪九十年代所提出的番茄工作法,将这一认知彻底推翻了。该方法借着短周期的工作同休息相互交替,使得专注力一直维持在高峰状态 。
番茄钟的工作原理
它就是这么一种方法,核心之举在于把任务拆分成为好多好多25分钟时长用于工作的时间段,各个所历之时段结束以后都予歇息5分钟,此等设策是根据涉及人体大脑注意力可以连续保持着长短有定情形之下展开进行的科学探究成果方面得出的呦,像比如说美国所成立的该类心理学会所进行的研究表明了成年人平均在专注上面所能够维持的时间长度处于20分钟至30分钟范围之内啦,当做完四个像是这般的25分钟工作时段以后能够展开一个时长为15分钟至30分钟的较长时间的歇息举措,依照这样儿一种进展的节奏状态就能够做到在持续维持工作效率的同时还能够避免出现疲劳慢慢积聚增加起来的状况了呀。

实际使用之时要预备计时器,还要准备任务清单和记录表这三样工具。于每个25分钟的工作时段当中得完全专注于单一任务,任何突发性的想法或者临时的任务都皆应当被先记录于清单之后再去处理。这样一种结构化的工作方式能够辅助用户去构建起清晰的工作节奏,最为适合那些要进行深度思考的编程、写作等任务 。
硬件设计要点

计时模块是实现番茄钟的硬件基础,通常会采用像是EGO1这样的开发板,并且会用数码管显示。十分关键的一点是要生成精确的秒脉冲信号,而这要借助分频电路,把开发板原本的高频时钟信号转变成1Hz信号。信号的稳定性直接对计时精度起决定作用,所以在进行电路设计时,要特别留意抗干扰 。
部分显示常采用共阳极数码管着,其特性为所有发光二极管的正极予以并联嘞。就在某个数字要显示之际呢,相对应的段位会接收到低电平信号哟。鉴于一组数码管分享控制线路哒情况,系统须要以极快的速度对着各个数码管做循环进行点亮呀,再运用视觉存在暂时留存的那一时段效应去构筑成能进行有效连续展示出的视觉效果状况呀。
状态机设计逻辑
module sec_gen(
input clk, //系统时钟
input sec_en, //25min秒脉冲使能信号
output reg sec_out, //给25min倒计时模块的时钟
output reg sec_con //给5min倒计时模块的时钟
);
reg [25:0] n;
always @(posedge clk or posedge sec_en)begin
if(sec_en)
sec_out<=sec_con;
else
sec_out<=sec_out;
end
always @(posedge clk)
begin
if(n==26'd5000000) //此处将将秒脉冲设置为0.1s了,方便调试
n<=26'd1;
else
n<=(n 26'd1);
end
always @(posedge clk)
begin
if(n==26'd5000000)
sec_con<=~sec_con;
else
sec_con<=sec_con
end
endmodule
番茄钟,从根本上来说,是一个状态机系统,它涵盖了工作计时状态,还有短休息状态,以及长休息状态,另外还有暂停状态。各个状态之间的转换,乃是由计时完成信号或者用户按键触发的。比如说呢,当25分钟的工作计时结束时,系统就会自行切换到5分钟的休息状态;经历四次循环之后,便会进入更长的休息状态。
//25分钟倒计时模块
module timer(
input sec, //秒脉冲信号
input time_rst, //重置
output reg carry_25, //25分钟计时结束信号
output reg [15:0]t //低八位为秒,高八位为分
);
always @(posedge sec or negedge time_rst)begin
if(time_rst)
t<=16'b0010_0101_0000_0000;
//计时满了25min,carry_25拉高,同时将时钟重置为25min
else if(t[15:0]==16'd0)begin
t<=16'b0010_0101_0000_0000;
carry_25<=1'b1;
end
else if(t[11:0]==12'd0)begin
t[11:8]<=4'd9;
t[15:12]<=(t[15:12]-4'd1);
end
else if(t[7:0]==8'd0)begin
t[7:4]<=4'd5;
t[3:0]<=4'd9;
t[11:8]<=(t[11:8]-4'd1);
carry_25<=1'b0;
end
else if(t[3:0]==4'd0)begin
t[3:0]<=4'd9;
t[7:4]<=(t[7:4]-4'd1);
end
else t[3:0]<=(t[3:0]-4'd1);
end
endmodule
此设计类同于平常生活里状态转变的事例,像学生每日于上课,用餐,休息等状态里规律性变换。每一个状态下仅能施行专门操作,状态彼此之间界限清晰。在编程达成时,一般运用状态变量记载当下状态,借由条件判定达成状态转换。
按键防抖处理
机械按键,在接触期间会生成信号抖动,致使单次按压被误当作多次操作。解决办法是添加防抖电路,或者软件防抖算法。硬件防抖是借由RC滤波电路使信号变得平滑,软件防抖就是让系统于检测到按键信号后,延迟10至20毫秒再度展开检测予以确认。
//五分钟等待模块
module time_5(
input sec,//秒脉冲信号
input min5_en, //五分钟等待的使能信号
output reg carry_5 //五分钟计时结束的信号
);
reg [11:0]t;//低八位表示秒,高四位表示分
always @(posedge sec or negedge min5_en)begin
if(!min5_en)begin
t<=16'b0101_0000_0000;
carry_5<=1'b0;
end
else if(t[11:0]==11'd0)begin
t<=16'b0101_0000_0000;
carry_5<=1'b1;
end
else if(t[7:0]==8'd0)begin
t[7:4]<=4'd5;
t[3:0]<=4'd9;
t[11:8]<=(t[11:8]-4'd1);
carry_5<=1'b0;
end
else if(t[3:0]==4'd0)begin
t[3:0]<=4'd9;
t[7:4]<=(t[7:4]-4'd1);
end
else t[3:0]<=(t[3:0]-4'd1);
end
endmodule
以FPGA进行实现这一情况作为例子来讲,能去设计出一个计数器,计数器是在检测到按键出现变化之后才开启开始执行计数这样的操作行为,只有一直都持续达到预先设定好的阈值这种状况,才被认定成为是有效的这样操作。尽管这种处理方式把少量的响应延迟是进行了增加增添,然而可确保针对系统稳定性,免除了借助因为按键抖动从而导致引起的计时错误或者是为了防止那种因存在故障而使得性能出问题导致整个运行时状态变得处于混乱无序这样不佳场景的情形再度发生,使之避免不再出现这样的情况 。
时间管理技巧
把番茄钟使用时,要预先做好任务规划,把复杂任务分解成要在25分钟以内能够完成的各自独立一些的小任务。在每个番茄钟开始之前,要花2到3分钟明确清楚本阶段具体目标,结束之后,要用1到2分钟迅速回顾核查完成质量状态。这样一种具有周期性的回顾机制,对持续改进工作做事方法是有帮助作用的。
有统计数据显示,那些持续使用番茄工作法的人,他们任务完成率平均提升了40%。其关键在于要严格遵守时间框,在工作时段之内,不能去查看邮件,也不能去浏览网页,而休息时间呢,则要完全离开工作的环境去活动身体。像这样一种张弛有度的节奏,具有能有效预防职业倦怠等情况对身体造成不利影响的作用。
//数码管控制模块
module pipe(
input clk, //系统100MHz时钟
input run_stop,
input [15:0]x,
output reg [6:0]a_to_g, //单个数码管的输出信号
output reg [3:0]an //数码管选择信号
);
reg [20:0]clkdiv;
wire [1:0]rank;
reg [3:0]digit;
assign rank=clkdiv[20:19];
initial clkdiv<=21'd0;
//对系统100MHz时钟进行分频,作为数码管的扫描频率
always @(posedge clk or negedge run_stop)begin
if(!run_stop)
clkdiv<=21'd0;
else
clkdiv<=clkdiv 21'd1;
end
always @*begin
if(!run_stop)
an=4'd0;
else
case(rank)
2'd0:an=4'b0001;
2'd1:an=4'b0010;
2'd2:an=4'b0100;
2'd3:an=4'b1000;
endcase
end
always @*
case(rank)
2'd0:digit=x[3:0];
2'd1:digit=x[7:4];
2'd2:digit=x[11:8];
2'd3:digit=x[15:12];
default:digit=4'd0;
endcase
always @*
case(digit)
4'd0:a_to_g=7'b1111110;
4'd1:a_to_g=7'b0110000;
4'd2:a_to_g=7'b1101101;
4'd3:a_to_g=7'b1111001;
4'd4:a_to_g=7'b0110011;
4'd5:a_to_g=7'b1011011;
4'd6:a_to_g=7'b1011111;
4'd7:a_to_g=7'b1110000;
4'd8:a_to_g=7'b1111111;
4'd9:a_to_g=7'b1111011;
default:a_to_g=7'b1111110;
endcase
endmodule
实际应用场景
把番茄钟运用到软件开发领域不少团队会把每日站会、代码审查等固定活动和其结合从而达成稳定工作韵律特别贴合从事代码编程或是设计工作、研究人员等这类需高度专注 的知识工种以及把这个方式用上教育方面后还被有些采用类似模式状况 安排教室授课的某些学校给进行应用了 。
尤其受这种方法益处的是远程工作者,此方法会助力建立明晰的工作跟休息界限。实际案例有所呈现,在家进行办公的程序员于启用番茄钟之后,每日有效的编码时长从三到四小时提高至六到七小时,与此同时,因过度开展工作所引发的诸如眼睛产生疲劳、颈椎出现不适之类的问题显著减少。
你运用番茄工作法历经了多久时长呢,于提升专注力层面拥有何种独特经验,欢迎在评论区域予以分享,要是觉着本文具备效用请进行点赞给予支持!
