zoukankan      html  css  js  c++  java
  • Verilog篇(二)系统函数

    显示任务:$display,$write, 前者总会输出一个换行符,后者不会

      固定输出格式版:$displayb/$displayo/$displayh/$writeb/$writeo/$writeh。

        只是固定默认的输出格式,也可以通过%0x执行输出方式

      (%m 显示模块路径, 转义字符)

      (%p 可以直接打印出,enum,struct,array)

    $fmonitor(file, "%m:%t addr = %h data = %h", $realtime, addr, data);

    监控任务:$strobe, 在某一时刻,记录变量的值到log和STDOUT,在该时刻所有Event已经触发,仿真时间将向前走时。forever @(negedge clock)  

                                                            $strobe("At time %t, data is %h", $time,data);

          也是在postpone区域内被执行

      $monitor,同一仿真时候只能触发一个task,还有控制任务$monitoron, $monitoroff,触发之后,在每个toggle时刻都会输出log在postpone区域被执行

    文件读写:$fopen, $fclose 句柄必须是一个interger类型。类型r/w/a(append),r+/w+/a+ 缺省时,默认是写。

    interger Write_Out_file;  Write_out_file = $fopen("Write_Out_File.txt");  $fdisplay (Write_Out_File, "%h %h", addr, data);  $fclose(Write_Out_File);

    $fdisplay, $fwrite, $fstrobe, $fmonitor 用法类似,只需要加一个文件句柄。类似的有$fwriteo, $fwriteb, $fwriteh等。

    其他几个特殊的任务:

        c = $fgetc (fd); 读一个byte到c中。

        $swrite, $sformat(output_reg, formal_string, list_of_argument) 按字符串格式输出到一个reg variable。

        $fgets(str, fd);读入一行字符到str中。

        $fscanf(fd, format, args); 按标准输入到文件fd。

        $sscanf(str, format, args);按标准输入到reg str。

        $fflush(fd); 将buffer立即输出到fd文件中。

    写入memory:$readmemb/readmemh 二进制与16进制。 reg[7:0] mem[1:256];  initial  $readmemh("mem_data", mem, 128, 1);

    (mem_data中只能有空格,制表符等,注释,2进制/16进制数据。第三位起始地址,第四位结束地址,不特殊写明时,默认从0--$)

    @address in hex    data

    @2f                      ff(十六进制)

    $sdf_annotate("sdf_file",,,,,,):将sdf文件读入设计中。可选参数module_instance(反标module,缺省当前模块),log_file(指定输出log的名字),mtm_spec(min/typ/max反标种类),scale_factor(scale因子),scale_type(scale在min/typ/max选择)。

    第一组,检查时序窗口的稳定性,包括:setup、hold、recovery和removal。
    setup:$setup (data_event, reference_event, limit, notifier);
    当reference_event time - limit < data_event time < reference_event time时,就会报告setup time violations。
    hold:  $hold   (reference_event, data_event, limit, notifier);
    当reference_event time < data_event time < reference_event time + limit时,就会报告hold time violations。
    setup/hold:$setuphold (reference_event, data_event, setup_limit, hold_limit, notifier);
       $setuphold是$setup和$hold两者的联合。例如:
       $setuphold (posedge clk, negedge d, 2, 1, notifier); 等于
       $setup (negedge d, posedge clk, 2, notifier); 和 $hold (posedge clk, negedge d, 1, notifier);
    数据事件常常是数据信号,而参考事件常常是时钟信号。

    参考:http://www.cnblogs.com/poiu-elab/archive/2012/08/25/2655937.html

    仿真控制:$finish, $stop

    随机数产生:$random(seed), $dist_uniform(seed, start, end); 返回有符号32位的随机数。

    command line input:$test$plusargs(string)

       Run simulator with +HELLO   initial  begin

                                                              if ($test$pluargs("HELLO"))   $display();

                                                           end

                                   $value$pluargs(user_string, variable)

       Run simulator with +TESTNAME = THIS TEST  initial  begin

                                                                                        if ($value$pluargs("TESTNAME = %s", testname))   start_test();        

                                                                                    end

    verilog中的ifdef和ifndef后加name,但是endif之后不能加。

    verilog中的行分隔符,之间换行即可,靠";"分行。

    标识符可以放在begin...end/ fork...join/ module...endmodule/ task...endtask/ function...endfunction中来更明确。

  • 相关阅读:
    调用Win32 API netapi32.dll 实现UNC(网络共享)连接的管理(一)
    一个重写Page基类的例子
    36进制进位算法例子
    关于.net 中调用script的alert后 css失效的办法
    Javascript:keyCode键码值表
    Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
    在.NET程序中正确使用String类型
    Sql Server中自动序号的方法
    托管和非托管的关系和区别
    Oracle 格式化
  • 原文地址:https://www.cnblogs.com/-9-8/p/4387442.html
Copyright © 2011-2022 走看看