【问题标题】:packed vs unpacked vectors in system verilog系统verilog中的打包与解包向量
【发布时间】:2022-01-14 17:52:50
【问题描述】:

查看我在 System Verilog 中维护的一些代码,我看到一些信号是这样定义的:

node [range_hi:range_lo]x;

以及其他定义如下:

node y[range_hi:range_lo];

我了解x 被定义为已打包,而y 被定义为未打包。但是,我不知道这意味着什么。

System Verilog 中打包和解包向量的区别是什么?

编辑: 回应@Empi 的回答,为什么使用 SV 编写代码的硬件设计师应该关心数组的内部表示?有没有什么时候我不应该或不能使用打包信号?

【问题讨论】:

    标签: vector system-verilog


    【解决方案1】:

    本文提供了有关此问题的更多详细信息: http://electrosofts.com/systemverilog/arrays.html,尤其是第 5.2 节。

    打包数组是一种将向量细分为子字段的机制,这些子字段可以作为数组元素方便地访问。因此,一个打包的数组保证被表示为一组连续的位。解压缩的数组可能会或可能不会如此表示。压缩数组与未压缩数组的不同之处在于,当压缩数组作为主数组出现时,它被视为单个向量。

    【讨论】:

    • >压缩数组与非压缩数组的不同之处在于,当压缩数组作为主数组出现时,它被视为单个向量。这句话是什么意思?
    【解决方案2】:

    在知道究竟什么是打包和解包数组之前,让我们看看如何仅通过它们的声明就知道哪个数组是什么。 压缩数组在大小声明之前有一个对象名称。例如:

    bit [3][7] a;
    

    解压数组在大小声明之后有一个对象名称。例如:

    bit a[3];
    

    打包的数组会产生内存,而未打包的则不会。 您也可以像这样访问/声明解包数组

    reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};
    

    您可以混合打包和解包数组来创建多维内存。例如:

    bit [3:0][7:0]a[2:0].
    

    它创建一个深度为 3 的 4(即 4*8)字节数组。

    【讨论】:

    • "打包后的数组会产生内存,而未打包的则不会。"那是什么意思?有很多 FPGA 综合工具可以将解压的数组转换成某种内存(FF 或 RAM)。
    【解决方案3】:

    当我们写一个 [3:0][7:0]A[4:0] 时,压缩数组主要用于有效的内存使用,这意味着在 32 位内存位置中,每个 8 位的 4 个切片被打包以形成一个32 位。右侧的值表示那里有 5 个这样的切片。

    【讨论】:

      【解决方案4】:

      解压数组比打包数组提供更多的编译时错误检查。

      出于这个原因,我在模块的端口定义上看到了未打包的数组。如果信号的维度与未打包数组的端口不完全相同,编译器将出错。对于打包的数组,它通常会继续并尽可能地连接东西,而不是发出错误。

      【讨论】:

        【解决方案5】:

        bit[3:0] a -> 压缩数组 打包数组可以用作完整数组 (a='d1) 或只是数组的一部分 (a[0]='b1)

        bit a [3:0] -> 解压数组 解压后的数组不能作为a[0]='b1使用,必须作为完整的a={8{'b1}}使用

        【讨论】:

          【解决方案6】:

          bit a [3:0] -> unpacked array 解压后的数组不能作为a[0]='b1,必须作为完整的a={8{'b1}}

          ---> 在上述语句中 a[0] ='b1;将适用于未打包的数组,它不适用于 unpkd 数组的某些部分[例如逻辑 unpkd [8];] 像 unpkd = 5'h7;分配同样适用于 pkd 数组 --> unpkd = unpkd +2;对 unpkd 不起作用 对 pkd 起作用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多