Verilog始于20世紀(jì)80年代初,是一家名為Gateway Design Automation的公司的專有硬件描述語(yǔ)言(HDL)。最初的Verilog HDL的主要作者是Phil Moorby。
IEEE于1993年接管了Verilog語(yǔ)言,并在兩年后發(fā)布了正式的IEEE Verilog HDL標(biāo)準(zhǔn),即IEEE 1364-1995,昵稱為“Verilog-95”。五年后,IEEE發(fā)布了1364-2001,綽號(hào)為“Verilog2001”,其中有許多用于建模和驗(yàn)證數(shù)字設(shè)計(jì)的增強(qiáng)功能。
下圖顯示了Verilog-95中的主要語(yǔ)言功能,以及Verilog-2001中添加的主要新功能。請(qǐng)注意,此圖并不是語(yǔ)言特性的全面列表。其目的是展示Verilog-2001添加到原始Verilog語(yǔ)言中的主要新功能。
圖 Verilog-95和Verilog-2001語(yǔ)言特性
從Verilog發(fā)布到今天,其已經(jīng)經(jīng)歷了四十年的風(fēng)雨,早期的“電路”設(shè)計(jì)Verilog的確很方便,尤其在那個(gè)年代,其也崔進(jìn)了集成電路的發(fā)展。但是“老”不代表方便,尤其高速發(fā)展的今天,集成電路以摩爾定律指數(shù)發(fā)展,FPGA的應(yīng)用場(chǎng)合以越來越復(fù)雜,復(fù)雜的邏輯設(shè)計(jì)讓這個(gè)“老人”有些力不從心,今天我們就簡(jiǎn)單總結(jié)一下Verilog在設(shè)計(jì)時(shí)候的不方便地方。
Verilog的“貪婪”
下面是一個(gè)很常見的錯(cuò)誤:
Unabletobindwire/reg/memory`D'in`tb_alu_8bits.U0.$ivl_for_loop0'1err
變量D未聲明
聲明的“貪婪”
需要這么多聲明嗎?
大家在進(jìn)行邏輯設(shè)計(jì)時(shí)候是否對(duì)于變量申明感覺很煩,對(duì)于無休無止的變量聲明和位寬聲明,很容易在設(shè)計(jì)時(shí)候引進(jìn)錯(cuò)誤。
尤其對(duì)于一些綜合器在推斷變量的類型及位寬時(shí)候的錯(cuò)誤很難檢查出來,只有在進(jìn)行仿真及驗(yàn)證的時(shí)候才能發(fā)現(xiàn)問題。
Verilog的“傲慢”
Verilog 是一種弱類型和有限類型的語(yǔ)言,就導(dǎo)致其錯(cuò)誤檢測(cè)很弱。
PS:VHDL是強(qiáng)類型語(yǔ)言,SystemVerilog在兼容Verilog部分是弱類型,其他部分基本都是強(qiáng)類型。強(qiáng)類型的好處是在驗(yàn)證過程中盡早發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤。
一些錯(cuò)誤在進(jìn)行設(shè)計(jì)時(shí)候,Verilog并不會(huì)爆出錯(cuò)誤,但是會(huì)導(dǎo)致功能有問題,這種問題很難檢查出來,比如位寬不匹配、跨時(shí)鐘域、鎖存器等問題,這是因?yàn)閂erilog會(huì)自動(dòng)進(jìn)行位寬匹配,只有在進(jìn)行l(wèi)inting時(shí)候會(huì)爆出來警告,綜合時(shí)候基本不會(huì)爆出錯(cuò)誤。
錯(cuò)誤檢測(cè)的“傲慢”
傲慢到不讓我進(jìn)行檢測(cè)!
Verilog的“色欲”
不知道大家設(shè)計(jì)時(shí)函數(shù)或者任務(wù)用的多不多?
我猜肯定不多,而且很多Verilog入門教材中都是不建議使用函數(shù)或者任務(wù),主要是因?yàn)閂erilog使用函數(shù)或者任務(wù)有很多限制。
函數(shù)的限制:
函數(shù)不能由時(shí)間控制語(yǔ)句甚至延遲運(yùn)算符組成。
函數(shù)至少有一個(gè)輸入?yún)?shù)聲明。
函數(shù)可以由函數(shù)調(diào)用組成,但函數(shù)不能由任務(wù)組成。
函數(shù)在零模擬時(shí)間內(nèi)執(zhí)行,并在調(diào)用時(shí)返回單個(gè)值。
在編寫可綜合 RTL時(shí),不建議使用函數(shù)。
函數(shù)用于編寫行為或可仿真模型。
函數(shù)不應(yīng)具有非阻塞賦值。
任務(wù)的限制:
任務(wù)可以由時(shí)間控制語(yǔ)句甚至延遲操作符組成。
任務(wù)可以有輸入和輸出聲明。
任務(wù)可以由函數(shù)調(diào)用組成,但函數(shù)不能由任務(wù)組成。
任務(wù)可以有輸出參數(shù),在調(diào)用時(shí)不用于返回值。
任務(wù)可用于調(diào)用其他任務(wù)。
在編寫可綜合RTL時(shí),不建議使用任務(wù)。
任務(wù)用于編寫行為或可仿真模型。
以上的種種限制,你確定你設(shè)計(jì)的函數(shù)或者任務(wù)能簡(jiǎn)化你的設(shè)計(jì)嗎?
函數(shù)、任務(wù)的“色欲”
愛我卻不讓我廣泛使用你~
上例是從給定字符串中計(jì)算1個(gè)數(shù)的設(shè)計(jì)。在本例中,函數(shù)與參數(shù)“data_in”一起使用。函數(shù)名為“count_1s_in_byte”。在大多數(shù)協(xié)議描述中,需要對(duì)輸入字符串執(zhí)行一些操作。在此示例中,字符串為8位輸入“data_in”,輸出結(jié)果為4位“out”。不建議使用該函數(shù)進(jìn)行綜合。
Verilog的“懶惰”
當(dāng)你設(shè)計(jì)了一個(gè)功能module,下一個(gè)文件想引用時(shí)候就需要例化,當(dāng)你的設(shè)計(jì)比較復(fù)雜時(shí)候(有幾十個(gè)module)你就會(huì)發(fā)現(xiàn)Verilog的例化極其不方便,需要手動(dòng)例化,不僅浪費(fèi)時(shí)間而且很容易出錯(cuò)(對(duì)于初學(xué)者這種錯(cuò)誤很常見)。
例化的“懶惰”
例化能不能不這么懶!
Verilog的“嫉妒”
Verilog不像VHDL有豐富的包文件,同時(shí)也沒有像一些高級(jí)語(yǔ)言庫(kù)文件(不奢求)。同時(shí)自己的參數(shù)化也不是很方便(宏做參數(shù)化時(shí)候,幾十個(gè)變量情況怎么辦?)。
現(xiàn)在我需要做一個(gè)乘法器,我需要花費(fèi)很長(zhǎng)時(shí)間去了解乘法器的結(jié)構(gòu),然后去設(shè)計(jì)和優(yōu)化,如果有一個(gè)math包那是不是會(huì)大大減少設(shè)計(jì)時(shí)間呢?
庫(kù)、包的“嫉妒”
Verilog很嫉妒別的語(yǔ)言豐富的庫(kù)、包文件(Python:你直接念我身份證)。
Verilog的“暴食”
對(duì)于復(fù)雜設(shè)計(jì),Verilog設(shè)計(jì)基本都是以“年、月”進(jìn)行計(jì)時(shí)的,對(duì)于時(shí)間簡(jiǎn)直就是惡魔。
調(diào)試的時(shí)候更是麻煩,增減一個(gè)信號(hào)或者改動(dòng)一個(gè)小小邏輯都需要重新綜合(調(diào)整時(shí)序時(shí)候需要插入寄存器的時(shí)候,想想都恐怖~)。
時(shí)間的“暴食”
大型設(shè)計(jì)以月為時(shí)間進(jìn)行計(jì)時(shí),調(diào)試時(shí)候更是“摸魚”黨的福利~
Verilog的“暴怒”
由于上面的各種缺陷,導(dǎo)致一些老工程師在編寫Verilog時(shí)候?yàn)榱吮WC綜合性及正確性會(huì)將設(shè)計(jì)的“邏輯性”很強(qiáng),如果沒有好的注釋,就會(huì)導(dǎo)致其他人在讀代碼時(shí)候可讀性比較差(SV在這方面改進(jìn)了很多,使代碼的自讀性加強(qiáng))。
注釋的“暴怒”
沒有注釋看得你“抓狂”。
總結(jié)
上面的觀點(diǎn)比較偏激,都是拿著Verilog的缺點(diǎn)對(duì)比其他語(yǔ)言的優(yōu)點(diǎn),大家看看笑笑就好了,千萬別較真,任何語(yǔ)言都有自己局限性,如果有那么優(yōu)秀的編程語(yǔ)言,目前就不會(huì)出現(xiàn)幾十上百種設(shè)計(jì)語(yǔ)言了。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1650文章
22204瀏覽量
626740 -
VHDL語(yǔ)言
+關(guān)注
關(guān)注
1文章
113瀏覽量
19173 -
鎖存器
+關(guān)注
關(guān)注
8文章
947瀏覽量
43293 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8681
原文標(biāo)題:Verilog“七宗罪”
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
在verilog中調(diào)用VHDL模塊
請(qǐng)問優(yōu)化后代碼調(diào)試不方便怎么辦?
基于liteos-a,能方便地開發(fā)GUI程序嗎?
簡(jiǎn)單分享一下Arduino程序編寫
總結(jié)一下串口的幾種使用方法
總結(jié)一下STM32串口的用法
簡(jiǎn)單總結(jié)一下電容和二極管應(yīng)用場(chǎng)景和選型方式
簡(jiǎn)單介紹一下數(shù)模混合信號(hào)建模語(yǔ)言Verilog-AMS
基于verilog的FPGA編程經(jīng)驗(yàn)總結(jié)

簡(jiǎn)單介紹一下-Verilog-AMS的基礎(chǔ)知識(shí)

Verilog在設(shè)計(jì)時(shí)候的不方便地方
總結(jié)一下OpenCV遍歷圖像的幾種方法
簡(jiǎn)單聊一下多點(diǎn)觸控協(xié)議
簡(jiǎn)單介紹一下什么是微波通訊?

總結(jié)一下LM317的幾種經(jīng)典應(yīng)用電路

評(píng)論