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