欢迎光临散文网 会员登陆 & 注册

HDLBits (12) — 详解向量

2021-09-14 00:46 作者:僚机Wingplane  | 我要投稿

本题链接:

https://hdlbits.01xz.net/wiki/Vector1

向量用于使用一个名称对相关信号进行分组,以便更方便地操作。 例如,wire [7:0] w; 声明一个名为 w 的 8 位向量,相当于有 8 条单独的线。

声明向量

向量必须被声明:

type 指定向量的数据类型。 这通常是线网( wire )或寄存器( reg )。 如果您要声明输入或输出端口,则除了类型还可以另外加上端口类型(例如,输入或输出)。 举些例子:

向量的字节序(或常说的“方向”)是最低有效位是低地址(小端,例如 [3:0])或高地址(大端,例如 [0:3])。在 Verilog 中,一旦用特定的字节序声明了向量,就必须始终以相同的方式使用它。 例如,当 vec 被声明为 wire [3:0] vec 时,写入 vec[0:3]; 是违规的。 所以与字节序保持一致是一种很好的做法,因为如果分配或一起使用不同字节序的向量,就会发生奇怪的错误。

隐式网络

隐式网络通常是难以检测的错误的来源。 在 Verilog 中,网络类型信号可以通过赋值语句或通过将未声明的东西附加到模块端口来隐式创建。 隐式网络始终是一位连线,如果您打算使用矢量,则会导致错误。 可以使用 `default_nettype none 指令禁用隐式网络的创建。

添加 `default_nettype none 会使第二行代码出错,从而使错误更加明显。

未打包 vs. 打包数组

您可能已经注意到,在声明中,向量索引写在向量名称之前。 这声明了数组的“打包”位宽,其中位被“打包”到一个 blob 中(这与模拟器有关,但与硬件无关)。 解压缩的位宽在名称之后声明。 它们通常用于声明内存数组。 由于 ECE253 没有涵盖内存数组,我们在本课程中没有使用打包数组。

通过访问下面的链接得到对应的细节:

http://www.asic-world.com/systemverilog/data_types10.html

访问向量元素:部分选择

访问整个向量是使用向量名称完成的。例如:

获取整个 4 位向量a并将其分配给整个 8 位向量w(声明取自上面)。如果左右两边的长度不匹配,则根据需要进行扩展或截断。

部分选择运算符可用于访问向量的一部分:

一点练习

构建一个组合电路,将输入半字(16 位, [15:0] )分成低 [7:0] 和高 [15:8] 字节。

模块声明:

题目

答案

输出波形

当位宽大于 1 时,wire 或 reg 即可声明为向量的形式。我们可以指定某一位或若干相邻位,作为其他逻辑使用。Verilog 支持可变的向量域选择,以及指定 bit 位后固定位宽的向量域选择访问。

  • [bit+: width] : 从起始 bit 位开始递增,位宽为 width。

  • [bit-: width] : 从起始 bit 位开始递减,位宽为 width。

对信号重新进行组合成新的向量时,需要借助大括号。

参考内容:

2.3 Verilog 数据类型 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-data-type.html



HDLBits (12) — 详解向量的评论 (共 条)

分享到微博请遵守国家法律