西安交通大學 馬麗媛
番茄工作法是一種簡單易行、更加微觀的時間管理方法,有助于提高工作效率,同時保證充足的休息。本文基于Xilinx公司的EGO1平臺,利用現場可編程門陣列FPGA芯片和硬件描述語言Verilog編程設計了一個番茄鐘,具有可設定和調節番茄時間、控制啟停、狀態切換、閃爍提醒、通用時鐘等多種功能,為番茄工作法的實現提供了一條切實可行的解決途徑。
隨著現代社會的飛速發展,勞動強度和工作任務也在不斷加大,如何充分利用和管理時間,提高工作效率的同時保證充足的休息是人們面臨的一個實際問題,為此,番茄工作法被提出并為越來越多的人所接受。
番茄工作法是一種簡單易行、更加微觀的時間管理方法。利用它可將任務分解,設定一個番茄時間,在番茄時間內專注工作,中途不允許做任何與該任務無關的事,直到番茄鐘響起,然后在紙上畫一個記號,如此視作種一個“番茄”;之后設定一個番茄休息時間,短暫休息一下,哪怕工作沒有完成,也要定時休息,然后再進入下一個番茄時間。結束一天的工作后,根據番茄記錄對當日的工作學習情況進行復盤。
可見,番茄工作法提高了注意力,減少了中斷,可以增強決策意識,精確地保質保量改進工作學習流程,對日常的時間管理提供了很大幫助。本文根據番茄工作法的特點和功能要求,基于Xilinx公司生產的Artix-7系列現場可編程門陣列(Field Programmable Gate Array,FPGA)芯片XC7A35T-1CSG324C以及EGO1開發平臺、利用Verilog硬件描述語言編程設計了一款簡便、實用的番茄鐘,為實現番茄工作法提供了便利。
根據番茄工作法,本文設計的番茄鐘可實現25min和5min兩種倒計時。其中25min主要用于定時工作學習,5min用于定時休息。根據用戶需要也可通過調節時、分、秒、清零等按鍵自行設定其它番茄時間;25min倒計時結束,系統會自動轉為5min倒計時狀態。25min與5min可實現循環倒計時,也可通過start_stop和load按鍵分別控制時鐘的開始/暫停、狀態切換以及置數;每次倒計時至全零狀態時,數碼管閃爍15s用于提示前一階段的結束,并能自動切換至下一初值狀態;將一個“25min+5min”視為一個番茄周期,可記錄并顯示番茄周期數,供用戶總結當天的工作學習情況。此外,系統還設計了通用的時鐘功能,亦可作為正常的時鐘使用。

圖1 番茄鐘的系統結構
整個系統采用自頂向下的層次化設計方法,頂層模塊調用分頻、開關消抖、有限狀態機及計時、動態顯示模塊以實現復雜的數字電路設計。系統總體結構如圖1所示,其中,最左側的第一級為一個100MHz的分頻模塊,經分頻后分別得到秒脈沖信號、用于顯示閃爍控制的2Hz時鐘信號、用于按鍵消抖的500Hz時鐘信號等。此后的第2級為5個按鍵的消抖模塊,有效按鍵輸出給后續第3級的狀態機和計數模塊,最右側第4級為動態顯示模塊,其輸出連接到8個數碼管的段和位,用于顯示結果。
系統時鐘為100MHz,分頻模塊利用計數器分頻后分別得到1Hz、2Hz等不同頻率的信號供后續電路使用。按鍵消抖采用延時的方法,延時后當輸入的按鍵電平與之前電平一致時,判定為有效按鍵。
該模塊是整個設計的核心,狀態轉換和倒計時、時間調節、番茄數的累計等都由該模塊完成。根據所要完成的功能,整個系統需要處理9種狀態,且相互之間有著復雜的轉換關系。若采用畫流程圖的思路設計,會很快陷入困境。因此,本文采用有限狀態機來描述對象,邏輯清晰,表達力強,且利于系統的結構化和模塊封裝。所謂狀態機是指一個系統或機器,由若干個狀態構成,觸發這些狀態會發生狀態相互轉移的事件。由于狀態往往是有限的,所以狀態機又稱為有限狀態機,它是一個非常有用的模型,可以模擬世界上大部分的事物。
有限狀態機在任意時刻都處于有限狀態集合中的某一狀態。當其被觸發時,將從當前狀態轉換到另一個狀態,或者仍然保持在當前狀態。任何一個有限狀態機都可以用狀態轉換圖或狀態轉換表來描述。本文根據番茄鐘的功能,列出了9種狀態及其相互之間的轉換關系,如表1所示,其中包括:25min初態、倒計時25min開始、25min倒計時暫停、25min倒計時結束時閃爍提醒、5min初態、倒計時5min開始、5min倒計時暫停、5min倒計時結束時閃爍提醒、以及全0狀態。
根據表1,對狀態進行編碼,然后采用兩段式描述方法編寫程序。如圖2所示,先使用一個always塊(圖(a))描述狀態的轉移關系,如現態cstate處于S1狀態時,若觸發條件為開始/暫停按鍵key1,則轉向次態(nstate)S2,否則維持;然后,再用另一個always塊(圖(b))描述狀態轉移的條件和狀態輸出,如現態為S1時,計數使能端cnt_en置為1,置數端置為0。以此類推,實現9個狀態及其關系的描述。

表1 狀態轉換表

圖2 狀態機程序設計例程
系統用8個數碼管構成動態掃描的方式顯示結果。它接收計數模塊送來的時鐘、番茄數等信號,編程實現動態掃描數碼管的位、查段碼表并輸出段碼的方式將信號輸出給數碼管。時間顯示在右側數碼管上,番茄數顯示在左側數碼管上。
結論:本文基于FPGA、利用層次化的編程方法和有限狀態機的設計思想,實現了一個番茄鐘。產品具有可設定和調節番茄時間、控制啟停、狀態切換、閃爍提醒、通用時鐘等多種功能,便于日常學習工作的時間管理,可滿足番茄工作法的市場需求。