Verilog学习日志(2021.7.1)

本文详细介绍了Verilog HDL中的向量操作,包括向量声明、部分选择、隐式网络、解压缩和压缩数组,以及如何进行按位和逻辑运算。通过实例解析了向量反转、字节顺序交换和组合操作。同时,探讨了数组引用的冲突问题,并提出了疑问。最后,讨论了将日志发布到优快云的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021.7.1

1.继续在HDLbits刷题。

(11)开始学向量的内容。一个8位wire向量等同于把八个独立信号排在一起。可以把它看作数组,要选取其中一位只要通过”[n]”实现即可。

(12)掌握和向量相关的细节。

①向量一定要先声明。//type [upper:lower] vector_name;

声明向量的type一般是wire或者reg,port type一般是input或者output。

以下是一些例子:

output reg [3:0] y; //port type: output; data type: reg; 4-bit
input [3:-2] z; //negative range(负浮动幅度)也是可以的

                     //没有特别声明的话默认是wire类型的向量

wire [0:7] b;  //反过来写也行,不过b[0]就变成最重要的一位了

                     //但是后面引用或选择该向量的时候,记得方向要一致,不能颠倒

②Implicit Nets(隐式网络)

在Verilog当中,如果在一个assign语句或者一个未被声明的模块当中出现/引用了未知(未声明)的向量,Implicit nets就会被隐性地生成在模块当中。Implicit nets一般都是一位wire变量,如果你要把那个向量作为向量来用,很可能就会报错。用指令default_nettype none可以禁止Implicit nets的生成。下面是个例子:

wire [2:0] a, c ;     //a和c是3位长的向量哦

assign a = 3’b101;    //a == 101

assign b = a;         //b == 1

assign c = b;         //c == 001

my_module i1 (d,e);   //d和e没声明直接被my_module拿去用了,
                      //这时候它们就成了implicit net,是一位宽的wire变量.
                      //如果my_module要d和e是向量就输了

用default_nettypr none禁止生成implicit nets就可以让bug更加明显了。

③unpacked和packed(解压缩数组和压缩数组)

在中文教程里面,直接把这个解释成向量和数组的区别了:放向量前面表示的是向量本身的长度,放向量后面的表示该向量长度向量构成的数组里面总共有几个向量。

在HDLbits里面,向量长度是”packed”()的,数组长度是”unpacked”的。

④访问向量里的元素:部分选择

在访问向量里面的部分元素的时候,有一些情况需要注意(我有一个问题):

x[1]      //x向量里面的最低位(最低位不应该是x[0]吗?!)

(13)题目是把一个4bytes的向量中4个byte顺序倒换。

(14)讨论按位运算和逻辑运算的区别,写一个按位或门和一个逻辑或门,和一个结合两个向量然后按位反相的反相器。

(15)把四位输入的向量中的每位拿来作为逻辑门的输入,然后整与门、或门和异或门。

(16)Concatenation: 用符号”{}”可以把两个小向量结合在一起然后变成一个大向量,Concatenation可以用在赋值语句的左边和右边。注意,被结合的小向量一定要先声明好长度。有个例子要注意一下:

input [15:0] in;              //in向量只有16位

output [23:0] out;         //out有24位呢

assign out = in;            //out的后8位变成0了

assign out[15:0] = in;    //out的后8位是缺省状态,是高阻态。

(17)把一个8位向量方向反转。

2.有两个待解决的问题,一个在上面的(12)④提到了,还有一个:

我们知道wire [3:0] addrs [7:0]; 表示由8个4位向量组成的数组。那怎么引用这个数组第n个向量的第m位呢?

因为前面我们知道,引用一个a位wire向量【wire [a:1] eg;】的第b位可以直接用【eg[b]】来表示。那不是和数组的引用规则冲突了?

3.考虑把日志发到优快云上,顺便纪念一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值