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

文章目录

    • 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 强行结束

你可能感兴趣的:(System,Verilog,学习,开发语言,systemverilog)