文章目录
脑子里的语言是汉语,而编程和表达需要在两种语言切换。program不是项目,中国话叫程序块,module是
为避免仿真和设计竞争问题(race condition),systemverilog中引入了program的概念。
module
program
注意点
区别
module
在verilog中,模块可以用来描述从简单的门元件到复杂的系统 (例如一个微处理器)的任何一种硬件电路。模块除了可以为硬件建模外,也可以用来封装验证平台,在模块内部,我们可以例化采用模块定义的DUT和采用 program或者class封装的验证平台。
program
程序块可以被看作是一个具有特殊执行语义的模块。相当于软件领域。一旦被声明,一个程序块可以在需要的层次位置 (典型情况是顶层)中被实例化,并且它的端口可以像任何其他模块一样。程序块内的类型和数据声明对于程序块的作用范围来讲是本地的,并具有静态的生命周期。当然,我们也可以通过 automatic将程序块声明为自动存储的。
注意点
在程序块中要采用非阻塞赋值语句 (<=)对时钟(clocking_block)中的信号做驱动。
在程序块中的本地变量进行赋值要采用阻塞赋值语句 (=)。
程序块中可以有任务、函数、类和 initial块,但不能有always块。
对封装验证程序的程序块采用 automatic来定义。
程序块可以消除验证平台和设计之间的竞争。
区别
module里可以定义program,而program里不能定义module。
module里不能调用program里定义的task, function,而program可以调用module里定义的task和function;
program里不能例化module,interface以及其它program
program是在Ractive时域执行的,而module在active时域执行的,所以program在module后执行,可以解决竞争冒险现象
若program中有always块,则无法结束运行,可使用 $exit 强行结束
program是用于编写测试激励的,而module是用于编写硬件模块的,一个是写软件程序,一个是硬件电路
A module and a program block carry many similarities.
However, the similarities end there. Here are some of the differences.
However, the biggest difference between a program and a module is the way they handle variable assignments in procedural blocks. We will see in the next section this is where the utility of a program comes into effect.