日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdl语言哪种语言类似c,Verilog HDL笔记

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdl语言哪种语言类似c,Verilog HDL笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《設計與驗證 Verilog HDL》

設計與驗證的發展歷程

早期:卡諾圖設計,面包板驗證

中期:原理圖設計,EDA工具仿真驗證

后期:硬件描述語言HDL設計,EDA工具仿真驗證

抽象層次不斷提高

HDL可以從算法/系統級>功能級>行為級>寄存器傳輸級(RTL)>門級和開關級不同的層次描述數字電路系統。

通過EDA工具將高層次的電路描述解析到門級等低層次的電路描述(網表)的過程就叫做"綜合"(Synthesize),或者稱邏輯綜合(綜合時會根據"約束條件"優化)

最成熟的綜合是RTL級到門級的綜合

Verilog不僅定義了語法,還對每個語法結構都清晰定義了仿真語義,從而便于仿真調試

Verilog集成了C語言的語法結構和操作符,易學易用,具有很強的擴展性

VHDL(Very High Speed Integrated Circuit HDL,超高速集成電路描述語言)的特點是描述嚴謹

幾種設計方法:

原理圖直觀,便于理解,但在大型設計中可維護性差,不利于提高模塊重用性

HDL輸入:利于自頂向下設計,利于模塊劃分和重用,可移植性好,通用性好,設計不因芯片工藝和結構變化而變化,利于向ASIC移植

波形輸入和狀態機輸入:是最常用的輔助設計方法,EDA工具可自動根據兩種輸入生成HDL代碼,應用受局限,維護性不高

推薦初學者:首選HDL方式,在某些要求使用圖形描述設計頂層的情況下才使用原理圖,不要在設計頂層以外的其他層次使用原理圖,不要依賴波形設計工具(因為復雜的測試激勵無法用波形工具描述)

Verilog和VHDL:

兩者都能勝任數字電路系統設計任務

VHDL最初用作文檔來描述數字硬件的行為,描述性和抽象性更強,更適合描述更高層次(行為級,系統級)

Verilog最初為更簡捷、有效的描述數字電路和仿真而設計,易學易懂

在這兩者基礎上又發展處很多更抽象的硬件描述語言:SystemVerilog、Superlog、SystemC、CoWare C等

Verilog寄存器和線網兩種數據類型定義清楚,時序和組合電路描述簡潔,能幫助快速了解硬件設計的基本概念。

但VHDL和Verilog各有所長,并無優劣之分,最重要的是建模方法與思想

推薦初學者:從Verilog學起

Verilog和C語言:

區別:

互連(connectivity):wire型變量配合驅動結構可有效表示網線互連

并發(concurrency):并行執行

時間(time):Verilog定義了絕對和相對的時間度量,仿真時可描述信號之間的時間關系

HDL語言與軟件語言(C,C++等)有本質區別,評判HDL代碼的最終標準是實現的硬件電路的性能(面積和速度)

一個硬件設計的最終性能,很大程度上取決于設計工程師所構想的硬件實現方案的合理性

從軟件設計轉行的初學者,片面追求代碼的整潔、簡短是錯誤的,是與評價HDL的標準背道而馳的

正確的方法是,首先對所要實現的硬件電路有一個清楚的認識,對硬件結構與連接了解十分清楚,再用HDL語句描述出來

驗證時,常用C語言編寫測試向量,與Verilog在仿真器中通信,用于驗證

描述分級

系統級:對系統整體功能和性能指標進行衡量

功能級:將系統功能劃分為可實現的具體功能模塊,大致確定模塊間的接口,描述每個模塊的時序約束

行為級:明確每個模塊所有的接口和邊界,模塊內部功能,外部接口和行為都已經清晰。常用于編寫仿真測試激勵(延時描述、監視描述)

寄存器傳輸級:不關注寄存器和組合邏輯的細節,使用HDL語言描述寄存器到寄存器間的邏輯功能描述電路——一般對此設計仿真

門級:目前要直接使用門級描述的情況一般是ASIC和FPGA設計中有面積或時序要求較高的模塊

布局規劃與布局布線:門級描述映射到目標器件中

時序仿真:將布局布線的延時信息反標注到設計網表中進行仿真,簡稱后仿真。包含門延時和線延時,能較好反映芯片實際工作情況。主要目的是發現時序違規的情況

所有的電路單元是并行工作的,相互之間沒有順序關系,即使是最小的單元也是如此

模塊中只有定義了時鐘邊沿的行為是與跳變沿有關的,其余(例如+,-,×,÷,多路選擇器,譯碼器等)如果沒有定義邊沿觸發,就與邊沿無關,其輸出與輸入之間的延時只有門延時和線延時,線路越長,此延時越大

