在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3894|回复: 4

[求助] 有关uvm验证的问题

[复制链接]
发表于 2017-5-23 11:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  1. `timescale 1ns/1ps
  2. `include "uvm_pkg.sv"  


  3. module top_tb;
  4. import uvm_pkg::*;
  5. `include "uvm_macros.svh"

  6. reg clk;
  7. reg rst_n;
  8. reg[7:0] rxd;
  9. reg rx_dv;
  10. wire[7:0] txd;
  11. wire tx_en;

  12. class my_driver extends uvm_driver;

  13.   function new(string name = "my_driver", uvm_component parent = null);
  14.     super.new(name, parent);
  15.   endfunction
  16.   extern virtual task main_phase(uvm_phase phase);
  17.    
  18. endclass

  19. task my_driver::main_phase(uvm_phase phase);
  20.    top_tb.rxd <= 8'b0;
  21.    top_tb.rx_dv <= 1'b0;
  22.    while(top_tb.rst_n)
  23.       @(posedge top_tb.clk);
  24.    for(int i = 0; i < 256; i++)begin
  25.       @(posedge top_tb.clk);
  26.       top_tb.rxd <= $urandom_range(0, 255);
  27.       top_tb.rx_dv <= 1'b1;
  28.       `uvm_info("my_driver", "data is drived", UVM_LOW)
  29.    end
  30.    @(posedge top_tb.clk);
  31.    top_tb.rx_dv <= 1'b0;
  32. endtask

  33. dut my_dut(.clk(clk),
  34.            .rst_n(rst_n),
  35.            .rxd(rxd),
  36.            .rx_dv(rx_dv),
  37.            .txd(txd),
  38.            .tx_en(tx_en));

  39. initial begin
  40.    my_driver drv;
  41.    drv = new("drv", null);
  42.    drv.main_phase(null);
  43.    // $finish();
  44.          // rxd = 200;
  45.          // rx_dv = 0;
  46.          // @(posedge rst_n);
  47.          // rxd = 255;
  48.          // rx_dv = 1;
  49. end

  50. initial begin
  51.    clk = 0;
  52.    forever begin
  53.       #100 clk = ~clk;
  54.    end
  55. end

  56. initial begin
  57.    rst_n = 1'b0;
  58.    #1000;
  59.    rst_n = 1'b1;
  60. end

  61. endmodule



复制代码

我将上面这个类定义在内部的时候可以正常仿真为什么我单独定义的时候就不能使用了呢?




  1. `ifndef MY_DRIVER__SV
  2. `define MY_DRIVER__SV
  3. class my_driver extends uvm_driver;

  4.    function new(string name = "my_driver", uvm_component parent = null);
  5.       super.new(name, parent);
  6.    endfunction
  7.    extern virtual task main_phase(uvm_phase phase);
  8. endclass

  9. task my_driver::main_phase(uvm_phase phase);
  10.    top_tb.rxd <= 8'b0;
  11.    top_tb.rx_dv <= 1'b0;
  12.    while(!top_tb.rst_n)
  13.       @(posedge top_tb.clk);
  14.    for(int i = 0; i < 256; i++)begin
  15.       @(posedge top_tb.clk);
  16.       top_tb.rxd <= $urandom_range(0, 255);
  17.       top_tb.rx_dv <= 1'b1;
  18.       `uvm_info("my_driver", "data is drived", UVM_LOW)
  19.    end
  20.    @(posedge top_tb.clk);
  21.    top_tb.rx_dv <= 1'b0;
  22. endtask
  23. `endif



复制代码


我使用的是linux环境,questasim10.3a。do文件如下:




  1. set  UVM_DPI_HOME   /opt/mentor_graphics/questa/10.3a/questasim/uvm-1.1d/linux_x86_64
  2. vlib work  
  3. vmap work
  4. vlog  +incdir+/opt/mentor_graphics/questa/10.3a/questasim/verilog_src/uvm-1.1d/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF  top_tb.sv
  5. vlog  +incdir+/opt/mentor_graphics/questa/10.3a/questasim/verilog_src/uvm-1.1d/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF  dut.sv
  6. vlog  +incdir+/opt/mentor_graphics/questa/10.3a/questasim/verilog_src/uvm-1.1d/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF  my_driver.sv
  7. vsim  -ldflags "-lregex" -t 1ns -c -sv_lib $UVM_DPI_HOME/uvm_dpi -voptargs=+acc -L lpm_ver -L altera_mf_ver -L altera_ver -L stratixv_ver work.top_tb

  8. set StdArithNoWarnings 1
  9. set NumericStdNoWarnings 1



复制代码
发表于 2017-5-24 14:21:00 | 显示全部楼层
试试先编译my_driver.sv,再编译top_tb.sv看看?
 楼主| 发表于 2017-5-24 14:26:01 | 显示全部楼层
回复 2# gaurson
效果差不多,error信号如下



  1. # ** Error: my_driver.sv(3): near "uvm_driver": syntax error, unexpected IDENTIFIER
  2. # ** Error: my_driver.sv(3): Error in class extension specification.


复制代码
发表于 2017-5-24 16:42:03 | 显示全部楼层
`include "uvm_pkg.sv"
`include "uvm_macros.svh"
加到my_driver.sv里边试试
 楼主| 发表于 2017-5-25 08:25:10 | 显示全部楼层
回复 4# songnp


谢谢,这下可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 19:16 , Processed in 0.023838 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表