相信不少人都聽過verilog這個(gè)詞,今天我就想講一講我所理解的verilog是什么。
Verilog是一種硬件描述語言,它最基本的功能,就是把一份電路圖用代碼的形式表示出來,然后讓計(jì)算機(jī)理解一份代碼所對(duì)應(yīng)的電路。
硬件描述語言有很多,現(xiàn)在主流的基本就是verilog,或者它的升級(jí)版systemverilog。之前上學(xué)的時(shí)候還接觸過VHDL,但現(xiàn)在好像慢慢地沒什么人在用了。
Verilog代碼和C、Java這種計(jì)算機(jī)編程語言有本質(zhì)的不同,verilog里基本所有寫出來的東西都會(huì)對(duì)應(yīng)實(shí)際的電路。
聲明變量的時(shí)候如果指定是一個(gè)reg,那么這個(gè)變量就有寄存數(shù)值的功能,可以綜合出來一個(gè)實(shí)際的寄存器;如果指定是一段wire,那么他就只能傳遞數(shù)據(jù),只是表示一條線。
在verilog里寫一個(gè)判斷可能就對(duì)應(yīng)了一個(gè)mux,寫一個(gè)for可能就是把一段電路重復(fù)好幾遍(這在電路設(shè)計(jì)中是不太實(shí)用的,for語句也好像只在systemverilog中才支持)。
最能體現(xiàn)電路設(shè)計(jì)思想的就是always塊了,它可以指定某一個(gè)信號(hào)在某個(gè)值或某個(gè)跳變的時(shí)候執(zhí)行塊里的代碼。
總之,前端工程師寫verilog代碼的目的,就是要對(duì)應(yīng)出一個(gè)實(shí)際的電路出來,這個(gè)電路會(huì)完成我們期望的邏輯功能。
但是,人類寫出來的verilog代碼是高度抽象的,一般人甚至編碼者自己也很難把一段verilog代碼和實(shí)際的電路聯(lián)系起來。
編碼者在編寫的時(shí)候更多的是關(guān)心信號(hào)的邏輯功能有沒有錯(cuò)誤,我們會(huì)看每一個(gè)關(guān)鍵信號(hào)的波形,確保輸入輸出一切正常。
至于哪里用了一個(gè)三輸入與門或者兩個(gè)二輸入與門我們不會(huì)去關(guān)心。一般就把這些人類寫出來的很抽象的代碼叫做verilog RTL代碼,RTL是register transition level。
RTL代碼要翻譯給機(jī)器看懂,還要經(jīng)過synthesis(綜合)這一步。這一步是tool完成的,它表示就把RTL變成最基本的邏輯門連接的形式,還是以verilog的格式寫出來,一般我們就稱綜合后的verilog為網(wǎng)表文件,或者叫netlist。
綜合的時(shí)候已經(jīng)要開始考慮芯片PPA的性能了,要知道,一段邏輯相同的電路,可能有很多種實(shí)現(xiàn)方式。
比如說一個(gè)邏輯表達(dá)式可以寫成與非的形式,也能寫成或非形式,對(duì)應(yīng)的電路可能就是與非門或者或非門。
而對(duì)于同一種電路,選用的cell可能也不一樣,同樣是一顆buffer,要選驅(qū)動(dòng)能力多大的、開啟電壓選多大的等等也有很多講究。
后端在拿到netlist就可以布局布線了,我們后端在做的時(shí)候netlist也不是會(huì)一成不變的,我們會(huì)在確保邏輯功能不變的前提下對(duì)netlist進(jìn)行改動(dòng)。
但是,改動(dòng)之后必須要和改動(dòng)前的netlist對(duì)比檢查,確保沒有改它的邏輯才行。
這一步有時(shí)候我們就會(huì)稱為formal檢查,formality就是一個(gè)可以用來做這種檢查的工具,synopsys家的。實(shí)際上,前端在綜合前后也會(huì)做類似的檢查。
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
芯片設(shè)計(jì)
+關(guān)注
關(guān)注
15文章
1015瀏覽量
54876 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110074 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59759
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論