提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Verilog与SystemVerilog中几种不同的端口,如:wire、reg、logic、input、output、inout、(const)ref。简单介绍几者之间的关系与区别。
一、wire、reg、logic
这也是SystemVerilog与Verilog的一个区别,SystemVerilog中的logic数据类型能够被用来替代Verilog中的reg或wire(具有限制),这就使得能够在一个更高的抽象层次上建模,并且随着设计的不断深入能够加入一些设计细节而不必改变数据类型的声明。logic数据类型不会表示信号的强度也不具有线逻辑的解析功能,因此logic数据类型比Verilog的wire类型更能有效地仿真和综合。
二、input、output、inout
input端口是输入端口;output是输出端口;还有inout端口。
inout端口用于双向连接。如果使用多个inout端口驱动一个信号,sv将会根据所有驱动器的值,驱动强度来计算最终的值。
三、(const)ref
在sysytemverilog中,通过ref参数的传递方式指定为引用而不是复制,不需要创建数据包副本消耗内存。这种ref函数类型比input,output和inout更好用,首先你可以把数组传递给子程序;
ref端口是对变量(不能是net)的引用,它的值是该变量最后一次赋的值。如果将一个变量链接到多个ref端口,就可能产生竞争,因为多个模块的端口都可能更新同一个变量。
使用ref和const传递数组,如下
const修饰符,虽然数组变量a指向了调用程序中的数组,但是子程序不能修改数组的值,如果你试图改变数组的值,编译器将报错。
systemverilog允许不带ref进行数组的传递,这时数组会被复制到堆栈区中,这种操作的代价很高,除非是对特别小的数组。
systemverilog的语言参考手册规定了ref参数只能用于带自动存储的子程序中(automatic funtion/automatic task/void function)。如果你对程序或模块指定了automatic属性,则整个程序内部都是自动存储的。