我已经看到很多系统verilog程序示例将数据包表示为打包结构 . 这些数据是否像包一样串行传输?如何在硬件中实现系统verilog结构?
结构只是封装变量的一种便捷方式 . 这是一种表明这些变量应该作为一个组进行操作的方法 . 但是,调用某个数据包不会让合成器创建您想要的硬件 . 由您来创建正在处理的协议的逻辑 .
SystemVerilog中的压缩结构只是为您提供了一种通过名称而不是位位置来访问信号字段的替代方法 . 例如
typedef struct packed { logic [2:0] field1; // 3-bits logic [4:0] field2; // 5-bits } signal_t; // 8-bits
您现在可以声明具有该类型的连线或变量
wire signal_t sigA; var signal_t sigB;
(除了在端口声明中,var关键字是隐式的大多数地方)
您现在可以将_1作为 sigA[7:5] 或 sigA.field1 进行访问 .
sigA[7:5]
sigA.field1
正如nguthrie指出的那样,解包结构提供了变量的分层分组,但它们也提供了比Verilog更强的类型 . 请参阅我的application note .
2 Answers
结构只是封装变量的一种便捷方式 . 这是一种表明这些变量应该作为一个组进行操作的方法 . 但是,调用某个数据包不会让合成器创建您想要的硬件 . 由您来创建正在处理的协议的逻辑 .
SystemVerilog中的压缩结构只是为您提供了一种通过名称而不是位位置来访问信号字段的替代方法 . 例如
您现在可以声明具有该类型的连线或变量
(除了在端口声明中,var关键字是隐式的大多数地方)
您现在可以将_1作为
sigA[7:5]
或sigA.field1
进行访问 .正如nguthrie指出的那样,解包结构提供了变量的分层分组,但它们也提供了比Verilog更强的类型 . 请参阅我的application note .