Quartus Prime 与 Modelsim 调试 及do文件使用

Quartus Prime 与 Modelsim 调试 及do文件使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。
本文连接: https://blog.csdn.net/qq_24828193/article/details/93875548

 

 

前言

最新从Xilinx转到Intel,摸索quartus调试作的一些总结
推荐使用quartus加modelsim-intel edition,缘由后面讲。可是本博客的目的是总结出quartus prime pro的modelsim使用(这个是最麻烦,自动化最差的),因此选择modelsim的独立版本。本文经过学习standard版本中自动生成的do文件,学习并总结modelsim仿真库的配置(基于quartus)和do文件的详细使用。javascript

调试1,调试2 做为学习仿真操做和do文件编写的一个探索,调试3是pro版真正实操的流程
困难:目前只能对a10及如下芯片仿真,Stratix 10(pro edition才能用)找不到对应的仿真库(器件库已经装了,可是找不到仿真库),目前无法仿真,如有大佬知道怎么解决,望告知,感激涕零。java

Quartus自己的一些信息

  1. 2017开始quartus prime 分standard和pro版本,standard版本支持器件到a10,pro能s10.
  2. standard版本支持直接调用modelsim(经过run simulation tool),pro版本没有这个选项
  3. 安装quartus时能够直接不勾选modelsim(starter版也能够,可是不推荐,有些仿真限制(1w行代码))
  4. 能够勾选modelsim-intel edition(需单独和谐),这样仿真的时候do文件就不用编译和连接(vmap)基础库了,可是ip核相关的文件仍是要加
  5. 接下来的演示以modelsim独立版本为例,目的是探索pro版本的所有操做

调试 1(基于无IP核模式and简单Verilog代码)

安装完quartus(standard edition)后:
安装modelsim10.5se 并和谐:
下面基因而modelsim独立版本后端

  1. 在quartus中连接modelsim(每一个新工程都须要这样作一次):
  2. 而且编译一次器件库到modelsim中,在quartus中也定位一下编译好的库(这样就不用每次仿真前都编译一下,可是每一个工程都须要设 置一次
  3. 定位好了之后就能够顺利仿真了,经过run simulation tool。

这里是编译基础库和quartus中连接user compiled library location 的方法
这里是quartus设置仿真软件及testbench的方法markdown

调试2 (基于有ip核)

使用简单的 IOPLL IP核进行测试,基于quartus prime 2017 standard:调试仿真编辑器

  1. 按照调试1中的步骤进行设置,发现会报错误,相似于找不到编译库(PLL相关)
    do文件(经过run simulation tool 生成的do)编译ip核的包的时候可能会出现错误(找不到ip核的相关包)
  2. 这种状况就不能如1中同样设置 user compiled library location为quartus预先编译的modelsim库(会缺ip核的包)
  3. 把这个选项reset成none,也就是不设置
  4. 同时,IP核的仿真文件须要在设置IP核generate HDL的时候勾选simulation
    在这里插入图片描述

若不设置user compiled labrary,则每次的do文件都会编译一次基础库(从quartus安装目录下面)和ip核相关文件(这个ip核的仿真文件须要在设置IP核generate HDL的时候勾选simulation ),.do文件实例以下(quartus standard 生成的),能够看出除了基础库,还会编译pll.vo,这个是生成ip核时同时生成的,这个就是最完整的.do文件,做为pro版本身编写时的参考学习

能够看到,modelsim仿真须要 的全部操做, 连接编译 基本库、ip核vo,v(包含ip核顶层文件v,还有主体文件vo)、 编译用户文件.v、 编译testbench , 并仿真testbench
这部分代码必定不能跳过,要仔细研究测试

transcript on
if ![file isdirectory test_iputf_libs] { file mkdir test_iputf_libs } if ![file isdirectory verilog_libs] { file mkdir verilog_libs } vlib verilog_libs/altera_ver vmap altera_ver ./verilog_libs/altera_ver vlog -vlog01compat -work altera_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_primitives.v} vlib verilog_libs/lpm_ver vmap lpm_ver ./verilog_libs/lpm_ver vlog -vlog01compat -work lpm_ver {e:/quartus2017standard/quartus/eda/sim_lib/220model.v} vlib verilog_libs/sgate_ver vmap sgate_ver ./verilog_libs/sgate_ver vlog -vlog01compat -work sgate_ver {e:/quartus2017standard/quartus/eda/sim_lib/sgate.v} vlib verilog_libs/altera_mf_ver vmap altera_mf_ver ./verilog_libs/altera_mf_ver vlog -vlog01compat -work altera_mf_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_mf.v} vlib verilog_libs/altera_lnsim_ver vmap altera_lnsim_ver ./verilog_libs/altera_lnsim_ver vlog -sv -work altera_lnsim_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_lnsim.sv} vlib verilog_libs/twentynm_ver vmap twentynm_ver ./verilog_libs/twentynm_ver vlog -vlog01compat -work twentynm_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_atoms.v} vlog -vlog01compat -work twentynm_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_atoms_ncrypt.v} vlib verilog_libs/twentynm_hssi_ver vmap twentynm_hssi_ver ./verilog_libs/twentynm_hssi_ver vlog -vlog01compat -work twentynm_hssi_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_hssi_atoms_ncrypt.v} vlog -vlog01compat -work twentynm_hssi_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_hssi_atoms.v} vlib verilog_libs/twentynm_hip_ver vmap twentynm_hip_ver ./verilog_libs/twentynm_hip_ver vlog -vlog01compat -work twentynm_hip_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_hip_atoms_ncrypt.v} vlog -vlog01compat -work twentynm_hip_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_hip_atoms.v} if {[file exists rtl_work]} { vdel -lib rtl_work -all } vlib rtl_work vmap work rtl_work ###### Libraries for IPUTF cores vlib test_iputf_libs/PLL_altera_iopll_171 vmap PLL_altera_iopll_171 ./test_iputf_libs/PLL_altera_iopll_171 ###### End libraries for IPUTF cores ###### MIF file copy and HDL compilation commands for IPUTF cores vlog "E:/qua_standard_proj/PLL/altera_iopll_171/sim/PLL_altera_iopll_171_qwujbna.vo" -work PLL_altera_iopll_171 vlog "E:/qua_standard_proj/PLL/sim/PLL.v" vlog -vlog01compat -work work +incdir+E:/qua_standard_proj {E:/qua_standard_proj/test.v} vlog -vlog01compat -work work +incdir+E:/qua_standard_proj/simulation/modelsim {E:/qua_standard_proj/simulation/modelsim/test.vt} vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -L PLL_altera_iopll_171 -voptargs="+acc" top_vlg_tst add wave * view structure view signals run 1 us 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

