淺淡邏輯設(shè)計的學(xué)習(xí)(三)
入門
本文引用地址:http://cafeforensic.com/article/265059.htm結(jié)合一兩個小項(xiàng)目把上面所說的事情都做好后,差不多就可以進(jìn)入入門的階段了(要求稍微嚴(yán)格了一點(diǎn)點(diǎn),呵呵)。
入門階段要學(xué)的有:設(shè)計時序;理解約束的原理及如何加約束。
先談?wù)勗O(shè)計時序。
設(shè)計時序是進(jìn)行邏輯設(shè)計的基本要求:時序是設(shè)計出來的,不是仿出來的,更不是湊出來的。
很多人在做邏輯設(shè)計時喜歡一上來就狂寫代碼,寫到一半后發(fā)現(xiàn)信號間的時序出問題了,只好推倒重來;好不容易反復(fù)了幾次之后,通過仿真軟件看了下,差不多要對了,于是再湊一下時序,竟然對了!但這個做法除了設(shè)計周期長外,代碼的質(zhì)量也難以保證,往往存在很多冗余的邏輯,甚至有一些隱藏著較深的bug。
為什么會出現(xiàn)上面的問題呢?因?yàn)槲覀冊O(shè)計的是數(shù)字邏輯,而信號之間的邏輯關(guān)系往往是比較復(fù)雜的,在內(nèi)部信號很多的情況下,僅憑拍下腦袋就寫代碼肯定是不能理清楚它們之前的復(fù)雜的關(guān)系,所以出錯在所難免。
正確的做法是我們要先對整個設(shè)計有一些規(guī)劃--時時刻刻都要有設(shè)計時序的思想。設(shè)計時序最重要的是做好方案,這里說的方案絕不是只是擺幾個框圖在那里。我們在做設(shè)計的時候需要做總體設(shè)計方案、邏輯詳細(xì)設(shè)計方案。這兩種方案包括了很多東西,邏輯總體方案主要是一級模塊的劃分及接口時序的定義,而邏輯詳細(xì)方案就是代碼的文字及圖形描述!
對于入門者來說,接觸的比較多的是邏輯詳細(xì)設(shè)計方案。在這一級別的方案中,我們是要求的是至少要做到模塊內(nèi)部所有關(guān)鍵信號的時序都要先設(shè)計好,這里講的設(shè)計時序主要就是畫波形圖,在一個操作周期內(nèi)每個信號在每一個時鐘周期該是什么樣子就畫成什么樣子。 附圖(時序圖)是我曾設(shè)計的一個模塊的主要信號時序:aes_cnt信號控制著w_fifo_rden、aes_ready等信號,是該模塊的關(guān)鍵信號,通過將它們之間的時序關(guān)系通過時序圖反應(yīng)出來,寫代碼時就可以做到胸有成竹,減少出現(xiàn)邏輯混亂的情況。
聽起來似乎很簡單,但是執(zhí)行起來卻不容易,因?yàn)楫嫴ㄐ螆D是一件很煩鎖的事(有一次一個模塊因?yàn)椴僮鞅容^多我畫了8張時序圖)。但是請相信我,如果不這樣做,因?yàn)闀r序關(guān)系沒有處理好引起設(shè)計多次迭代所花的時間遠(yuǎn)多于畫波形圖的時間。
時序設(shè)計好之后,模塊內(nèi)部各個信號之間的關(guān)系就理得差不多了,之后就是將它翻譯成代碼了,這個過程以體力勞動為主,我就不多說了。
補(bǔ)充一下,畫波形圖推薦用TimingDesigner這個軟件,如果有更好的,請告訴我,我也不喜歡TimingDesigner。
另一個就是約束。
這里的約束是針對綜合軟件和布局布線軟件而言的。
為什么會有約束這個東西出現(xiàn)呢?主要原因是EDA軟件比較笨,難以明白我們的心思,如果我們不把更詳細(xì)的信息告訴它的話它就干不好活,比如需要將輸出寄存器放的與輸出管腳近一點(diǎn),如果不加約束,EDA軟件可能布通之后就不管了,導(dǎo)致Tco狂大,一點(diǎn)也不善解人意。所以我們需要約束這個東西,告訴EDA軟件要怎么干活,工程驗(yàn)收的標(biāo)準(zhǔn)又是什么。
在加約束之前,我們首先要定義一些術(shù)語好告訴EDA軟件我們想干什么,這些術(shù)語便是Fmax、Tsu、Tco等等這些東西。這些東西的含義這里就不多說了,網(wǎng)上的討論已經(jīng)很多了。
有了術(shù)語,還要有一種通信方式與EDA軟件通信,腳本語言充當(dāng)了這一角色。不過現(xiàn)在像quartus這類軟件做的比較智能化了,提供了圖形化界面,但是這背后支撐的還是些腳本語言,大家可以用UltraEdit打加*.qsf文件去看看我們加的約束用腳本語言是怎么寫的。
在加了約束之后,EDA工具就可以更好地按照我們的意愿去干活了,比較我們加了Fmax的約束,它就會盡可能地將關(guān)鍵路徑放的靠近一些,以提高電路工作頻率。當(dāng)然,這是有代價的,尋找路徑是需要時間的,要求越苛刻,時間花的越多,因此加約束的原則的適用就行。如果約束加的過高,就相當(dāng)于讓EDA工具去做一件不可能完成的事,找更短的路徑的時候說不定找著找著就掉下懸崖了,效果反而更差。
雖然有約束這個好東西,不過提醒一下,在項(xiàng)目之前千萬對它抱有太多的幻想,把希望寄托在別人的身上并不是每一次都很可靠的,出了問題還是要麻煩自己,加約束只能做一些錦上添花的事情。所以,我們在做方案的時候就需要對關(guān)鍵路徑進(jìn)行預(yù)估,要通過設(shè)計而不是約束解決這些問題。
評論