新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Verilog HDL基礎(chǔ)之:與C語言的區(qū)別與聯(lián)系(獨家)

        Verilog HDL基礎(chǔ)之:與C語言的區(qū)別與聯(lián)系(獨家)

        作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

        數(shù)字電路設(shè)計工程師一般都學習過編程語言、數(shù)字邏輯基礎(chǔ)、各種EDA軟件工具的使用。就編程語言而言,國內(nèi)外大多數(shù)學校都以為標準,只有少部分學校使用Pascal 和Fortran。

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

        算法的描述和驗證常用來做。例如要設(shè)計Reed-Solomen編碼/解碼器,可以分為下面幾個步驟。

        1. 先深入了解Reed-Solomen編碼/解碼的算法。
        2. 編寫的程序來驗證算法的正確性。
        3. 運行描述編碼器的C語言程序,把在數(shù)據(jù)文件中的多組待編碼的數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的編碼后數(shù)據(jù),并存入文件。
        4. 編寫一個加干擾用的C語言程序,用于模擬信道。它能產(chǎn)生隨機誤碼位(并把誤碼位個數(shù)控制在糾錯能力范圍內(nèi)),將其加入編碼后的數(shù)據(jù)文件中。運行該加干擾程序,產(chǎn)生帶誤碼位的編碼后的數(shù)據(jù)文件。
        5. 編寫一個解碼器的C語言程序,運行該程序把帶誤碼位的編碼文件解碼為另一個數(shù)據(jù)文件。

        比較原始數(shù)據(jù)文件和生成的文件,便可知道編碼和解碼的程序是否正確(能否自動糾正糾錯能力范圍內(nèi)的錯碼位),用這種方法我們就可以來驗證算法的正確性。但這樣的數(shù)據(jù)處理其運行速度只與程序的大小和計算機的運行速度有關(guān),也不能獨立于計算機而存在。

        如果要設(shè)計一個專門的電路來進行這種對速度有要求的實時數(shù)據(jù)處理,除了以上介紹的C程序外,還需編寫硬件描述語言(如Verilog HDL或 VHDL)的程序。然后進行仿真以便從電路結(jié)構(gòu)上保證算法能在規(guī)定的時間內(nèi)完成,并能與前端和后端的設(shè)備或器件正確無誤地交換數(shù)據(jù)。

        用硬件描述語言(HDL)的程序設(shè)計硬件的好處在于易于理解、易于維護,調(diào)試電路速度快,有許多的易于掌握的仿真、綜合和布局布線工具,還可以用C語言配合HDL來做邏輯設(shè)計的前后仿真,驗證功能是否正確。

        在算法硬件電路的研制過程中,計算電路的結(jié)構(gòu)和芯片的工藝對運行速度有很大的影響。所以在電路結(jié)構(gòu)確定之前,必須經(jīng)過多次仿真。

        • C語言的功能仿真。
        • C語言的并行結(jié)構(gòu)仿真。
        • Verilog HDL的行為仿真。
        • Verilog HDL RTL級仿真。
        • 綜合后門級結(jié)構(gòu)仿真。
        • 布局布線后仿真。
        • 電路實現(xiàn)驗證。

        下面介紹用C語言配合Verilog HDL來設(shè)計算法的硬件電路塊時考慮的三個主要問題:

        1.為什么選擇C語言與Verilog 配合使用

        首先,C語言很靈活,查錯功能強,還可以通過PLI(編程語言接口)編寫自己的系統(tǒng)任務(wù)直接與硬件仿真器(如Verilog-XL)結(jié)合使用。C語言是目前世界上應(yīng)用最為廣泛的一種編程語言,因而C程序的設(shè)計環(huán)境比Verilog HDL更完整。此外,C語言可應(yīng)用于許多領(lǐng)域,有可靠的編譯環(huán)境,語法完備,缺陷較少。

        比較起來,Verilog 語言只是針對硬件描述的,在別處使用(如用于算法表達等)并不方便。而且Verilog的仿真、綜合、查錯工具等大部分軟件都是商業(yè)軟件,與C語言相比缺乏長期大量的使用,可靠性較差,亦有很多缺陷。所以,只有在C語言的配合使用下,Verilog才能更好地發(fā)揮作用。

        面對上述問題,最好的方法是C語言與Verilog語言相輔相成,互相配合使用。這就是既要利用C語言的完整性,又要結(jié)合Verilog對硬件描述的精確性,來更快、更好地設(shè)計出符合性能要求的硬件電路系統(tǒng)。

        利用C語言完善的查錯和編譯環(huán)境,設(shè)計者可以先設(shè)計出一個功能正確的設(shè)計單元,以此作為設(shè)計比較的標準。然后,把C程序一段一段地改寫成用并型結(jié)構(gòu)(類似于Verilog)描述的C程序,此時還是在C的環(huán)境里,使用的依然是C語言。

        如果運行結(jié)果都正確,就將C語言關(guān)鍵字用Verilog相應(yīng)的關(guān)鍵字替換,進入Verilog的環(huán)境。將測試輸入同時加到C與Verilog兩個單元,將其輸出做比較。這樣很容易發(fā)現(xiàn)問題的所在,更正后再做測試,直至正確無誤。

        2.C語言與Verilog語言互相轉(zhuǎn)換中存在的問題

        混合語言設(shè)計流程往往會在兩種語言的轉(zhuǎn)換中會遇到許多難題,如下所示。

        • 怎樣把C程序轉(zhuǎn)換成類似Verilog結(jié)構(gòu)的C程序。
        • 如何增加并行度,以保證用硬件實現(xiàn)時運行速度達到設(shè)計要求。
        • 怎樣不使用C中較抽象的語法(例如迭代、指針、不確定次數(shù)的循環(huán)等)。也能來表示算法(因為轉(zhuǎn)換的目的是用可綜合的Verilog語句來代替C程序中的語句,而可用于綜合的Verilog語法是相當有限的,往往找不到相應(yīng)的關(guān)鍵字來替換)。

        C程序是按行依次執(zhí)行的,屬于順序結(jié)構(gòu)。而Verilog描述的硬件是可以在同一時間同時運行的,屬于并行結(jié)構(gòu)。這兩者之間有很大的沖突。另外,Verilog的仿真軟件也是順序執(zhí)行的,在時間關(guān)系上同實際的硬件是有差異的,可能會出現(xiàn)一些無法發(fā)現(xiàn)的問題。

        C語言的函數(shù)調(diào)用與Verilog中模塊的調(diào)用也有區(qū)別。C程序調(diào)用函數(shù)是沒有延時特性的,一個函數(shù)是惟一確定的,對同一個函數(shù)的不同調(diào)用是一樣的。而Verilog中對模塊的不同調(diào)用是不同的,即使調(diào)用的是同一個模塊,必須用不同的名字來指定。

        Verilog的語法規(guī)則很死,限制很多,能用的判斷語句有限,仿真速度較慢,查錯功能差,錯誤信息不完整。仿真軟件通常也很昂貴,而且不一定可靠。C語言的花樣則很多,轉(zhuǎn)換過程中會遇到一些困難。

        C語言沒有時間關(guān)系,轉(zhuǎn)換后的Verilog程序必須要能做到?jīng)]有任何外加的人工延時信號,否則將無法使用綜合工具把Verilog源代碼轉(zhuǎn)化為門級邏輯。

        3.如何利用C語言來加快硬件的設(shè)計和查錯

        如表1所示為常用的C語言與Verilog相對應(yīng)的關(guān)鍵字與控制結(jié)構(gòu)。

        表1 C語言與Verilog相對應(yīng)的關(guān)鍵字與控制結(jié)構(gòu)表

        C

        Verilog

        sub-function

        module、function、task

        if-then-else

        if-then-else

        case

        case

        {,}

        begin、end

        for

        for

        while

        while

        break

        disable

        define

        define

        int

        int

        printf

        monitor、display、strobe

        如表2所示為C語言與Verilog相對應(yīng)的運算符。

        表2 C語言與Verilog對應(yīng)運算符表

        C

        Verilog

        功 能

        *

        *

        /

        /

        +

        +

        -

        -

        %

        %

        取模

        !

        !

        反邏輯

        邏輯與

        ||

        ||

        邏輯或

        >

        >

        大于

        小于

        續(xù)表

        C

        Verilog

        功 能

        >=

        >=

        大于等于

        =

        =

        小于等于

        ==

        ==

        等于

        !=

        !=

        不等于

        位反相

        按位邏輯與

        |

        |

        按位邏輯或

        ^

        ^

        按位邏輯異或

        ~^

        ~^

        按位邏輯同或

        >>

        >>

        右移

        左移

        ?:

        ?:

        相當于if-else

        從上面的講解我們可以總結(jié)如下。

        • C語言與Verilog硬件描述語言可以配合使用,輔助設(shè)計硬件。
        • C語言與Verilog硬件描述語言很像,但要稍加限制。
        • C語言的程序很容易轉(zhuǎn)成Verilog的程序。


        關(guān)鍵詞: VerilogHDL 華清遠見 C語言

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 南城县| 星座| 酒泉市| 普兰店市| 晋中市| 兴海县| 裕民县| 襄城县| 辽阳市| 五华县| 五常市| 信阳市| 资兴市| 宜宾市| 永胜县| 施秉县| 乐都县| 南雄市| 揭东县| 湖北省| 辽中县| 临漳县| 石嘴山市| 廉江市| 宁海县| 类乌齐县| 修武县| 天津市| 台南县| 遂平县| 阿城市| 新龙县| 嘉定区| 墨竹工卡县| 石渠县| 铜川市| 和硕县| 乌兰浩特市| 留坝县| 久治县| 宽甸|