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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6048|回复: 18

[求助] 使用开源iverilog编译uvm

[复制链接]
发表于 2020-1-28 16:23:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zhangdeshuai 于 2020-1-28 16:28 编辑

使用开源的iverilog工具编译uvm1.1b的代码时报语法错。报错的代码附近内容是:



  1. `define uvm_field_utils_end \
  2.      if(what__ inside {UVM_SETINT,UVM_SETSTR,UVM_SETOBJ}) begin \
  3.         // remove all scopes recorded (through super and other objects visited before) \
  4.         void'(__current_scopes.pop_back()); \
  5.         __m_uvm_status_container.m_uvm_cycle_scopes = __current_scopes; \
  6.      end \                                                                              


复制代码

工具提示出错的代码行是




  1. void'(__current_scopes.pop_back());


复制代码

编译命令行是




  1. iverilog -o uvm_test -c env.lis -s top_tb   $UVM_HOME/src/dpi/uvm_dpi.cc  +incdir+$UVM_HOME/src  -I $UVM_HOME/src $UVM_HOME/src/uvm.sv -W all -g2012


复制代码
不知道是不是工具限制,用不了。后面的-g2012我改成了-g2009和-g2005-sv同样不行。有没有比较了解这个工具的,求解答。

发表于 2020-1-29 19:45:27 | 显示全部楼层
把错误信息发来
 楼主| 发表于 2020-2-1 23:17:24 来自手机 | 显示全部楼层


gaurson 发表于 2020-1-29 19:45
把错误信息发来


syntax error,错误信息很简单
发表于 2020-2-2 22:05:17 | 显示全部楼层
开源的就算了吧,语法支持都不全。。
发表于 2020-2-3 11:41:36 | 显示全部楼层
不知道 iverilog对大型design支持的怎么样?
发表于 2020-2-28 14:35:29 | 显示全部楼层


A1985 发表于 2020-2-2 22:05
开源的就算了吧,语法支持都不全。。


没用过别乱说,语法支持是很全的好吗
发表于 2020-2-28 16:47:07 | 显示全部楼层


uiwjyb 发表于 2020-2-28 14:35
没用过别乱说,语法支持是很全的好吗


好,编译如下代码试一下:
module tb;

class fuckiverilog;
   rand int a;
   constraint fuck {
       a > 100;
   }
   function void fk(const ref f);
   endfunction

endclass

enmodule
发表于 2020-4-25 21:39:55 | 显示全部楼层
楼主解决了吗?
 楼主| 发表于 2020-6-5 21:19:59 | 显示全部楼层


nail_lin 发表于 2020-4-25 21:39
楼主解决了吗?


没有,用破解的vcs了
发表于 2020-11-27 20:10:17 | 显示全部楼层
本帖最后由 qsh123_123 于 2020-11-27 21:10 编辑

报错的其实是前一行的那行// 开头的注释,应该改成/* */的注释。
就是将如下的代码:




  1.         // remove all scopes recorded (through super and other objects visited before) \
  2.         void'(__current_scopes.pop_back()); \


复制代码
改成:




  1.         /* remove all scopes recorded (through super and other objects visited before)*/  \
  2.         void'(__current_scopes.pop_back()); \


复制代码
仔细阅读上下行代码,很好理解,原因是//开头的注释相当于将后面的整行代码注释掉了,而又由于有 \ 符号将后面的代码接上了,于是iverilog的编译规则默认下面的几行也注释掉了,所以后面的代码不能起效,自然报错。。
看起来是iverilog跟vcs/ncverilog对verilog/systemverilog的注释和\续行的解析方式不一样导致的。。

将uvm的库文件里面所有含有//开头且以\结尾的注释行都替换掉。
采用vim/gvim打开后使用正则表达式替换掉即可。具体替换的正则表达式如下:




  1. %s#\(^.*\/\)\/\(.*\)\\$#\1*\2*/ \


复制代码

需要替换注释的uvm文件包括:

$UVM_HOME/src/macros/uvm_object_defines.svh
$UVM_HOME/src/macros/uvm_printer_defines.svh
$UVM_HOME/src/macros/uvm_tlm_defines.svh



您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-3-29 13:42 , Processed in 0.027737 second(s), 6 queries , Gzip On, Redis On.

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