深入淺出FPGA 3 verilog HDL

2021-07-28 08:38:50 字數 3862 閱讀 2863

文章出處:

引言fpga最初階段的學習可以分為兩部分。一是hdl的語法,二是相關工具的使用。

這第一部分,就是verilog hdl或者vhdl,國內用verilog的佔得比例多一些。

對於第二部分,這要看具體的fpga開發過程,一般過程如下:

3.1 fpga開發flow

1》進行需求分析,演算法設計,模組劃分,形成文件,用的matlab,vesio或者ppt比較多。(分析設計)

2》用ue或者,slickedit,notepad++或者sourceinsight,或者ide自帶的編輯工具進行行為建模。(編碼)

3》用modlesim進行功能**,或用$dumpfile("rill.fsdb")生成fsdb檔案。(前**)

4》將fsdb檔案匯入debussy軟體,進行問題查詢定位,修改**。(除錯)

5》用synplify pro進行綜合,生成vqm檔案。(綜合)

6》用quartusii或者ise對vqm檔案進行p&r(布局和佈線),生成vo檔案和sdo檔案。(布局佈線)

7》再用modlesim對vo和sdo進行時序**,當然需要將fpga廠家的**庫檔案一同編譯進modlesim的**庫。(後**)

8》用quartusii 的time request新增約束並**。生成sof或者pof配置檔案。(實現)

9》燒寫配置檔案。(ok)

對於做ic/asic,步驟還會有元件庫的對映等工作。

3.1.1 形式驗證

形式驗證是一種靜態的驗證手段,它根據電路靜態地判斷兩個設計在功能上是否等價,常用來判斷乙個設計在修改前和修改後其功能是否保持一致。它執行時無需測試向量,但是必須有乙個參照設計和乙個待驗證的設計。參照設計時設計者認為功能上完備無缺的設計,理論上它可以用高階語言如c,c++實現的,也可以是用積體電路的建模鋂詓ystemc,或者驗證語言vera或specmane實現的;但是就實現而言,多數形式驗證過程中參照設計就是我們的rtl設計,一般用verilog或vhdl實現的。

當rtl級功能**或fpga驗證結束後,傳統的ic設計流程需要完成一下幾次門級**:綜合後門級**;dft之後的門級**;布局佈線之後的門級**等,如果設計很大或者電路很複雜,往往需要龐大的測試向量來驗證設計的功能及時序是否正確,這就使得我們花費在門級**的時間隨著電路規模的增直線上公升。

形式驗證在asic設計流程中猶如乙個迭代演算法,其最初的輸入是rtl設計,每次比較,都將上一次比較後的設計(第n-1次)作為參照設計處理之後的結果(第n次)進行比較,之所以這麼做,是基於以下考慮:

1.形式驗證工具開始比較前,首先在兩個設計中找到一一對應的比較點。

2.如果乙個設計改動太大,改變前後的功能是完全一致的,但如果形式驗證工具無法找到適合的比較點,也會認為這兩個設計不等價 形式驗證在asic設計流程中主要應用在以下幾個方面:rtl-rtl的對比,rtl-gate的對比,gate-gate的對比。採用形式驗證進行rtl 與rtl的比較,可以在較短的時間內驗證並保證**修改的過程中沒有引入功能性的錯誤;進行rtl與gate的對比,是驗證源**與綜合之後的門級網表是否等價,以保證綜合過程中不會出現任何錯誤;進行gate與gate的對比,主要是發生在驗證插入dft後的電路網表在功能上是否一致;生成時鐘樹前後的電路網表在功能上是否一致;布局佈線前後的電路網表在功能上是否一致等。

3.2 verilog hdl

我試圖通過乙個例子來說明verilog的語法。我自己寫的例子,希望能仔細體會。

乙個反相器:

3.2.1 反相器的行為級建模

[plain]view plain

copy

print?

module rill_not_behv  

(  input in,  

output reg out  

);  

always @*  

begin  

if(1 == in)  

begin  

out = 0;  

end  

else  

begin  

out = 1;  

end  

end  

endmodule  

3.2.2 rtl級建模

[plain]view plain

copy

print?

module rill_not_rtl  

(  input in,  

output out  

);  

assign out = in?0:1;  

endmodule  

3.2.3 門級建模

[plain]view plain

copy

print?

module rill_not_gate  

(  input in,  

output out  

);  

not rill_not(out,in);  

endmodule  

3.2.4 開關級建模,葉級建模

[plain]view plain

copy

print?

module rill_not_leaf  

(  input in,  

output out  

);  

supply1 pwr;  

supply0 gnd;  

pmos (out,pwr,in);  

nmos (out,gnd,in);  

endmodule  

3.2.5 使用者自定義原語(udp)

[html]view plain

copy

print?

primitive rill_not_pri  

(  input in,  

output out  

);  

specify  

(in=

>

out) = 2;// or (in*

>

out) = 2;  

endspecify  

table   

//in   :out  

0       :1;  

1       :0;  

endtable  

endprimitive  

3.3 測試,一定要習慣寫testbench

[html]view plain

copy

print?

module rill_not_tb;  

reg in;  

wire out;  

$dumpfile("rill.fsdb");  

$dumpvars;  

rill_not(.out(out),.in(in));  

always   

begin  

#10 in

= ~in;  

$display ("in:%d,out:%d",in,out);  

end  

initial  

begin  

#100 $stop;  

end  

$setup(clk,in,3);  

$hold(in,clk,3);  

$width(in,10);  

endmodule  

3.4 小結

語法不是學會的,是實踐會的。百煉自得,***。希望你把上面的**都能理解,並且知道他們之間的區別和聯絡。

以後說工具,modulesim,debussy,synplify,quartusii及其內部小工具。

深入淺出玩轉FPGA閱讀筆記(3) 開發流程

1.需求分析 根據需求,完成晶元選型 2.模組劃分 浩大工程分多模組完成,分工明確,便於後期維護 1.設計輸入 可以是 輸入或原理圖輸入,複雜應用一般用 輸入。2.綜合優化 將高層輸入 轉化為底層與門 非門 ram 觸發器等基本單元。3.行為 不涉及時序上的延時,單純驗證功能正確性,通過測試指令碼t...

深入淺出FPGA 11 夢回大唐

引言 大唐,就是咱中國。2012年倫敦奧運會結束了!剛看到一篇新聞,中國奧運代表團凱旋。從中國人第一次參加奧運會,到成為奧運奪金大國,過去了近30年!在fpga行業,中國什麼時候才能突破美國的壟斷和封鎖,成為fpga大國呢?30年?11.1 中國芯 做fpga的,用到的工具是前所未有的多!可有幾個是...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...