modelsim編譯
Ⅰ 如何用modelsim編譯systemC的設計
SystemC作為一種系統級設計與驗證語言,非常適合做復雜IC的驗證,而不是用於RTL描述。很多人問我如何將SystemC綜合和編譯為可以下載的CPLD/FPGA的比特文件或者綜合為ASIC網表,我的回答是用SystemC做RTL設計還為時過早。可以想像將來可能將SystemC的行為級的描述綜合為網表,即所謂高層次綜合,這是一個很美好的未來,但未來不是現在。
Verilog/SystemVerilog依然是最好的RTL設計語言。未來的RTL設計屬於SystemVerilog。關於SystemC和SystemVerilog在設計中的地位問題,我認為在驗證方面,SystemC有明顯的優勢。如果你設計純粹的ASIC,那麼用SystemVerilog可能就足夠了。但是在很多場合,軟硬體同時存在,SystemC的代碼很多部分可以之間用於設計軟體,這個是很明顯的優勢。大家同時也可以看到,現在在ModelSim等模擬軟體中,SystemC使用起來跟Verilog/VHDL一樣,非常方便。舉一個例子,我們假如想做DVB-S2的LDPC,我們一定會先用C++(M atlab也可以)寫模擬程序,驗證演算法的正確性。然後假設我們已經確定了目標ASIC的架構,打算用Verilog做RTL設計。現在既然C++代碼的驗證部分可以幾乎不加改變的用於基於SystemC的驗證模塊的設計,我們為什麼還要費力的用SystemVerilog重新寫一遍驗證代碼呢?
下面步入正題,講一講如何在ModelSim下編譯和模擬SystemC的設計。我們設計一個一位移位寄存器模塊(Verilog代碼): 1.shifter.v
`timescale 1ns/100ps
mole shifter(clk,nrst,din,dout); input clk,nrst; input din;
output reg dout;
always (posedge clk or negedge nrst) begin:shifter_with_nreset if(~nrst) dout<=1'b0; else dout<=din; end
endmole
頂層設計為驗證模塊加shifter模塊的例化: 2.tb.v
`timescale 1ns/100ps mole tb;
wire clk,nrst,data,data_fd_bk; shifter_test
tester(.clk(clk),.nrst(nrst),.data(data),.data_fd_bk(data_fd_bk)); shifter uut(.clk(clk),.nrst(nrst),.din(data),.dout(data_fd_bk)); endmole
其中shifter_test用SystemC描述。這個例子實際上不能顯示SystemC的好處。 下面是SystemC的代碼: 3.Shifter_test.h
#ifndef __shifter_test_h #define __shifter_test_h
#include #include
SC_MODULE(shifter_test) {
public:
// Mole ports
sc_out clk,nrst; sc_out data;
sc_in data_fd_bk; bool data_reg; bool err;
sc_clock internal_clk;
void st_behaviour() {
nrst=0; data=0;
wait(5); data=1; wait(2); nrst=1; wait(2); while(1) {
data=0; wait(2); data=1; wait(3); data=0; wait(4);
if(err) printf("Test failed"); else printf("Test passed\n"); } }
void gen_clk(){clk=internal_clk.read();} void disp_data(){
printf("nrst=%d,data input=%d,data
output=%d\n",nrst.read(),data_reg,data_fd_bk.read());
if((nrst.read()==1) && (data_reg!=data.read())) {
err=1;
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
assert(false); }
data_reg=data.read(); }
SC_CTOR(shifter_test)
:clk("clk"),nrst("nrst"),data("data"),data_fd_bk("data_fd_bk"),internal_clk("internal_clk",1000,0.5,SC_NS) {
SC_METHOD(gen_clk);
sensitive<<INTERNAL_CLK; dont_initialize();
SC_CTHREAD(st_behaviour, clk.pos());
SC_METHOD(disp_data); sensitive<<CLK.NEG();
err=0; } }; #endif
4.shifter_test.cpp
#include "shift_test.h" SC_MODULE_EXPORT(shifter_test);
只有兩行代碼。注意這里SC_MODULE_EXPORT的作用是將systemc的模塊對其它語言可見。將以上4個文件加入到ModelSim的Project中,之後輸入編譯命令如下: sccom –g *.cpp sccom –link vlog *.v vsim tb 之後就可以根據需要看一些信號的模擬波形了。這里只有 sccom –g *.cpp sccom –link 與
SystemC有關。 在ModelSim中選擇Compile all之後,再執行sccom –link,其效果等價於sccom –g *.cpp;vlog *.v;sccom –link。
Ⅱ 如何在modelsim中編譯xilinx的庫文件
將Modelsim根目錄下的modelsim.ini的屬性由只讀改為可寫。
新建一個文件夾,比如library(為敘述方便,把它放在modelsim的根目錄下)。D:/modelsim/library.
啟動Modelsim,選擇[File]/[chang
Directory],選擇D:/modelsim/library.
選擇[File]/[New]/[library]命令,彈出[Creat a New
library],在[lihrary
Name]中輸入「simprims_ver」,同時下一欄也自動輸入「simprims_ver」,單擊OK。
在主窗口中選擇[compile]/[Compile]命令,彈出[compile Source
Files],在[Library]的下拉列表中選擇「simprims_ver」在[查找范圍]中選中[Xilinx/veriog/src/simprims]目錄下的全部文件,單擊complie進行編譯。(這時可能會花你一些時間,耐心等待編譯完畢)用同樣的方法將unisims和Xilinxcorelib三個模擬庫進行編譯。
這時在D:/modelsim/library 下就有以上三個模擬庫。
7.總結步驟為a:建立庫的放置路徑b:對庫進行編譯c:對庫進行映射。最後重新啟動Modelsim可以在列表中看到建立的三個庫。
那麼這個辦法明顯是比較麻煩的。其實我們可以這樣做;
首先將modelsim.ini文件只讀模式去掉,存檔前面打對勾。
在您安裝ise的目錄下,進入到bin\nt目錄下,例如e:\ise6\bin\nt,確認有compxlib這個程序
在cmd中運行compxlib -s mti_se -f all -l all -o
e:\modeltech_6.0\xilinx_libs就可以了,e:\modeltech_6.0是我安裝modelsim的目錄,您可以作相應的更改。參數也可以按照您的要求作相應的更改。
這樣就可以了。
需要注意的是,千萬記住ise和modelsim的安裝目錄都不要出現空格,最好是直接安裝在根目錄下。
具體單獨用modelsim進行behavioral
model的方法是,打開modelsim,把你的代碼和模擬代碼文件加入,別忘了加入glbl.v文件。在哪裡?自己找吧。然後編譯,work庫這些設置好後,命令行(modelsim里的)輸入
vsim -L Xilinxcorelib_ver -L unisims_ver -L simprims_ver -libwork$yourtestname glbl就可以了
我自己發現的更簡便的編譯方法,bin\nt
文件夾下有一個compxlibgui.exe程序,直接運行,後邊的步驟很傻瓜,試試就明白了:)
Ⅲ Modelsim SE版本每次調用都需要重新編譯庫,怎麼解決
確認環境變數設置正確並且在modelsim安裝目錄下modelsim.ini文件中有庫映射語句
比如編譯一個叫my_lib的庫 需要在modelsim.ini添加一句my_lib = {path}/my_lib
{path}就是my_lib所在路徑
modelsim.ini需要修改只讀屬性
然後模擬的時候腳本裡面vsim的選項中載入這個庫就可以了 比如vsim -L my_lib work.my_sim
Ⅳ 如何用ModelSim se完全編譯Xilinx庫文件
Modlesim 模擬庫的建立:
將Modelsim根目錄下的modelsim.ini的屬性由只讀改為可寫。
新建一個文件夾,比如library(為敘述方便,把它放在modelsim的根目錄下)。D:/modelsim/library.
啟動Modelsim,選擇[File]/[chang Directory],選擇D:/modelsim/library.
選擇[File]/[New]/[library]命令,彈出[Creat a New library],在[lihrary Name]中輸入「simprims_ver」,同時下一欄也自動輸入「simprims_ver」,單擊OK。
在主窗口中選擇[compile]/[Compile]命令,彈出[compile Source Files],在[Library]的下拉列表中選擇「simprims_ver」在[查找范圍]中選中[Xilinx/veriog/src/simprims]目錄下的全部文件,單擊complie進行編譯。(這時可能會花你一些時間,耐心等待編譯完畢)用同樣的方法將unisims和Xilinxcorelib三個模擬庫進行編譯。
這時在D:/modelsim/library 下就有以上三個模擬庫。
7.總結步驟為a:建立庫的放置路徑b:對庫進行編譯c:對庫進行映射。最後重新啟動Modelsim可以在列表中看到建立的三個庫。
那麼這個辦法明顯是比較麻煩的。其實我們可以這樣做;
首先將modelsim.ini文件只讀模式去掉,存檔前面打對勾。
在您安裝ise的目錄下,進入到bin
t目錄下,例如e:ise6in
t,確認有compxlib這個程序
在cmd中運行compxlib -s mti_se -f all -l all -o e:modeltech_6.0xilinx_libs就可以了,e:modeltech_6.0是我安裝modelsim的目錄,您可以作相應的更改。參數也可以按照您的要求作相應的更改。
這樣就可以了。
需要注意的是,千萬記住ise和modelsim的安裝目錄都不要出現空格,最好是直接安裝在根目錄下
modelsim下編譯xilinx庫的方法
這幾天,建庫的問題比較多,寫一個建庫的方法。
所用軟體:ISE7.1i+ModelsimSE6.0
語言:VHDL
首先安裝軟體。注意:ISE,Modelsim的安裝路徑不能含有空格。
另外,Modelsim的安裝路徑可設為「$:/modelsim」,其中$為盤符,不要使用默認的安裝路徑。
將Modelsim根目錄下的modelsim.ini文件的只讀屬性去掉。
在modelsim的命令窗口中輸入命令「compxlib -s mti_se -arch all -l vhdl -w -lib all」,按回車鍵即可。
編譯完成後,將Modelsim根目錄下的modelsim.ini文件的屬性設置為只讀。
關於「compxlib」命令各項參數的含義,請在modelsim的命令窗口中輸入「compxlib -help」查詢
把庫建好後,接下來的事情就是使它成為modelsim的標准庫。這只要修改modelsim安裝目錄下的modelsim.ini文件就可以了。修改後的內容如下:
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
verilog = $MODEL_TECH/../verilog
vital2000 = $MODEL_TECH/../vital2000
std_developerskit = $MODEL_TECH/../std_developerskit
synopsys = $MODEL_TECH/../synopsys
modelsim_lib = $MODEL_TECH/../modelsim_lib
simprim_ver = G:/EDA/Xilinx/simprim_ver(庫的路徑,以下同)
unisim_ver = G:/EDA/Xilinx/unisim_ver
xilinxcorelib_ver = G:/EDA/Xilinx/xilinxcorelib_ver
注意的是,這個文件是只讀屬性。修改之前要把這個屬性去掉。
第六步:關掉工程,重啟modelsim。查看這3個庫是否在library框裡面。
二、 在ISE環境下,調用synplify,生成後模擬所需要的文件。
之所以要在ISE環境下調用synplify,主要是因為方便!我也嘗試過在synplify環境下綜合設計文件,然後在ISE里編譯synplify生成的edif文件。但是不成功。ISE在第三方工具支持方面做的是比較好的,感覺跟用ISE直接綜合一樣。不過有一個缺點是看不了RTL原理圖。你可以在synplify中打開ISE生成的synplify工程文件,解決在ISE中不方便查看synplify綜合結果的問題。現在,就要開始第二個大步驟了!
第一步:創建ISE工程文件。選擇好器件。注意Design Flow中一定要選擇Synplify Pro Verilog。
第二步:綜合設計文件,也就是verilog文件。
ISE就會自動調用synplify。(如果沒有的話,那可能是你的系統環境變數沒有設置好)。此時會彈出一個對話框,要你選擇synplify的liscense。(這步本來不用說的。如果沒有對話框彈出來的話,也不要緊)隨便選擇一個,就等結果了。
第三步:生成後模擬需要的文件。
我們可以看到在Implement Design中有三個大分支,這對應著三種模擬。按你的需要按下相應的圖標,生成modelsim後模擬所需要的文件,下面對生成的文件和生成這些文件的圖標進行說明。
第三步:在彈出的對話框里,選擇SDF項。把ISE生成的SDF文件添加進出。如下圖:
記住Apply to Region這一項要寫好。它對應的是你的tb文件(就是測試文件)調用的頂層模塊名。(不是頂層模塊名!!)比如你的測試文件是text,例化頂層模塊top為i_top,那你應該這樣填:text/i_top或者/text/i_top。如果是第一種模擬,此步可以省略。
第四步:添加library。
我們創建的那三個庫終於派上用場了!我們要添加的就是這3個。選擇library項,添加這3個庫。你的庫建在哪裡,就去哪裡找!這個也不用說了吧
第五步:選擇要模擬的模塊。
你先不要急,看清楚再選。(有些朋友性子急,駕輕就熟就選了)
我們要選的模擬模塊可不止一個,如下圖,用CTRL鍵實現!!選了之後點0k!!
Ⅳ modelsim總是編譯不成功,出現錯誤near "mole": syntax error。求解答...
reg [7:0] ex <= [30:23] x;
reg [7:0] ey <= [30:23] y;
沒有這種寫法。要遵守硬體的coding style,不能像寫C語言一樣打懶算盤。
Ⅵ modelsim 編譯不了怎樣辦就是程序保存了以後編譯沒反應
2
modelsim模擬需要編寫測試文件,就是testbench,如果是您所敘述的情況,很有可能
6
問題:我燒寫經Quartus
5.0編譯的loopback程序,解碼晶元SAA7113和編
Ⅶ 如何在vim中直接用modelsim編譯。
我了個擦~我才剛剛要回答。。。
按以下命令:
Esc -> :! -> g++ abc.cpp
這樣就可以編譯c++文件啦~
「:!」就可以執行外部命令了。
Ⅷ modelsim編譯altera哪些元件庫常用
1.去除modelsim安裝目錄下modelsim.ini的只讀屬性(使得這個.ini的配置文件可以被修改)。
2.打開modelsim,更改目錄File->Changedirectory到根目錄下。
3.新建一個庫,取名為altera。
file->new->library,打開之後在LibraryName中寫上altera,點擊ok即可。
4,在modelsim的環境下對altera庫文件進行編譯
compile,打開對話框,library中選擇剛建的庫名altera,在查找范圍內選擇altera庫文件的所在地,一般是alteraquartusedasim_lib,若是用vhdl編寫代碼的則選擇vhdl,verilog編寫代碼的話就選verilog。
5,對altera的庫進行編譯時
首先編譯三個通用文件:220model.v,altera_mf.v,altera_primitives.v,編譯通過之後,繼續編譯所需要的器件文件,若使用的是cycloneii,則編譯cycloneii_atoms.v,編譯之後即可退出modelsim。
6.打開modelsim.ini文件,在[Library]下可以看到altera=altera這一句,,修改路徑,
把這一句改為altera=$MODEL_TECH/../altera,就ok了。
7.再把modelsim.ini的只讀屬性選上即可,再打開modelsim就能在Library欄看到添加的庫了。
Ⅸ 我用modelsim編譯的時候出現下面的錯誤,不知道怎麼改,請各位會的高手幫忙看一下
STD_LOGIC_2D (1 DOWNTO 0, 11 DOWNTO 0);
這個是???
2維數組不是這樣用的
TYEP row_type IS ARRAY(11 DOWNTO 0) OF STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL sub_wire4 : row_type ;
Ⅹ 編譯modelsim時出現以下錯誤
你剛開始學習寫這種代碼嗎?錯誤的地方有幾個,詳細見我注釋的地方
`timescale 1 ns/1 ps
mole fenpinqi_tb(clk,rst,clk_div);//埠號,難道你寫的testbench?testbench不需要埠號
input clk,rst;
output reg clk_div;
reg [15:0]counter;
always @(posedge clk)
if(!rst)
begin
counter<=0;
clk_div<=0;
end
else if(counter==56817)//這里不是賦值,要用「==」
begin
counter<=0;//時序邏輯要用非阻塞賦值
clk_div<=~clk_div;//你是要去反,不是比較大小和移位。報錯的地方子這里
end
else
counter<=counter+1;
endmole
另外,建議每個比較長的always塊都用begin。。。。end包裹起來。還有什麼問題,歡迎追問。希望能幫到你。