How to simulate the file with core(带IP核的文件)

How to simulate the file with core(带IP核的文件)

http://blog.csdn.net/lg2lh/article/details/51213440
http://www.doc88.com/p-7498874316214.html
http://www.360doc.com/content/12/0405/21/9644775_201229678.shtml
Modelsim-SE需要自己手动添加这些仿真库,我们如果设计中包含这些IP核,就必须在仿真之前,将这些库文件编译到Moldelsim 的库中去。
其实IP核只是我们要添加的其中一种库(MegaFunction),除此之外,我们还需要添加lpm库(设计中如果调用了lpm原件,需要添加此库),还有原语库(primitive),器件库(我们用的是cyclone),当然同一种库,还会分Verilog版和VHDL版

The method is as follows

NO.1 添加仿真库
我们将IP核等相关库文件编译到Modelsim中后,以后凡是设计中调用到IP核时,我们就不用再重复添加了。
由于要仿真xilinx的IP core,所以要添加编译好的有3个库,“simprims(用于进行布线仿真)”,“unisims(用于进行功能仿真)”和“xilinxcorelib(用于仿真xilinx的IP core)”
NO.2创建含有Xilinx IP核的工程并进行编译
NO.3指定IP核的仿真库

  1. Simulate ->Start Simulate 打开对话框;
  2. 单击【library】标签,在【search Libraries】栏中添加第一步中已经编译好的”XilinxCoreLib_ver”仿真库;
  3. 单击【Design】标签,选中要仿真的文件,比如:要仿真test_counter.v,选中后,在【Design Unit(s)】栏中会自动加入“work.test_counter”;
  4. 单击“OK”,仿真自动执行

0

How to make RUN.DO file

How to make RUN.DO file

http://blog.sina.com.cn/s/blog_7e2e98ad0101gxx7.html)
http://blog.csdn.net/lg2lh/article/details/51176467


modelsim_run.bat文件:这是一个批处理文件,里面就一行“modelsim -do sim.do”,这是一条DOS命令,意思就是调用Modelsim工具,并在Modelsim工具中执行sim.do这个文件。

