system verilog中不可不小心的陷阱

本文讨论了System Verilog中的几个关键概念和陷阱,包括任务与函数的区别,动态与静态任务的管理,文件读写操作,Vivado仿真的注意事项以及线程调度。在任务和函数的使用上,强调了函数可以返回void,任务不能含有时序控制,并提到了ref参数的限制。文件操作部分介绍了$fread和$fwrite函数,指出$fwrite在不同仿真器下的表现差异。Vivado仿真中,遇到的数据输出问题和解决办法也进行了阐述。最后,介绍了System Verilog的三种线程创建方式及其执行行为。
摘要由CSDN通过智能技术生成
  1. 任务和函数(task and function)
    任务可以调用函数以及其他任务,但是函数不可以调用任务。在verilog中函数必须有返回值,但是在system verilog中扩展了函数功能,其可以返回空,即void。同时task参数列表可以表示为类似C的形式,用括号括起来,如:
task test(input logic a, input reg[5:0]b, output logic c);

任务重可以有时序控制,但是函数不准许有时序控制。同时需要注意的坑是任务必须在所有语句执行完成后才会返回数值.
可以使用ref来传递参数,这有点类似C中指针传参,相当于将参数地址传递给任务,任务修改是可见的。但是在system verilog手册中要求ref只能用于动态任务中,即要声明任务为automatic。

task automatic test(input logic a, ref reg[5:0]b, output logic c);

不声明动态的任务或者函数,其默认为静态即内部数据分配给内存中固定存储区。如果任务被多次调用,那么多个程序共享静态存储区很容易发生混乱。声明为动态的任务和函数其内部变量自动为动态,但是可以通过static声明为静态的。
动态任务中的动态变量如果去读取文件,则不会获取文件数据,如:

task automatic test(input logic a, ref reg[5:0]b, output logic c);

    integer data
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值