至簡設計法高效設計 上一節我們描述了明德揚的通用設計方法。在闡述案例過程中,我們畫出了大量的波形圖。有讀者可能會問,在工作中,我們是不是也需要先大量地畫波形圖,再來寫代碼呢? 不是的!工作中,我們要設計的系統更加的復雜,一個模塊的信號也非常地多,如果我們每個模塊都要畫波形圖,這不是明德揚提倡的至簡設計。何況,信號一天,畫出來的波形信號也是相當地多,也容易迷糊當中。 上一節我們畫的波形圖,主要是為了讓讀者更清晰地理解功能、計數器和信號的關系。如果我們牢記明德揚的規則,我們的設計將非常簡單。我們要做的不是波形設計,而是功能設計。 功能設計就是根據功能需求,編寫我們的設計代碼。我們以上一節中的案例4為例,說明什么叫功能設計。 案例4的功能要求是:當收到en=1時,dout間隔1個時鐘后,產生2個時鐘周期的高電平脈沖,并且重復3次。 由題意可知,要對“間隔”和“高電平”個數進行計數,但沒有信號表示“高隔”,為此想出補充一個信號flag_add,用來表示計數區域。間隔時間+高電平時間,得到計數器數3個。 我們看到重復3次這一句話,這就說明還有一個計數器計數重復的次數。自然地想到,每完成一次就加1,一共加3次。得到代碼如下。 在設計計數器0的時候,新增了信號flag_add。那進一步思考,什么時候要產生動作,那就讓flag_add為1。自然,從題意可知,en==1是開始,重復次數完了,那就結束,不用再產生信號。所以flag_add代碼。 最后我們再來設計dout,由題意可知,每次均是間隔1個之后dout變1,2個時鐘之后變0。那用什么來數這個1和2呢?cnt0。綜合起來,就是說cnt0數到1個后,dout變1,數完后變0。 總結:從功能的文字描述中出發,根據功能要求來設計代碼。在設計時,一定要理解清楚信號的因果關系,例如為什么變0,為什么變1,從功能說明中找答案。經常訓練這種思考和設計方式,幾分鐘就能設計出精妙的代碼,而且因果關系、邏輯關系清楚,幾乎不存在出錯的可能,從而寫出所想即所得的代碼。 |