下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。

  1. vlib work //create work library 在工作目录下建立一个work目录,后期我们编译的结果信息存放在work库中,请注意不要用操作系统直接新建一个work的文件夹,因为用操作系统建立的work文件夹并没有modelsim SE自动生成的_info文件。还有个问题是,当你的软件工程里需要用到软核时,可能会需要一些库,但这些库ISE软件中是没有的,此时就需要我们自己新建库了,并映射到当前目录下。我们将自己新建的库一般放在work库前面建立,
  2. vlog +acc –work work “fie_path/*.v”—- 编译“file_path”目录下所有.v文件,并将其添加进工作库(work)中,包括IP生成的V文件也要编译的。编译时可以分开单独编译,但是一定要注意顺序,先编译被调用的文件。其中的“-work work”是将后面的源文件编译到哪个库中,如果是编译到默认的work库中,则也可以不写该参数。若只想编译其中某些文件,则可以直接写出这些文件的名字,比如下面两种写法等效:
    vlog div.v div_tb.v
    vlog -work work div.v div_tb.v

    或者如下
    vlog "../src/sdram_write.v"
  3. vsim -novopt -quiet -c -L altera_ver -L E:/modeltech_6.6a/Xilinx_lib_edk/unimacro_ver -lib work div -t 1ns -do "run 2084655ns"—- 启动仿真命令,完成编译后就要启动仿真,该命令可以有许多参数。实际相当于在界面操作时,展开work库,右键—>Simulate without Optimization,启动仿真。
    参数“-L altera_ver”是添加仿真库,该处是直接使用逻辑库名称,也可以像后面一样使用物理库的名称及路径;若是库与源文件一起编译到work库中的,则不需要该参数;
    参数“-t 1ns”表示仿真时间单位为1ns;
    参数“-novopt”禁止优化(no vopt),可能会因为vopt的缘故使得一些不重要signal被modelsim自动忽略,一般会保留该参数;
    参数“-do”表示运行时间,该参数一般不用,在后面再运行该命令;
    参数“-c”表示进入命令行模式,如果没有该参数,则表示进行GUI模式。
    默认工作库为work因而下面几种写法等效:
    vsim div_tb
    vsim -lib work div_tb
    vsim work.div_tb
    sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb
  4. view signals source wave—- 打开signal、source、wave窗口,也可以只打开wave窗口;
  5. delete wave *—- 删除原来wave窗口中的波形;
    6.add wave -binary clk rst—- 打添加要观察的波形信号,clk、rst为tb的顶层信号名,若要添加内部信号则要给出路径,-binary表示使用二进制显示;
    添加一个模块的所有信号则可以用下面的方式:
    add wave -dec sim:/div_tb/*
    若只是要添加单个信号,则把“*”换成对应的信号即可,比如:
    add wave -unsigned sim:/div_tb/clk
  6. run 5000/run @5000 —- 开始运行仿真程序;
    没有“@”则表示在当前时刻继续运行5000个单位时间;
    有“@”则表示运行到5000这个时刻,如果当前程序仿真已经运行到了5000以后的时刻,则该方法不会继续向后运行,而会弹出一个错误信息,提示当前仿真时刻已经超过了该数值。
    run -all则表示一直运行,直到手动停止。
    在5000后面也可以跟上一个单位,不跟单位时则以仿真的最小单位为基准。
  7. quit -f/quit -sim —- 参数为“f”时则结束ModelSim,参数为“sim”时则结束该仿真进程。


这里只是编写了基本的do文件,需要在ModelSIm的Transcipts窗口输入相应的命令才可以执行。

  1. cd filepath —-进入do文件所在的目录;
  2. do filename.do —-执行do文件,开始仿真

0

chipScope 使用总结

chipScope 使用总结

[相关连接]http://blog.sina.com.cn/s/blog_6c59e0310101loai.html
[ise调用chipscop](http://blog.csdn.net/phenixyf/article/details/39054427
chipscope 主要包括 ICON,ILA,VIO,ATC2IP核的功能,这里主要介绍 ICON ,ILA和VIO三个核的功能。
chipscope与modesim 的不同之处为,前者需要连接FPGA开发板,直接抓取寄存器中的信号,相当于示波器。

ICON(集成控制器)

ICON就是用于将其他核和JTAG链相连接的模块,一个工程里面只能有一个ICON,其他所有的包括ILA,VIO,ATC2这些核都要连接在ICON上。最多一个ICON可以连接15个其他的核,如下
///////用于连接其他的核

hipscope_icon chipscope_icon_inst(
.CONTROL0(CONTROL0), // INOUT BUS [35:0]
.CONTROL1(CONTROL1) // INOUT BUS [35:0]
);

ICON IP核最多可同时连接15个ILA,VIO,ATC2和 IBA IP核

ILA(集成逻辑分析器)

ILA核提供触发和跟踪功能,根据用户设置的触发条件捕获数据;然后在ICON的控制下,通过边界扫描口将数据上传到PC;最后在Analyzer中显示出信号波形。

特点

  1. 可自定义触发器位宽,数据位宽和数据存储深度
  2. 有多个触发端口可组成一个触发条件和触发序列
  3. 存储条件的选择,可以使IP核只存储满足一定条件下的数据采样
ILA使用

将FPGA中的信号连接到IPA IP核的输入端口,在设计频率下捕获这些信号。在此之前需要选择IP核的参数,如下

  1. 捕获哪些信号
  2. 每个信号捕获多少采样
  3. 触发事件,条件(即在什么时候什么条件捕获信号连接到ILA IP 核)

ILA核用于连接要观察的信号,将需要观察的信号直接连接到DATA数据口上就可以了,这样就避免了在茫茫网标中寻找信号的问题。触发信号也是直接连接上了,但是可以自己添加逻辑作为触发条件的判断,比如
assign TRIG0[5]=(fis_fifo_q[31:28]!=0);

VIO(虚拟I/O)

VIO IP 核支持两种不同内型的输入和输出,而且与FPGA设计的接口位宽也可以设置

结合一下代码理解,FPGA如何连接chipscope
chipscop code///////////
//要抓取信号的连接
assign ila_trig[0] = estart;
assign ila_trig[32:1] = ewdata;
assign ila_trig[33] = iic_scl;
assign ila_trig[34] =iic_sda;
assign ila_trig[42:35] = riic_data;
///////////////
assign estart = vio_out[0];
assign ewdata = vio_out[32:1];
/////产生2.4mhz时钟给ila核
wire ila_clk;
reg [3:0] ila_cnt;
always @(posedge clk_24 or negedge rst_n)begin
if(rst_n==1'b0)begin
ila_cnt <= 'd0;
end
else begin
ila_cnt <= ila_cnt +1'b1;
end
end
assign ila_clk =ila_cnt[3];
///////////////////////
wire [35:0] CONTROL0;
wire [35:0] CONTROL1;
///////用于连接其他的核
chipscope_icon chipscope_icon_inst(
.CONTROL0(CONTROL0), // INOUT BUS [35:0]
.CONTROL1(CONTROL1) // INOUT BUS [35:0]
);
wire [55:0] ila_trig ;
wire [32:0] vio_out ;
//抓取信号
chipscope_ila chipscope_ila_inst (
.CONTROL(CONTROL0), // INOUT BUS [35:0]
.CLK(ila_clk), // IN
.TRIG0(ila_trig) // IN BUS [55:0]
);
//虚拟输入输出
chipscope_vio YourInstanceName (
.CONTROL(CONTROL1), // INOUT BUS [35:0]
.CLK(clk_24), // IN
.SYNC_OUT(vio_out) // OUT BUS [32:0]
);

0