HDLBits刷题笔记Verilog Language_vectors(二)

10. Vectors

小知识点:Verilog中的向量通过定义一个名称将相关的同类型信号进行分组,使得它们更易被调用或操作。声明向量时,需将维数(向量由信号组成,所以也可称位宽)放在向量名之前,且一般以 [n-1:0] 的格式来声明n维(位)的向量,这与C语言的数组不同。在部分选择向量中的bit时,则将位宽放于向量名之后。举个小栗子:

wire [99:0] my_vector;		// Verilog中的100位wire型向量的声明
int your_array[100];		// C语言中的100个元素int型数组的声明

assign out = my_vector[10];	// Verilog中对向量的第11位信号的选用
a = your_array[10];			// C语言中对数组的第11个元素的访问调用

Practice: Build a circuit that has one 3-bit input, then outputs the same vector, and also splits it into three separate 1-bit outputs. Connect …

大白话:建一个电路,它有一个3位向量的输入,一个3位向量的输出和三个1位信号的输出。连法如图所示。

转自HDLBits
答案(先做再看哦,且不唯一,仅供参考):

module top_module (
    input wire [2:0] vec,
    output wire [2:0] outv,
    output wire o2,
    output wire o1,
    output wire o0  ); // Module body starts after module declaration

    assign outv = vec;
    assign o2 = vec[2];
    assign o1 = vec[1];
    assign o0 = vec[0];

endmodule

11. Vectors in more detail

小知识点①:向量对多个相关信号进行分组,通过向量名可使这些信号更便于操作。向量的声明格式:类型 [高位:低位] 向量名; 如果是在声明输入或输出端口,则需在类型中加上端口的类型,例如上题的答案。

   向量的位顺序(或“方向”,端序)取决于向量的最低有效位是较大的指数还是较小的指数(如声明为[3:0] v的向量,最低有效位是v[0],即“小端”;若声明为[0:3] v,则最低有效位是v[3],即“大端”。按字节寻址的存储器也分大小端,字地址用该字低位字节的地址来表示,即小端;字地址用该字高位字节的地址来表示,即大端。学过的同学可以类比一下两者的联系与区别)。在Verilog中,一旦向量以特定的位顺序声明,就必须以相同的方式使用它(例如,若声明为wire [3:0] v,但以v[0:3]赋值,是不允许的)。保持一致的位顺序是很重要的,因为如果将不同位顺序的向量一起赋值或使用,就会出现奇怪的bug。

浅出:怎么声明就怎么用,左边的是高位,右边的是低位,一般都把更大的指数放高位,最小的放最低有效位,具体可看下面的栗子:

wire [2:0] v; // v[2]是最高位,v[1]是次高位,v[0]是最低有效位,一般都是这么声明
assign v = 3’b110; // v[2]=1(最高位的1),v[1]=1(第二位的1),v[0]=0(末位)

wire [0:2] v; // 最高位变成了v[0],次高位是v[1],最低位是v[2],这样容易记错
assign v = 3’b110; // v[0]=1(最高位的1),v[1]=1(第二位的1),v[2]=0(末位)
小知识点②:使用隐式声明的向量会产生难以检测的bug。在Verilog中,可以通过assign语句或将未声明的内容附加到模块端口来隐式地声明信号。综合器会把未声明的内容隐式地声明成1个bit宽的信号,如果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值