新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 淺淡邏輯設(shè)計(jì)的學(xué)習(xí)(三)

淺淡邏輯設(shè)計(jì)的學(xué)習(xí)(三)

作者: 時(shí)間:2014-11-08 來源:網(wǎng)絡(luò) 收藏

  入門

本文引用地址:http://2s4d.com/article/265059.htm

  結(jié)合一兩個(gè)小項(xiàng)目把上面所說的事情都做好后,差不多就可以進(jìn)入入門的階段了(要求稍微嚴(yán)格了一點(diǎn)點(diǎn),呵呵)。

  入門階段要學(xué)的有:設(shè)計(jì);理解的原理及如何加。

  先談?wù)勗O(shè)計(jì)。

  設(shè)計(jì)是進(jìn)行的基本要求:時(shí)序是設(shè)計(jì)出來的,不是仿出來的,更不是湊出來的。

  很多人在做時(shí)喜歡一上來就狂寫代碼,寫到一半后發(fā)現(xiàn)信號(hào)間的時(shí)序出問題了,只好推倒重來;好不容易反復(fù)了幾次之后,通過仿真軟件看了下,差不多要對(duì)了,于是再湊一下時(shí)序,竟然對(duì)了!但這個(gè)做法除了設(shè)計(jì)周期長(zhǎng)外,代碼的質(zhì)量也難以保證,往往存在很多冗余的邏輯,甚至有一些隱藏著較深的bug。

  為什么會(huì)出現(xiàn)上面的問題呢?因?yàn)槲覀冊(cè)O(shè)計(jì)的是數(shù)字邏輯,而信號(hào)之間的邏輯關(guān)系往往是比較復(fù)雜的,在內(nèi)部信號(hào)很多的情況下,僅憑拍下腦袋就寫代碼肯定是不能理清楚它們之前的復(fù)雜的關(guān)系,所以出錯(cuò)在所難免。

  正確的做法是我們要先對(duì)整個(gè)設(shè)計(jì)有一些規(guī)劃--時(shí)時(shí)刻刻都要有設(shè)計(jì)時(shí)序的思想。設(shè)計(jì)時(shí)序最重要的是做好方案,這里說的方案絕不是只是擺幾個(gè)框圖在那里。我們?cè)谧鲈O(shè)計(jì)的時(shí)候需要做總體設(shè)計(jì)方案、邏輯詳細(xì)設(shè)計(jì)方案。這兩種方案包括了很多東西,邏輯總體方案主要是一級(jí)模塊的劃分及接口時(shí)序的定義,而邏輯詳細(xì)方案就是代碼的文字及圖形描述!

  對(duì)于入門者來說,接觸的比較多的是邏輯詳細(xì)設(shè)計(jì)方案。在這一級(jí)別的方案中,我們是要求的是至少要做到模塊內(nèi)部所有關(guān)鍵信號(hào)的時(shí)序都要先設(shè)計(jì)好,這里講的設(shè)計(jì)時(shí)序主要就是畫波形圖,在一個(gè)操作周期內(nèi)每個(gè)信號(hào)在每一個(gè)時(shí)鐘周期該是什么樣子就畫成什么樣子。 附圖(時(shí)序圖)是我曾設(shè)計(jì)的一個(gè)模塊的主要信號(hào)時(shí)序:aes_cnt信號(hào)控制著w_fifo_rden、aes_ready等信號(hào),是該模塊的關(guān)鍵信號(hào),通過將它們之間的時(shí)序關(guān)系通過時(shí)序圖反應(yīng)出來,寫代碼時(shí)就可以做到胸有成竹,減少出現(xiàn)邏輯混亂的情況。

  聽起來似乎很簡(jiǎn)單,但是執(zhí)行起來卻不容易,因?yàn)楫嫴ㄐ螆D是一件很煩鎖的事(有一次一個(gè)模塊因?yàn)椴僮鞅容^多我畫了8張時(shí)序圖)。但是請(qǐng)相信我,如果不這樣做,因?yàn)闀r(shí)序關(guān)系沒有處理好引起設(shè)計(jì)多次迭代所花的時(shí)間遠(yuǎn)多于畫波形圖的時(shí)間。

  時(shí)序設(shè)計(jì)好之后,模塊內(nèi)部各個(gè)信號(hào)之間的關(guān)系就理得差不多了,之后就是將它翻譯成代碼了,這個(gè)過程以體力勞動(dòng)為主,我就不多說了。

  補(bǔ)充一下,畫波形圖推薦用TimingDesigner這個(gè)軟件,如果有更好的,請(qǐng)告訴我,我也不喜歡TimingDesigner。

  另一個(gè)就是。

  這里的約束是針對(duì)綜合軟件和布局布線軟件而言的。

  為什么會(huì)有約束這個(gè)東西出現(xiàn)呢?主要原因是EDA軟件比較笨,難以明白我們的心思,如果我們不把更詳細(xì)的信息告訴它的話它就干不好活,比如需要將輸出寄存器放的與輸出管腳近一點(diǎn),如果不加約束,EDA軟件可能布通之后就不管了,導(dǎo)致Tco狂大,一點(diǎn)也不善解人意。所以我們需要約束這個(gè)東西,告訴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的約束,它就會(huì)盡可能地將關(guān)鍵路徑放的靠近一些,以提高電路工作頻率。當(dāng)然,這是有代價(jià)的,尋找路徑是需要時(shí)間的,要求越苛刻,時(shí)間花的越多,因此加約束的原則的適用就行。如果約束加的過高,就相當(dāng)于讓EDA工具去做一件不可能完成的事,找更短的路徑的時(shí)候說不定找著找著就掉下懸崖了,效果反而更差。

  雖然有約束這個(gè)好東西,不過提醒一下,在項(xiàng)目之前千萬對(duì)它抱有太多的幻想,把希望寄托在別人的身上并不是每一次都很可靠的,出了問題還是要麻煩自己,加約束只能做一些錦上添花的事情。所以,我們?cè)谧龇桨傅臅r(shí)候就需要對(duì)關(guān)鍵路徑進(jìn)行預(yù)估,要通過設(shè)計(jì)而不是約束解決這些問題。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