文章出處:
引言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...