我在一个示例中遇到了module
的{{1}}输入和输出的系统verilog代码,但未说明其类型,例如logic
,wire
...
module mat_to_stream (
input [2:0] [2:0] [2:0] a,b,
input newdata,
input rst, clk,
output [2:0] [7:0] A_out, B_out);
...rest of code...
陈述logic
与不陈述任何类型之间的差异是什么?
答案 0 :(得分:9)
说明logic
与不说明任何类型之间没有区别。
input newdata,
相当于
input logic newdata,
SystemVerilog IEEE Std(1800-2009)在以下章节中描述了这一点:“23.2.2.3确定端口类型,数据类型和方向的规则”。
答案 1 :(得分:1)
将输入分配为数据类型是很常见的,因为它们几乎总是wire
。
input [7:0] newdata
名义上相当于:
input wire [7:0] newdata
它实际上正在拾取`default_nettype wire
,可以更改为uwire
来强制执行独特驱动程序的编译器检查,这将导致多个驱动器的接线错误失败。
使用logic
作为类型,可以在wire
和reg
之间自动选择,这对输出非常有用,并且可以更轻松地进行折射。输入永远不能是reg
类型。
Stuart Sutherlands SNUG2013 paper,第12节介绍如果工具正确支持,uwire
如何更好地暗示设计意图。