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包裹起来。还有什么问题,欢迎追问。希望能帮到你。