zoukankan      html  css  js  c++  java
  • 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文件的详细使用。

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

    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的方法

    调试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

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

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

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

    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文件进行仿真,不用重复编译

    参考这个设计:

    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_prosimulationmodelsim {E:project_2017_prosimulationmodelsim	op.v}
    
    vlog -vlog01compat -work work +incdir+E:project_2017_prosimulationmodelsim {E:project_2017_prosimulationmodelsim	est.v}
    #编译生成的IP核文件
    vlog -vlog01compat -work work +incdir+E:project_2017_propll_customsim {E:project_2017_propll_customsimpll_custom.v}
    
    vlog -vlog01compat -work work +incdir+E:project_2017_propll_customaltera_iopll_171sim {E:project_2017_propll_customaltera_iopll_171simpll_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:quartus2017proquartusedasim_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中没有看到波形延迟,存疑

     
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/chengqi521/p/11795033.html
Copyright © 2011-2022 走看看