• 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中没有看到波形延迟,存疑

     
  • 相关阅读:
    [LeetCode] Construct Binary Tree from Inorder and Pretorder Traversal
    [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
    [LeetCode] Candy
    [LeetCode] Next Permutation
    [LeetCode] Permutation Sequence
    [LeetCode] Permutations II
    【转载pku】三十分钟掌握STL
    [LeetCode] Permutations
    【附论文】Facebook推面部识别软件 精准度高达97.25%
    【转载】limits.h
  • 原文地址:https://www.cnblogs.com/chengqi521/p/11795033.html
Copyright © 2020-2023  润新知