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