到此就能够正常的仿真了,可是这样每次都要编译一次基础库,很麻烦,因此编译一次之后,就能够进行这样的设置:、atom

  1. 在user compiled library location设置本工程simulation/modelsim的路径(以前的那个do文件,会把全部的编译结果存储在同文件夹下,这个是能够直接调用的)

设置示例:
设置示例
目录结构,红框标记的就是编译生成的库和modelsim的project文件夹(work)
在这里插入图片描述
这样每次仿真须要的库这边都有了
若是再次使用run simulation tool ,查看产生的新的.do文件,此次没有编译基础库,只是连接(vmap)了一下已有的编译结果。spa

transcript on
if ![file isdirectory test_iputf_libs] { file mkdir test_iputf_libs } #vmap altera_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_ver #vmap lpm_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/lpm_ver #vmap sgate_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/sgate_ver #vmap altera_mf_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_mf_ver #vmap altera_lnsim_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_lnsim_ver #vmap twentynm_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_ver #vmap twentynm_hssi_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_hssi_ver #vmap twentynm_hip_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_hip_ver if {[file exists rtl_work]} { vdel -lib rtl_work -all } vlib rtl_work vmap work rtl_work ###### Libraries for IPUTF cores vlib test_iputf_libs/PLL_altera_iopll_171 vmap PLL_altera_iopll_171 E:/qua_standard_proj/simulation/modelsim/test_iputf_libs/PLL_altera_iopll_171 ###### End libraries for IPUTF cores ###### MIF file copy and HDL compilation commands for IPUTF cores vlog "E:/qua_standard_proj/PLL/altera_iopll_171/sim/PLL_altera_iopll_171_qwujbna.vo" -work PLL_altera_iopll_171 vlog "E:/qua_standard_proj/PLL/sim/PLL.v" vlog -vlog01compat -work work +incdir+E:/qua_standard_proj {E:/qua_standard_proj/test.v} vlog -vlog01compat -work work +incdir+E:/qua_standard_proj/simulation/modelsim {E:/qua_standard_proj/simulation/modelsim/test.vt} #-L 后面接着要连接的库,相似于 #include xxx.h vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -L PLL_altera_iopll_171 -voptargs="+acc" top_vlg_tst add wave * view structure view signals run 1 us 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

用这样的do文件进行仿真,不用重复编译.net

参考这个设计:

  1. 就能够在pro edition里面先设置仿真软件为modelsim后

  2. 参考完整的do文件(第一个),编写对应其设计和路径的do文件

  3. 在modelsim 中File-Change Directory 到do所在的文件夹后

  4. 运行do xxx.do 编译所有须要库并开始第一次仿真。

  5. 第二次仿真能够参考本文第二个do文件编写do文件,(主要操做是Vmap)

