网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> EDA >> HDL >> 文章正文
  Verilog--testbench相关           ★★★ 【字体:
Verilog--testbench相关
作者:Free    文章来源:Free    点击数:    更新时间:2007-12-30    

//testbench的波形输出

module top;

...

initial

begin

    $dumpfile("./top.vcd");    //存储波形的文件名和路径,一般是.vcd格式.

    $dumpvars(1,top);          //存储top这一层的所有信号数据

    $dumpvars(2,top.u1);       //存储top.u1之下两层的所有数据信号(包含top.u1这一层)

    $dumpvars(3,top.u2);       //存储top.u2之下三层的所有数据信号(包含top.u2这一层)

    $dumpvars(0,top.u3);       //存储top.u3之下所有层的所有数据信号

end

endmodule

 

//产生随机数,seed是种子

$random(seed);

ex: din <= $random(20);

 

//仿真时间,unsigned型的64位数据

$time

ex:

...

time    condition_happen_time;

...

condition_happen_time = $time;

...

$monitor($time,"data output = %d", dout);

...

 

//参数

parameter   para1 = 10,

            para2 = 20,

            para3 = 30;

 

//显示任务

$display();

//监视任务

$monitor();

 

//延迟模型

specify

...

//describ pin-to-pin delay

endspecify

 

ex:

module nand_or(Y,A,B,C);

input A,B,C;

output Y;

 

    AND2 #0.2 (N,A,B);

    OR2  #0.1 (Y,C,N);

 

    specify

        (A*->Y) = 0.2;

        (B*->Y) = 0.3;

        (C*->Y) = 0.1;

    endspecify

endmodule

 

//时间刻度

`timescale  单位时间/时间精确度

 

//文件I/O

1.打开文件

integer file_id;

file_id = fopen("file_path/file_name");

2.写入文件

//$fmonitor只要有变化就一直记录

$fmonitor(file_id, "%format_char", parameter);

eg:$fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);

//$fwrite需要触发条件才记录

$fwrite(file_id, "%format_char", parameter);

//$fdisplay需要触发条件才记录

$fdisplay(file_id, "%format_char", parameter);

$fstrobe();

3.读取文件

integer file_id;

file_id = $fread("file_path/file_name", "r");

4.关闭文件

$fclose(fjile_id);

5.由文件设定存储器初值

$readmemh("file_name", memory_name"); //初始化数据为十六进制

$readmemb("file_name", memory_name"); //初始化数据为二进制

 

//仿真控制

$finish(parameter); //parameter = 0,1,2

$stop(parameter);

 

//读入SDF文件

$sdf_annotate("sdf_file_name", module_instance, "scale_factors");

//module_instance: sdf文件所对应的instance.

//scale_factors:针对timming delay中的最小延时min,典型延迟typ,最大延时max调整延迟参数

 

//generate语句,Verilog-2001中定义.用于表达重复性动作

//必须事先声明genvar类型变量作为generate循环的指标

eg:

genvar i;

generate for(i = 0; i < 4; i = i + 1)

begin

    assign = din[i] = i % 2;

end

endgenerate

 

//资源共享

always @(A or B or C or D)

    sum = sel ? (A+B):(C+D);

 

//上面例子使用两个加法器和一个MUX,面积大

 

//下面例子使用一个加法器和两个MUX,面积小

 

always @(A or B or C or D)

begin

    tmp1 = sel ? A:C;

    tmp2 = sel ? B:D;

end

 

always @(tmp1 or tmp2)

    sum = tmp1 + tmp2;

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    Verilog例化时的参数传递
    Verilog三段式状态机描述
    Verilog 代码风格-供参考
    ModelSim看变量的波形
    双端口RAM的设计与测试(ver…
    verilog中@()语句的探索与…
    Verilog 开放源代码网址
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号