首页 > 技术知识 > 正文

先说答案:不行。

通常,reg [7:0mem [1:0]这种写法是作为内部二维寄存器使用的,比如定义一个1KB的存储器,可以用reg [7:0] memory [0:1023],或者reg [7:0] memory [1023:0]。那二维数组作为输入输出端口可以综合不?

做个小实验,简单造个小代码:

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用

用input [7:0] mem [1:0]这种二维数组作为input端口,

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用1

Verdi检查

首先用Verdi编译看看报错不:

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用2

上图很明显,Verdi默认就直接支持这种SV类型语法。

Spyglass检查

Spyglass就能严格报出来,除非set_option enableSV yes,否则不支持这种sv语法特性,

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用3

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用4

DC工具

那么Design Compiler是否支持这种语法综合呢?

综合一下,查看LOG:

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用5

也很明显,直接报Error,综合进程终止,DC是不支持的。

man查询一下报的错:VER-253:

Verilog二维数组作为输入输出端口可以吗-verilog中数组的使用6

感兴趣的朋友可以用C家的genius试试。

结论

结论:Verilog语法不支持二维数组作为输入输出端口。

可能有同学吐槽Verilog语法太僵硬了,不如sv便捷强大,况且很多国外团队已经用sv进行开发了,但是DC工具更希望RTL开发者明确指定每一根输入输出信号线的具体连接关系,虽然工作量繁杂一点,但可以避免工具与人的理解不一致而造成的芯片错误, 也迫使开发者想清楚每根线怎么连接。

谢阅读,别走!点赞、关注、转发后再走吧

转载:全栈芯片工程师

猜你喜欢