便可脱离quartus直接使用modelsim仿真,使用编辑器编译工程Verilog代码和testbench后运行do文件就能够从新编译和仿真了(库没变因此不用从新编译)。

调试3 PRO edition+Modelsim-Intel edition

前期工做,安装Modelsim-Intel edition 这个软件已经把须要的库所有编译连接好了
如图
在这里插入图片描述
软件安装和quartus创建工程部分略去
quartus pro 中 assignment-setting-EDA Tool Setting 中选择modelsim-intel FPGA
IP核仍是选择以下
在这里插入图片描述
top.v文件以下

module top
(
	input wire a,
	input wire b,
	output reg c,
	input wire clk,
	input wire reset	
	);
	reg aa,bb;
	wire locked;
	wire sysclk;
	pll_custom u0 (
		.rst      (reset),      //   reset.reset
		.refclk   (clk),   //  refclk.clk
		.locked   (locked),   //  locked.export
		.outclk_0 (sysclk)  // outclk0.clk
	);
	always@(posedge sysclk)
	begin 
	    aa<=a;
	    bb<=b;
	    c<=aa&bb;
	end 

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

test.vt 或者test.v 以下:其模块名字为 top_vlg_tst

`timescale 1 ns/ 1 ps
module top_vlg_tst();
    // constants
    // general purpose registers
    parameter period = 10;
    // test vector input registers
    reg a;
    reg b;
    // wires
    wire c;
    reg clk;
    reg reset;
    // assign statements (if any)
    top t1 (
    // port map - connection between master ports and signals/registers
    .a(a),
    .b(b),
    .c(c),
    .clk(clk),
    .reset(reset)
    );
    initial
    begin      
        clk = 0;        
        a     = 0;
        b     = 0;
        reset = 0;
        #(5*period)
        reset = 1;
        #(5*period)
        reset = 0;
        #(200*period)
              
        #(5*period)
        a = 1;
        b = 1;
        #(5*period)
        a = 0;
        b = 1;
        // --> end
        //$display("Running testbench");
    end
    
    always #(period/2) clk = ~clk;
    
    
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

编写rtl_verilog.do 文件

transcript on
#因为是这个modelsim Intel edtion已经把库编译连接了,能够直接访问相关库,全部这里不须要用vmap连接库
if {[file exists rtl_work]} {
	vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work
#编译须要的工程文件
vlog -vlog01compat -work work +incdir+E:\project_2017_pro\simulation\modelsim {E:\project_2017_pro\simulation\modelsim\top.v}

vlog -vlog01compat -work work +incdir+E:\project_2017_pro\simulation\modelsim {E:\project_2017_pro\simulation\modelsim\test.v}
#编译生成的IP核文件
vlog -vlog01compat -work work +incdir+E:\project_2017_pro\pll_custom\sim {E:\project_2017_pro\pll_custom\sim\pll_custom.v}

vlog -vlog01compat -work work +incdir+E:\project_2017_pro\pll_custom\altera_iopll_171\sim {E:\project_2017_pro\pll_custom\altera_iopll_171\sim\pll_custom_altera_iopll_171_vidhshy.vo}

#开始仿真,  vsim -L library ,这里相似于include,因为软件中已经预先连接了这些库,这里能够直接include,而不须要根据路径去找,再用vmap连接
vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -voptargs="+acc"  top_vlg_tst

#top_vlg_tst 这个就是testbench里面的测试model名字

add wave *
view structure
view signals
run 10 us
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

单独打开Moselsim-Intel-FPGA-edition
File-change derectory…
选择.do文件所在文件夹
运行命令 do rtl_verilog.do 开始仿真

TIPS
仿真时 这些-L的参数也有些烦,容易漏

vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -voptargs="+acc"  top_vlg_tst
  • 1

参考这个连接中的Modelsim库编译过程()
https://blog.csdn.net/pianzhiwdy1996/article/details/80099780
可是不全照搬,为了方便,只生成和compile一个 Altera_all 的library,可是这个library要编译 E:\quartus2017pro\quartus\eda\sim_lib 这个路径下全部的 .v 和 .sv文件,包括二级目录下(for Verilog,compile过程有报错,目前无视)
在这里插入图片描述
根据连接中的步骤,最终添加好altera_all library的时候,do文件中就能够这样启动仿真

vsim -t 1ps -L altera_all -voptargs="+acc"  top_vlg_tstvs
  • 1

最终开始仿真

调试4:Quartus 2017 standard timequst Timing Analyer and sdc

添加Pll的时钟约束,而后端口参考PLL时钟,参考sdc,添加约束,这样就不会报uncontrain约束warning。PLL时钟是在时钟报告中找到的具体名字
在这里插入图片描述

目前还有的问题:1.gate level simulation中没有看到波形延迟,存疑

相关文章
相关标签/搜索