zoukankan      html  css  js  c++  java
  • linux下的EDA——VCS使用

    所用Linux系统为openSUSE64位,软件为VCS2012

    在Linux下对verilogHDL进行功能仿真时非常必要的,下面提供两种常见方式。

    1.脚本方式

    1)建立工作文件夹pre_sim,并将tb文件和所有.v文件复制进入此文件夹

    mkdir pre_sim


    2)修改testbench文件

    为输出波形文件,在testbench文件中加入如下语句

    initial begin
        $dumpfile("counter.vcd");  //待输出的波形文件名,可更改
        $dumpvars(0,u0);	//u0为testbench中实例化的顶层文件名称,注意根据实际情况修改该名字
    end
    
    initial #1000 $finish;  //仿真电路的时间

    保存文件

    本次所用文件如下

    testbench.v(实际文件名为tb_gao.v)

    module counter_testbench () ; 
    wire [3:0] out; 
    reg clk; 
    reg reset; 
    
    counter u0 (
        .out (out[3:0]), 
        .reset (reset), 
        .clk (clk)
        );
    
    initial begin 
        clk = 1'b0;
        forever #10 clk = ~clk;
        end
    
    initial begin 
        reset = 1'b0; 
        #4 reset = 1'b1;
        #4 reset = 1'b0;
    end
    
    initial begin
        $dumpfile("counter.vcd");
        $dumpvars(0,u0);
    end
    
    initial #1000 $finish;
    endmodule

    counter.v

    module counter ( out, clk, reset ) ; 
    input clk, reset; 
    output [3:0] out; 
    reg [3:0] out; 
    
    always @(posedge clk or posedge reset) begin
        if (reset) begin
            // reset
            out <= 4'b0;
        end
        else begin
            out <= out + 1'b1;
        end
    end
    
    wire clk_out;
    clk_half u0(
        .clk_in(clk)
        ,.rst(reset)
        ,.clk_out(clk_out)
        );
    
    endmodule

    clk_half.v

    module clk_half(
        clk_in
        ,rst
        ,clk_out
        );
    input clk_in;
    input rst;
    output reg clk_out;
    
    always @(posedge clk_in or posedge rst) begin
        if (rst) begin
            // reset
            clk_out <= 0;
        end
        else begin
            clk_out <= !clk_out;
        end
    end
    endmodule

    3)在vcs.scr文件中写入如下内容

    vcs -R tb_gao.v counter.v clk_half.v +v2k +define+RTL_SAIF
    其中tb_gao.v为testbench文件,counter.v、clk_half.v为工程文件,注意要把所有的工程.v文件都添加进去

    保存文件

    4)在终端运行vcs.scr脚本文件

    在终端中输入

    source vcs.scr
    等待程序编译,如有报错则按照位置修改错误,直至仿真完成


    5)查看波形

    在终端中输入

    dve
    打开波形文件,File->open database,打开.vcd文件


    在Hierarchy界面中选择要查看的信号,右键New Wave View即可




    2.命令行方式

    1)新建工作文件夹vcs_test,将所有的工程文件与tb文件复制入

    testbench中可以没有在脚本文件中添加的函数,一般的tb文件就可以

    2)运行vcs

    在终端中输入

    vcs -V -R tb_gao.v counter.v clk_half.v -o simv -gui -debug_pp
    -V:Verbose模式,打印vcs在运行的过程中执行的C Compiler汇编器和链接器的指令
    -R:这个指令是告诉VCS在编译完成以后直接运行可执行文件,如果你在编译的时候没有带上这个选项,编译完成以后VCS就退出了,但是你会发现在相应的目录下产生了以各可执行文件,默认叫simv-o:
    -o:给后面的simv文件改名字,如改成counter.simv
    -gui:调用VCS的图形化界面
    -debug_pp:看波形必须要在debug模式下
    其他一些指令
    -q:退出模式;抑制了例如VCS使用的C编译器/VCS分析源文件、top层、制定的timescale的信息。
    -notice:使能更详细的诊断信息。
    -pvalue+parameter_hierarchical_name=value:这个选项是用来改变源文件中parameter参数值的命令。 例如:-pvalue+udut.uchip.ucore. IDLE =0 
    -full64:这个选项是为64位的操作系统准备的
    -l filename:制定一个VCS产生的log文件名,如果你键入了-R选项,那么在编译和仿真的时候都会将log内容打印到log文件中

    3)观察波形

    图形界面此时应该已经打开,按照如下操作





  • 相关阅读:
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    发生dev_queue_xmit的时候,全部都是从ip_finish_output中来的吗
    网络控制API 路由表 arp表 包括tcp的这些参数都是从哪里设置
    dev_queue_xmit 发生了什么?skb还会在哪里缓存
    内核blackhole
    网卡多ip 再看arp; arp队列也会缓存skb
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)
    貌似要看看时钟了
    读写JSON作配置文件
  • 原文地址:https://www.cnblogs.com/mingmingruyue99/p/7201996.html
Copyright © 2011-2022 走看看