assign:連續賦值語句

#3:模擬組合邏輯的延時,表示經過3個延時單位,再進行賦值

timescale 1ns/100ps:定義時間單位/仿真時間精度

{}:是Verilog的合并符號,將多個變量合并成一個組合變量,可用于批量賦值

xor:是Verilog自帶的邏輯門原語

實例化:調用功能模塊

在模塊中實例化其他模塊的描述方式稱為結構化描述

Verilog的3種描述方法:

數據流描述:assign語句——連續賦值語句

行為描述:always或initial語句——其中包含的語句稱為過程賦值語句

結構化描述:實例化已有的模塊(包括Module實例化、門實例化、用戶定義原語UDP實例化)

基本詞法:

Verilog對大小寫敏感,書寫時要格外注意

Verilog中所有關鍵字都是小寫

Verilog中標識符(內部信號名,變量名)由字母、數字、$、和_組成,第一個字符必須是字母或_

//和/* */表示注釋,某些控制編譯過程的指令也是以注釋的形式出現,例如/* synthesis syn_black_box */

間隔:空格、制表符、換行符

轉義字符:\n換行符;\t制表符;\\表示\本身

模塊和端口:

Verilog中,module是基本的組成單元

建議在一個Verilog文件中只放一個module定義,且使文件名與module名稱一致

module模塊名稱(端口列表)

//變量聲明

input [1:0], output, inout,

reg, wire, parameter,

function, task, …

//語句,以下語句在module中是并行的關系,無任何順序關系,其文本上的順序不改變module的功能

initial

always

module實例化

門實例化

UDP實例化

assign

endmodule

有些module不包含輸入輸出端口,一般用于內部已經實例化了激勵的封閉系統,只用于仿真,不用于實際系統

input默認為wire類型(貌似不可以聲明為reg類型);output在always或initial中賦值時默認是reg,否則是wire;inout一般設為tri類型(表示有多個驅動源,如無驅動則為三態)

建議將所有的聲明放到所有語句之前,增加可讀性

always的用法

1.always@后面內容是敏感變量,always@(*)里面的敏感變量為*,意思是說敏感變量由綜合器根據always里面的輸入變量自動添加,不用自己考慮。

2.如果沒有@,那就是不會滿足特定條件才執行,而是執行完一次后立馬執行下一次,一直重復執行

3.通常情況下,使用方法是:always@(posedge clk_out_0, negedge reset_n)

Error (10028): Can't resolve multiple constant drivers for net……

上面的代碼在quartusII里面就會出現題目的錯誤提示,其原因就是在兩個always語句里面都對out1,out2信號賦值了,而兩個always是并行快,所以提示出現多重驅動的情況

解決辦法:將兩個always合并成一個

結構化描述

結構化描述就是在設計中實例化已有的功能模塊,包括門原語、用戶自定義原語UDP,和其他模塊module

需要將模塊實例與外部信號相連接,模塊實例的端口連接規則:

Input:缺省為線網wire類型

Output:寄存器(在過程賦值語句中被賦值),或者是線網類型

Inout:缺省為線網類型,定義為tri雙向

與之相連的信號類型為:

與input相連的,可以使一個線網或寄存器

與output,相連的一定是驅動一個線網

與inout先練,輸入時從一個線網驅動而來,輸出時驅動到一個線網(切記,只有線網類型可以驅動inout端口,否則編譯出錯)

實例的端口對應方式有兩種:

(1)名稱對應:外部信號與模塊端口名稱相對應,順序可隨意

模塊名 實例名稱(

.X(E_X),

.Y(E_Y),????//沒有可留空

……

);

(2)位置對應:按順序對應(與函數傳遞參數類似),沒有則留空

模塊名 實例名稱(E_X, E_Y, E_SUM, E_C_out);

參數化

上面講了實例化,這里講參數化

module中的參數一般用作定義常量

當實例化某個模塊時,可以修改參數的值,實現不同的特性,是通過"新參數直接代入"或"參數重定義"來完成的。

方法:

1、defparam關鍵字重新定義模塊參數——Altera自動生成的通用模塊定制采用

此方法在某些綜合器中失效(應采用第2種)

defparam

module.parameter = ,

……

2、直接在實例化時代入參數——Xilinx自動生成的通用模塊定制采用

#(……,……,……)參數要按順序列出,不能遺漏和顛倒

總結

以上是生活随笔為你收集整理的hdl语言哪种语言类似c,Verilog HDL笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。