新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 淺淡邏輯設(shè)計的學習(二)

        淺淡邏輯設(shè)計的學習(二)

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

          入門前

        本文引用地址:http://www.104case.com/article/265058.htm

          剛才開始接觸很多人會覺得很簡單:因為的語法不多,半天就可以把書看完了。但是很快許多人就發(fā)現(xiàn)這個想法是錯誤的,他們經(jīng)常埋怨綜合器怎么和自己的想法差別這么大:它竟然連用for循環(huán)寫的一個計數(shù)器都不認識!

          相信上一段的經(jīng)歷大部分人都曾有,原因是做的思維和做軟件的很不相同,我們需要從電路的角度去考慮問題。

          在這個過程中首先要明白的是軟件設(shè)計和的不同,并理解什么是硬件意識。

          軟件代碼的執(zhí)行是一個順序的過程,編繹以后的機器碼放在存儲器里,等著CPU一條一條的取指并執(zhí)行;因此軟件設(shè)計中經(jīng)常會帶有順序處理的思維。而邏輯設(shè)計則不同,我們設(shè)計的是數(shù)字電路,它是由很多很多的與非門及構(gòu)成的,上電之后所有與非門和都同時工作,不會因為A觸發(fā)器的代碼描述在B觸發(fā)器之前A觸發(fā)器就是先工作,事實上,RTL級代碼的代碼先后順序在綜合成網(wǎng)表文件后這種順序就消失了,取代的是基本邏輯電路之間的互聯(lián)關(guān)系描述;因此邏輯設(shè)計需要的是一種并發(fā)的思維,我們也需要用并發(fā)的思維去考慮電路的設(shè)計。

          當然,我們設(shè)計的電路功能一般都有先后順序的關(guān)系,如果這種順序不能通過代碼的先后順序來實現(xiàn),那么要怎么完成這一功能呢?在邏輯設(shè)計中,我們所說的先后順序都是基于時間軸來實現(xiàn):它的承載體就是時序邏輯,也就是那些觸發(fā)器。

          硬件意識的東西網(wǎng)上談論的已經(jīng)很多,這里就不再多說了。

          其次就是要熟悉基本電路的設(shè)計。

          基本的電路不是很多,也就是、計數(shù)器、移位寄存器、狀態(tài)機、多路選擇器、譯碼器等幾種,所有復雜的電路都可由這些基本的電路構(gòu)成。高手水平高的體現(xiàn)并不是他能寫出一些很奇特的電路,相反,水平高是體現(xiàn)在他們總能將復雜的電路用這些很樸素的基本電路去描述。甚至,你會發(fā)現(xiàn)他們的代碼基本上是由if...else、case這些語句構(gòu)成的,樸素的讓你覺得奇怪。

          我認為,初學者在入門的時候,對于基本電路的設(shè)計應該固定化、標準化,每種電路該用什么樣的代碼描述,應該要固定、統(tǒng)一,盡量少一些花哨的東西。說來這里我舉個例子。

          以前有幾個朋友因為仿真有問題請我?guī)兔φ覇栴}。他們的代碼寫的很亂,出現(xiàn)了很多種稀奇古怪的電路,一看頭都大了,只好建議他們按照標準的電路重新寫下代碼。結(jié)果過了半天,他們就和我說問題不見了。

          所以,高手們喜歡用簡單的代碼是有道理的,電路的標準化和規(guī)范化可以減少許多稀奇古怪的問題,問題少了他們也就能在別人加班的時候回家多睡回覺,呵呵。總之,簡單的、樸素的就是最好的。

          最后是代碼的規(guī)范化。

          代碼規(guī)范主要是代碼書寫、命名等規(guī)范。比如不能用TAB鍵空格、低電平有效信號命名時加_n(如rst_n等)、每行只能寫一行代碼等。這些東西網(wǎng)上也很多,這里只是強烈建議大家要嚴格遵守,像華為等公司如果代碼不規(guī)范的話肯定是要打回去重寫的。



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 丹东市| 眉山市| 山阴县| 平原县| 瑞金市| 湖州市| 尼玛县| 太原市| 小金县| 彰化市| 辽中县| 龙南县| 治县。| 河池市| 河源市| 南投县| 阿拉尔市| 通道| 伊宁县| 德昌县| 宣汉县| 汕头市| 海安县| 东光县| 天峻县| 茶陵县| 娄底市| 连云港市| 南康市| 油尖旺区| 龙里县| 浑源县| 万州区| 兴和县| 汝州市| 凤山市| 无极县| 上犹县| 安乡县| 武山县| 新河县|