模块(module), 程序块(program)的区别

module

在verilog中,模块可以用来描述从简单的门元件到复杂的系统 (例如一个微处理器)的任何一种硬件电路。模块除了可以为硬件建模外,也可以用来封装验证平台,在模块内部,我们可以例化采用模块定义的DUT和采用 program或者class封装的验证平台。

program

程序块可以被看作是一个具有特殊执行语义的模块。相当于软件领域。一旦被声明,一个程序块可以在需要的层次位置 (典型情况是顶层)中被实例化,并且它的端口可以像任何其他模块一样。程序块内的类型和数据声明对于程序块的作用范围来讲是本地的,并具有静态的生命周期。当然,我们也可以通过 automatic将程序块声明为自动存储的。

注意点

  1. 在程序块中要采用非阻塞赋值语句 (<=)对时钟(clocking_block)中的信号做驱动。
  2. 在程序块中的本地变量进行赋值要采用阻塞赋值语句 (=)。
  3. 程序块中可以有任务、函数、类和 initial块,但不能有always块。
  4. 对封装验证程序的程序块采用 automatic来定义。
  5. 程序块可以消除验证平台和设计之间的竞争。

区别

  1. module里可以定义program,而program里不能定义module。
  2. module里不能调用program里定义的task, function,而program可以调用module里定义的task和function;
  3. program里不能例化module,interface以及其它program
  4. program是在Ractive时域执行的,而module在active时域执行的,所以program在module后执行,可以解决竞争冒险现象
  5. 若program中有always块,则无法结束运行,可使用 $exit 强行结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

借问众神明.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值