verilog語言與c語言的區別

2020-12-17 電子發燒友

  VHDL語言 C語言

  Verilog HDL是一種硬體描述語言(HDL:Hardware Description Language),以文本形式來描述數字系統硬體的結構和行為的語言,用它可以表示邏輯電路圖、邏輯表達式,還可以表示數字邏輯系統所完成的邏輯功能。 Verilog HDL和VHDL是世界上最流行的兩種硬體描述語言,都是在20世紀80年代中期開發出來的。前者由Gateway Design Automation公司(該公司於1989年被Cadence公司收購)開發。兩種HDL均為IEEE標準。

  Verilog的設計初衷是成為一種基本語法與C語言相近的硬體描述語言。這是因為C語言在Verilog設計之初,已經在許多領域得到廣泛應用,C語言的許多語言要素已經被許多人習慣。一種與C語言相似的硬體描述語言,可以讓電路設計人員更容易學習和接受。不過,Verilog與C語言還是存在許多差別。另外,作為一種與普通計算機程式語言不同的硬體描述語言,它還具有一些獨特的語言要素,例如向量形式的線網和寄存器、過程中的非阻塞賦值等。總的來說,具備C語言的設計人員將能夠很快掌握Verilog硬體描述語言。

  C語言是一門通用計算機程式語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的程式語言。儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平臺。二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標準局為C語言制定了一套完整的國際標準語法,稱為ANSI C,作為C語言最初的標準。

  

  特有特點C語言是一個有結構化程序設計、具有變量作用域(variable scope)以及遞歸功能的過程式語言。C語言傳遞參數均是以值傳遞(pass by value),另外也可以傳遞指針(a pointer passed by value)。不同的變量類型可以用結構體(struct)組合在一起。只有32個保留字(reserved keywords),使變量、函數命名有更多彈性。部份的變量類型可以轉換,例如整型和字符型變量。通過指針(pointer),C語言可以容易的對存儲器進行低級控制。預編譯處理(preprocessor)讓C語言的編譯更具有彈性。

  Verilog語言與C語言的區別

  數字電路設計工程師一般都學習過程式語言、數字邏輯基礎、各種EDA軟體工具的使用。就程式語言而言,國內外大多數學校都以C語言為標準,只有少部分學校使用Pascal 和Fortran。

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

  先深入了解Reed-Solomen編碼/解碼的算法。

  編寫C語言的程序來驗證算法的正確性。

  運行描述編碼器的C語言程序,把在數據文件中的多組待編碼的數據轉換為相應的編碼後數據,並存入文件。

  編寫一個加幹擾用的C語言程序,用於模擬信道。它能產生隨機誤碼位(並把誤碼位個數控制在糾錯能力範圍內),將其加入編碼後的數據文件中。運行該加幹擾程序,產生帶誤碼位的編碼後的數據文件。

  編寫一個解碼器的C語言程序,運行該程序把帶誤碼位的編碼文件解碼為另一個數據文件。

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

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

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

  在算法硬體電路的研製過程中,計算電路的結構和晶片的工藝對運行速度有很大的影響。所以在電路結構確定之前,必須經過多次仿真。

  C語言的功能仿真。

  C語言的並行結構仿真。

  Verilog HDL的行為仿真。

  Verilog HDL RTL級仿真。

  綜合後門級結構仿真。

  布局布線後仿真。

  電路實現驗證。

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

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

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

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

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

  利用C語言完善的查錯和編譯環境,設計者可以先設計出一個功能正確的設計單元,以此作為設計比較的標準。然後,把C程序一段一段地改寫成用並型結構(類似於Verilog)描述的C程序,此時還是在C的環境裡,使用的依然是C語言。

  如果運行結果都正確,就將C語言關鍵字用Verilog相應的關鍵字替換,進入Verilog的環境。將測試輸入同時加到C與Verilog兩個單元,將其輸出做比較。這樣很容易發現問題的所在,更正後再做測試,直至正確無誤。

  2.C語言與Verilog語言互相轉換中存在的問題

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

  怎樣把C程序轉換成類似Verilog結構的C程序。

  如何增加並行度,以保證用硬體實現時運行速度達到設計要求。

  怎樣不使用C中較抽象的語法(例如迭代、指針、不確定次數的循環等)。也能來表示算法(因為轉換的目的是用可綜合的Verilog語句來代替C程序中的語句,而可用於綜合的Verilog語法是相當有限的,往往找不到相應的關鍵字來替換)。

  C程序是按行依次執行的,屬於順序結構。而Verilog描述的硬體是可以在同一時間同時運行的,屬於並行結構。這兩者之間有很大的衝突。另外,Verilog的仿真軟體也是順序執行的,在時間關係上同實際的硬體是有差異的,可能會出現一些無法發現的問題。

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

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

  C語言沒有時間關係,轉換後的Verilog程序必須要能做到沒有任何外加的人工延時信號,否則將無法使用綜合工具把Verilog原始碼轉化為門級邏輯。

  3.如何利用C語言來加快硬體的設計和查錯

  如表3.11所示為常用的C語言與Verilog相對應的關鍵字與控制結構。

  表3.11 C語言與Verilog相對應的關鍵字與控制結構表

  

  如表3.12所示為C語言與Verilog相對應的運算符。

  表3.12 C語言與Verilog對應運算符表

  

  從上面的講解我們可以總結如下。

  C語言與Verilog硬體描述語言可以配合使用,輔助設計硬體。

  C語言與Verilog硬體描述語言很像,但要稍加限制。

  C語言的程序很容易轉成Verilog的程序。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • FPGA程式語言——verilog語法
    c_sum)//埠連接輸出 );endmodule這個小程序表述了一個.v文件包含了常用的verilog語法,變量的定義類型包括:wire,reg以上是與C語言有很大的不同。許多與C語言類似的語句只能出現在過程塊中,而不能隨意出現在模塊功能定義的範圍內。
  • matlab和c語言的區別
    C語言基本特性:1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。
  • Verilog代碼轉VHDL代碼經驗總結
    語言和VHDL語言是兩種不同的硬體描述語言,但並非所有人都同時精通兩種語言,所以在某些時候,需要把Verilog代碼轉換為VHDL代碼。你已經習慣某種語言,也發現語言不是學習FPGA時需要考慮的問題,它僅僅是硬體描述語言工具而已。可是,當你發現一份和你使用語言不同的代碼作為參考時,你又開始想:我以後的工作是不是要二種語言都會,這樣工作才會得心應手?事實上,兩種語言之間是可以相互轉換的。
  • vhdl語言和c語言區別大嗎?差異性體現在哪兒
    打開APP vhdl語言和c語言區別大嗎?語言具有很強的移植能力   (4) VHDL 語言的設計描述與器件無關   (5) VHDL 語言程序易於共享和復用   C語言簡介:   C語言是一門通用計算機程式語言,應用廣泛。
  • ​verilog相關基礎知識
    對於verilog基礎知識,這裡做簡單的介紹,對於已經熟悉verilog語言的讀者可以省略不看此部分。
  • Verilog HDL基礎之:與C語言的區別與聯繫(獨家)
    下面介紹用C語言配合Verilog HDL來設計算法的硬體電路塊時考慮的三個主要問題:1.為什麼選擇C語言與Verilog 配合使用首先,C語言很靈活,查錯功能強,還可以通過PLI(程式語言接口)編寫自己的系統任務直接與硬體仿真器(如Verilog-XL)結合使用。
  • C語言與彙編語言的區別
    正是有了多年的實戰經驗,對於彙編與高級語言在原理及應用等方面形成了自已的一些理解,也是我經常思考的問題,但一直沒有以書面的方式記錄下來,今天之所以寫下這些文字,正是想做一個歸納,日後也好參考。其實,C語言與彙編語言的區別一直是程式設計師們津津樂道的話題。
  • 可編程邏輯培訓——Verilog 語言基礎
    不使用初始化語句;2、不使用延時語句;3、不使用循環次數不確定的語句,如:forever,while等;4、儘量採用同步方式設計電路;5、儘量採用行為語句完成設計;6、always過程塊描述組合邏輯,應在敏感信號表中列出所有的輸入信號;7、所有的內部寄存器都應該可以被復位;8、用戶自定義原件(UDP元件)是不能被綜合的。一:
  • Verilog入門——Verilog語言要素
    在 Verilog 語言編譯時,特定的編譯器指令在整個編譯過程中有效(編譯過程可跨越多個文件),直到遇到其它的不同編譯程序指令。在編譯過程中,` t i m e s c a l e指令影響這一編譯器指令後面所有模塊中的時延值,直至遇到另一個` t i m e s c a l e指令或` r e s e t a l l指令。當一個設計中的多個模塊帶有自身的 ` t i m e s c a l e編譯指令時將發生什麼?
  • C語言面試54題
    第16題, 說一下c語言中循環的類型。C語言中有4種循環類型。第29題, 在c語言中有哪些modifiers?第37題, Call by value和call by reference有什麼區別?call by value傳的是值。Call by reference傳的是地址。第38題,如何在c語言中定義一個字符串變量?
  • C語言怎麼樣?今天聊聊C語言的發展史!
    此版本還看到了C語言的開始,該語言用於編寫一些命令。 此處的代碼僅是某些命令,某些庫函數和C編譯器的原始碼。c /中的文件來自 last1120c.tar.gz 磁帶,並構成了第二版Unix的有效C編譯器。
  • verilog語言要素
    另外,本章還介紹了 Ve r i l o g硬體描述語言中的兩種數據類型。3.1 標識符Verilog HDL中的標識符( i d e n t i f i e r )可以是任意一組字母、數字、$符號和_(下劃線)符號的組合,但標識符的第一個字符必須是字母或者下劃線。另外,標識符是區分大小寫的。
  • C語言,C++,C ,Java之間的關係
    C語言,C++,C#,Java,這幾種語言,應該說是當前最流行,也是最基礎的計算機語言。是不是有些人看著會頭大,大腦會不叫混亂,一個計算機怎麼會有那麼的的語言呢?看著就頭大。之後,為了方便理解,又出現了編匯語言---有英語單詞組成,這裡可以理解了,但是,編匯語言還是要轉換為計算機語言,這裡有專門的軟體將編匯語言轉為計算機語言。這個軟體我想大家應該猜到了,就是編譯器。裡面單詞與及一些語法和01010的代碼相對應,可以把編匯語言很好的翻譯成機器語言。
  • 【C語言】02.第一個C語言程序
    學習任何一門語言,首先要掌握的肯定是語法。學習C語言語法的目的:就是能夠利用C語言編寫程序,然後運行程序跟硬體(計算機、手機等硬體設備)進行交互。由於我們的最終目的是學習iOS開發,學習iOS開發的話必須在Mac系統下,因此我就在Mac系統環境下開發C語言程序,而不是在Windows環境下。
  • C語言,美麗的語言
    當我瀏覽C語言代碼時,我也感覺到了相同的美。 在不忙的日子裡,我會隨意的查看C語言的內核,sched.c, page_alloc.c 等等。它讓我感覺我正在欣賞一種很有生命力的東西。我能看到這些代碼指引著程序的執行,邏輯指令管控制程序能量的分派使用。雖然我不是內核的開發者,但我 完全能捕捉到眼前代碼的脈絡 —— 只是通過觀看這些代碼的「運動」。
  • 專升本c語言和二級c語言哪個難?
    c語言是計算機專業必考的科目,很多同學不知道專升本c語言和二級c語言哪個難?專升本c語言備考技巧有哪些?請看下文的介紹。專升本c語言和二級c語言哪個難?二級c語言要難一些,專升本c語言只考編程題,而且考的題目也不難,二級c語言考的比較系統,題型也更豐富,而且有時考的很細,要求知道更準確的c語言語法。零基礎,如何學c語言?
  • 【C語言經典編程技術】C語言中union與struct的區別及sizeof的計算方式
    C語言中union與struct的區別在C語言中結構體和聯合具有細微差別,特別是使用sizeof()對其求大小時,許多剛剛接觸
  • C 語言發展史的點點滴滴
    此版本還看到了C語言的開始,該語言用於編寫一些命令。此處的代碼僅是某些命令,某些庫函數和C編譯器的原始碼。c /中的文件來自 last1120c.tar.gz 磁帶,並構成了第二版Unix的有效C編譯器。
  • 單片機C語言教程-基礎語句
    c語言提供了多種語句來實現這些程序結構。本文將介紹這些基本語句及其應用,使讀者對c程序有一個初步的認識,為以後的學習打下基矗  c程序的語句  c程序的執行部分是由語句組成的。程序的功能也是由執行語句實現的。
  • C語言中auto register static const volatile 區別
    這一點是它與棧變量和堆變量的區別。2>、變量用static告知編譯器,自己僅僅在變量的作用範圍內可見。這一點是它與全局變量的區別。3>當static用來修飾全局變量時,它就改變了全局變量的作用域,使其不能被別的程序extern,限制在了當前文件裡,但是沒有改變其存放位置,還是在全局靜態儲存區。