其實和ASIC的RTL代碼檢測用具一樣的,主要是lint的檢查
nlint, spyglass什麼的都可以做RTL的lint檢查
B. 學習FPGA,在沒有開發板的情況下用哪些軟體
ModelSim要學會編寫testbench
然後測試時族鄭序
這個主要是verilog方面
實際使用中FPGA還設計到電路設計
以及FPGA裡面的IP核使用(PLL,DSP,CPU,等)
還有FPGA與外部晶元的介面(I2C,RS232,SDRAM,FLASH等)
這些東西我覺得要實際操作的,即需要實驗兆咐頌板的
如果你對這方面感興趣
學校里有老師用單片機做事的話,就去找他們
因簡答為你想學(免學費和開發板),老師要人做事情(免工資),
對於這種雙贏關系,老師沒道理拒絕的
C. 天奧fpga用什麼軟體
天奧fpga可以用ModelSimSE版本軟體。
學習FPGA關鍵不是什麼軟體,而是語言。關於ModelSim 雖然這些開發軟體都有自帶的模擬工具,但是我們推薦使用獨立激活的ModelSimSE版本,該版本功能強大,操作起來更加得心應手,是眾多FPGA開發工程師的不二選擇。
關於文本編輯器,之所以拿大敬使用第三方代碼編輯器是因為軟體自帶的代碼消慎編輯器在某些功能上做的並仿笑不是很好,為了加快開發效率,我們習慣選擇。
D. 怎樣利用quartus 2 進行FPGA的燒寫測試
要在硬體上驗證的話,必須的寫燃灶一個可以渣皮綜合的激勵文件給待測模塊的輸入埠,編如段差譯的時候帶了stp的工程產生的sof,不管通過什麼下載都可以用signaltap去監視信號。signaltap只是一種比較簡單的方法,還可以通過串口把數據都寫到上位機,直接在pc上看數據,不過這些都需要寫程序去實現,相對比較復雜
E. FPGA是什麼,有用嗎
FPGA是在PAL、GAL等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可編程器件門電路數有限的缺點。
FPGA設計不是簡單的晶元研究,主要是利用 FPGA 的模式進行其他行業產品的設褲賀歲計。 與 ASIC 不同,FPGA在通信行業的應用比較廣泛。通過對全球FPGA產品市場以及相關供應商的分析,結合當前我拍掘國的實際情況以及國內領先的FPGA產品可以發現相關技術在未來的發展方向,對我國科技水平的全面提高具有非常重要的推動作用。
(5)fpga測試工具擴展閱讀:
FPGA 器件屬於專用集成電路中的一種半定製電路,是可編程的邏輯列陣,能夠有效的解決原有的器件門電路數較少的問題。FPGA 的基本結構包括可編程輸入輸出單元,可配置邏輯塊,數字時鍾管理模塊,嵌入式塊RAM,布線資源,內嵌專用硬核,底層內嵌功能單元。
由於FPGA具有布線資源豐富,可重復編程和集成度高,投資較低的特點,在數字電路設計領域得到了廣泛的應用。FPGA的設計流程包括演算法設計、代碼模擬以及設計、板機調試,設計者以及實際需求建立演算法架構,利用EDA建立設計方案或HD編寫設計代碼,通過代碼模擬保證設計方案符合實際要求,最後進行板級調胡睜試,利用配置電路將相關文件下載至FPGA晶元中,驗證實際運行效果。
F. 基於FPGA的信號發生器 的TESTBENCH(測試文本)程序怎麼編
1.激勵的設置
相應於被測試模塊的輸入激勵設置為reg型,輸出相應設置為wire類型,雙向埠inout在測試中需要進行處理。
方法1:為雙向埠設置中間變數inout_reg作為該inout的輸出寄存,inout口在testbench中要定義為wire型變數,然後用輸出使能控制傳輸方向。
eg:
inout [0:0] bi_dir_port;
wire [0:0] bi_dir_port;
reg [0:0] bi_dir_port_reg;
reg bi_dir_port_oe;
assign bi_dir_port=bi_dir_port_oe?bi_dir_port_reg:1'bz;
用bi_dir_port_oe控制埠數據方向,並利用中間變數寄存器改變其值。等於兩個模塊之間用inout雙向口互連。往埠寫(就是往模塊裡面輸入)
方法2:使用force和release語句,這種方法不能准確反映雙向埠的信號變化,但這種方法可以反映塊內信號的變化。具體如示:
mole test();
wire data_inout;
reg data_reg;
reg link;
#xx; //延時
force data_inout=1'bx; //強製作為輸入埠
...............
#xx;
release data_inout; //釋放輸入埠
endmole
從文本文件中讀取和寫入向量
1)讀取文本文件:用 $readmemb系統任務從文本文件中讀取二進制向量(可以包含輸入激勵和輸出期望值)。$readmemh 用於讀取十六進制文件。清段例如:
reg [7:0] mem[1:256] // a 8-bit, 256-word 定義存儲器mem
initial $readmemh ( "mem.data", mem ) // 將.dat文件讀入寄存器mem中
initial $readmemh ( "mem.data", mem, 128, 1 ) // 參數為寄存器載入數據的地址始終
2)輸出文本文件:打開輸出文件用?$fopen 例如:
integer out_file; // out_file 是一個文件描述,需要定義為 integer類型
out_file = $fopen ( " cpu.data " ); // cpu.data 是需要打開的文件,也就是最終的輸出文本
設計中的信號值可以通過$fmonitor, $fdisplay,
2. Verilog和Ncverilog命令答鋒譽使用庫文件或庫目錄
ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v //一般編譯文件在run.f中, 庫文件在lib.v中,lib2目錄中的.v文件系統自動搜索
使用庫文件或庫目錄,只編譯需要的模塊而不必全部編譯
3.Verilog Testbench信號記錄的系統任務基辯:
1). SHM資料庫可以記錄在設計模擬過程中信號的變化. 它只在probes有效的時間內記錄你set probe on的信號的變化.
ex). $shm_open("waves.shm"); //打開波形資料庫
$shm_probe(top, "AS"); // set probe on "top",
第二個參數: A -- signals of the specific scrope
S -- Ports of the specified scope and below, excluding library cells
C -- Ports of the specified scope and below, including library cells
AS -- Signals of the specified scope and below, excluding library cells
AC -- Signals of the specified scope and below, including library cells
還有一個 M ,表示當前scope的memories, 可以跟上面的結合使用, "AM" "AMS" "AMC"
什麼都不加表示當前scope的ports;
$shm_close //關閉資料庫
2). VCD資料庫也可以記錄在設計模擬過程中信號的變化. 它只記錄你選擇的信號的變化.
ex). $mpfile("filename"); //打開資料庫
$mpvars(1, top.u1); //scope = top.u1, depth = 1
第一個參數表示深度, 為0時記錄所有深度; 第二個參數表示scope,省略時表當前的scope.
$mpvars; //depth = all scope = all
$mpvars(0); //depth = all scope = current
$mpvars(1, top.u1); //depth = 1 scope = top.u1
$mpoff //暫停記錄數據改變,信號變化不寫入庫文件中
$mpon //重新恢復記錄
3). Debussy fsdb資料庫也可以記錄信號的變化,它的優勢是可以跟debussy結合,方便調試.
如果要在ncverilog模擬時,記錄信號, 首先要設置debussy:
a. setenv LD_LIBRARY_PATH :$LD_LIBRARY_PATH
(path for debpli.so file (/share/PLI/nc_xl//nc_loadpli1))
b. while invoking ncverilog use the +ncloadpli1 option.
ncverilog -f run.f +debug +ncloadpli1=debpli:deb_PLIPtr
fsdb資料庫文件的記錄方法,是使用$fsdbDumpfile和$fsdbDumpvars系統函數,使用方法參見VCD
注意: 在用ncverilog的時候,為了正確地記錄波形,要使用參數: "+access+rw", 否則沒有讀寫許可權
在記錄信號或者波形時需要指出被記錄信號的路徑,如:tb.mole.u1.clk.
………………………………………………………………………………………………………
關於信號記錄的系統任務的說明:
在testbench中使用信號記錄的系統任務,就可以將自己需要的部分的結果以及波形文件記錄下來(可採用sigalscan工具查看),適用於對較大的系統進行模擬,速度快,優於全局模擬。使用簡單,在testbench中添加:initial begin
$shm_open("waves.shm");
$shm_probe("要記錄信號的路徑「,」AS「);
#10000
$shm_close; 即可。
4. ncverilog編譯的順序: ncverilog file1 file2 ....
有時候這些文件存在依存關系,如在file2中要用到在file1中定義的變數,這時候就要注意其編譯的順序是
從後到前,就先編譯file2然後才是file2.
5. 信號的強制賦值force
首先, force語句只能在過程語句中出現,即要在initial 或者 always 中間. 去除force 用 release 語句.
initial begin force sig1 = 1'b1; ... ; release sig1; end
force可以對wire賦值,這時整個net都被賦值; 也可以對reg賦值.
6.載入測試向量時,避免在時鍾的上下沿變化
為了模擬真實器件的行為,載入測試向量時,避免在時鍾的上下沿變化,而是在時鍾的上升沿延時一個時間單位後,載入的測試向量發生變化。如:
assign #5 c=a^b
……
@(posedge clk) #(0.1*`cycle) A=1;
******************************************************************************
//testbench的波形輸出
mole top;
...
initial
begin
$mpfile("./top.vcd"); //存儲波形的文件名和路徑,一般是.vcd格式.
$mpvars(1,top); //存儲top這一層的所有信號數據
$mpvars(2,top.u1); //存儲top.u1之下兩層的所有數據信號(包含top.u1這一層)
$mpvars(3,top.u2); //存儲top.u2之下三層的所有數據信號(包含top.u2這一層)
$mpvars(0,top.u3); //存儲top.u3之下所有層的所有數據信號
end
endmole
//產生隨機數,seed是種子
$random(seed);
ex: din <= $random(20);
//模擬時間,為unsigned型的64位數據
$time
ex:
...
time condition_happen_time;
...
condition_happen_time = $time;
...
$monitor($time,"data output = %d", dout);
...
//參數
parameter para1 = 10,
para2 = 20,
para3 = 30;
//顯示任務
$display();
//監視任務
$monitor();
//延遲模型
specify
...
//describ pin-to-pin delay
endspecify
ex:
mole nand_or(Y,A,B,C);
input A,B,C;
output Y;
AND2 #0.2 (N,A,B);
OR2 #0.1 (Y,C,N);
specify
(A*->Y) = 0.2;
(B*->Y) = 0.3;
(C*->Y) = 0.1;
endspecify
endmole
//時間刻度
`timescale 單位時間/時間精確度
//文件I/O
1.打開文件
integer file_id;
file_id = fopen("file_path/file_name");
2.寫入文件
//$fmonitor只要有變化就一直記錄
$fmonitor(file_id, "%format_char", parameter);
eg:$fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);
//$fwrite需要觸發條件才記錄
$fwrite(file_id, "%format_char", parameter);
//$fdisplay需要觸發條件才記錄
$fdisplay(file_id, "%format_char", parameter);
$fstrobe();
3.讀取文件
integer file_id;
file_id = $fread("file_path/file_name", "r");
4.關閉文件
$fclose(fjile_id);
5.由文件設定存儲器初值
$readmemh("file_name", memory_name"); //初始化數據為十六進制
$readmemb("file_name", memory_name"); //初始化數據為二進制
//模擬控制
$finish(parameter); //parameter = 0,1,2
$stop(parameter);
//讀入SDF文件
$sdf_annotate("sdf_file_name", mole_instance, "scale_factors");
//mole_instance: sdf文件所對應的instance名.
//scale_factors:針對timming delay中的最小延時min,典型延遲typ,最大延時max調整延遲參數
//generate語句,在Verilog-2001中定義.用於表達重復性動作
//必須事先聲明genvar類型變數作為generate循環的指標
eg:
genvar i;
generate for(i = 0; i < 4; i = i + 1)
begin
assign = din[i] = i % 2;
end
endgenerate
//資源共享
always @(A or B or C or D)
sum = sel ? (A+B):(C+D);
//上面例子使用兩個加法器和一個MUX,面積大
//下面例子使用一個加法器和兩個MUX,面積小
always @(A or B or C or D)
begin
tmp1 = sel ? A:C;
tmp2 = sel ? B:D;
end
always @(tmp1 or tmp2)
sum = tmp1 + tmp2;
******************************************************************************
模板:
mole testbench; //定義一個沒有輸入輸出的mole
reg …… //將DUT的輸入定義為reg類型
……
wire…… //將DUT的輸出定義為wire類型
……
//在這里例化DUT
initial
begin
…… //在這里添加激勵(可以有多個這樣的結構)
end
always…… //通常在這里定義時鍾信號
initial
//在這里添加比較語句(可選)
end
initial
//在這里添加輸出語句(在屏幕上顯示模擬結果)
end
endmole
一下介紹一些書寫Testbench的技巧:
1.如果激勵中有一些重復的項目,可以考慮將這些語句編寫成一個task,這樣會給書寫和模擬帶來很大方便。例如,一個存儲器的testbench的激勵可以包含write,read等task。
2.如果DUT中包含雙向信號(inout),在編寫testbench時要注意。需要一個reg變數來表示其輸入,還需要一個wire變數表示其輸出
G. 有沒有DSP與FPGA通信的硬體測試軟體
一般搞dsp+fpga的方案會遇到這種問題
看你fgpa和dsp是通過什麼連上的
如果fpga掛在dsp的emif上就可以定義一段地址空間給fpga,並在fpga內部例化若干blockram
以供dsp訪問,dsp對這段地址空間進行寫-讀驗證就可以了
其他的原腔明理也類似
例如spi介面,i2c介面,uart等等,都可以租純的
一般沒有現成的軟體給你用,自己寫一個就可以,弊圓咐不會太難
H. 如何簡化FPGA測試和調試
獲得FPGA內部信號有限、FPGA封裝和印刷電路板電氣雜訊,這一切使得設計調試和檢驗變成設計周期中最困難的流程。此外,幾乎當前所有的像CPU、DSP、ASIC等高速晶元的匯流排,除了提供高速並行匯流排介面外,正迅速向高速串列介面的方向發展。FPGA也不例外,每一條物理鏈路的速度從600Mbps到高達10Gbps,高速IO的測試和驗證更成為傳統專注於FPGA內部邏輯設計的設計人員面臨的巨大挑戰。這些挑戰使設計人員會把絕大部分設計周期時間放在調試和檢驗設計上。設計階段即應考慮測試問題在FPGA系統設計完成前,有兩個不同的階段:設計階段、調試和檢驗階段。設計階段的主要任務是輸入、模擬和實現;調試和檢驗階段的主要任務是檢驗設計,校正發現的任何錯誤。在設計階段不僅要設計,而且要使用模擬工具開始調試。實踐證明,正確使用模擬技術為找到和校正設計錯誤提供了一條有效的途徑。但是,不應依賴模擬作為調試FPGA設計的唯一工具,有許多問題僅僅通過模擬是無能為力的。此外,還需要提前考慮調試和檢驗階段,規劃怎樣在線快速調試FPGA,這可以定義整體調試方法,幫助識別要求的任何測試測量工具,確定選擇的調試方法對電路板設計帶來的影響。針對可能選用的FPGA存在的高速匯流排,除了考慮邏輯時序的測試和驗證外,應該充分考慮後面可能面臨的信號完整性測試和分析難題。在調試階段,必需找到模擬沒有找到的棘手問題。怎樣以省時省力的方式完成這一工作是一個挑戰。嵌入式邏輯分析儀只能進行狀態分析在設計階段需要作出的關鍵選擇是使用哪種FPGA調試方法。在理想情況下,希望有一種方法可以移植到所有FPGA設計中,能夠洞察FPGA內部運行和系統運行過程,為確定和分析棘手的問題提供相應的處理能力。基本在線FPGA調試方法有兩種:使用嵌入式邏輯分析儀以及使用外部邏輯分析儀。選擇使用哪種方法取決於項目的調試需求。主要FPGA廠商針對器件的在線調試都提供了嵌入式邏輯分析儀內核。這些知識產權模塊插入FPGA設計中,同時提供觸發功能和存儲功能。它們使用FPGA邏輯資源實現觸發電路,使用FPGA存儲模塊實現存儲功能。它們使用JTAG配置內核操作,並用來把捕獲的數據傳送到PC上進行查看。由於嵌入式邏輯分析儀使用內部FPGA資配盯源,因此其通常用於大型FPGA,這些大型FPGA可以更好地消化插入內核帶來的開銷。一般來說,用戶希望內核佔用的FPGA邏輯資源不超過可用資源的5%。與任何調試方法一樣,還要知道這種方法存在的部分矛盾。在針腳與內部資源上,嵌入邏輯分析儀內核不使用額外的測試針腳,因為它通過現有的JTAG針腳訪問內核。這意昧著即使設計受到FPGA針腳限制,您也可以使用這種方法。矛盾在於,它使用的內部FPGA邏輯資源和存儲模塊可以用來實現設計。此外,由於使用片內內存存儲捕獲的數據,因此內存深度一般相對較淺。嵌入式邏輯分析儀核心的探測非常簡單。它使用現有的JTAG針腳,因此不必擔心怎樣把外部邏輯分析儀連接到系統上。矛盾在於,盡管嵌入式邏輯分析儀可以查看FPGA操作,但沒有一種方式把這些信息與電路板級或系統級信息時間關聯起培神和來。而把FPGA內部的信號與FPGA外部的信號關聯起來對解決最棘手的調試挑戰至關重要。在分析方法上,嵌入式邏輯分析儀只能進行狀態分析。從成本與靈活性上分析,大多數FPGA廠商提供了嵌入式邏輯分析儀內核,而其價格要低於全功能外部邏輯瞎慧分析儀。雖然用戶希望更多的功能,但嵌入式邏輯分析儀內核的功能無論通用性、分析方式、觸發能力,還是存儲和分析能力都弱於全功能外部邏輯分析儀,而用戶通常需要這些功能,來捕獲和分析棘手的調試挑戰。
I. 如何用JTAG測試FPGA的硬體
對於altera來說,先建立基本的工程,編寫代碼,編譯正確以後,啟動signaltapii,在其中選擇觸發時鍾,觸升或豎發條件,加上需要觀察的內部網路(信號),把文件存儲,退吵大出signaltapii的時候軟體會自動提示是否把剛才建立的文件加入工程,選擇是,回到原來的工程,再次編譯,生成的載入文件通過jtag載入到fpga後就可以在signaltapii中團裂進行jtag調試了。
J. 如何對已經燒好的fpga進行測試
第一,在對應廠家的編譯工具軟體新建一個工程。
第二,將你的 VHDL文件加入工程敗讓中去。
第三,添加約束文件。
第四,編譯。
第五,將編譯文件通過JTAG介面下載到察猛局FPGA中。
如果一切OK,那到此為止。
如果ADC數據不正確。則:
第六,代碼裡面增加信號分析文件。
第七,重知空新編譯載入。
第八,通過廠家分析工具,查看各信號是否正確。
如果找到問題,則OK。
如果沒有找到問題,則抓取更多信號,重復第六,第七,第八,直到問題解決