打造IC人才
科技生态圈

这个Verilog语法,你一定不知道!

发布时间:2022-10-11

来源:IC修真院

动态截取固定长度数据语法,即+:和-:的使用,这两个叫什么符号呢?运算符吗?

Verilog比较方便的一个特点就是数据的截取和拼接功能了,截取使用方括号[],拼接使用大括号{},例如:image

于是举一反三(zi zuo cong ming),为了实现动态截取固定长度数据的功能,使用软件编程的思维写了如下语句,功能很好理解,根据cnt的值,每次截取vect的5Bit数据。image

一顿操作猛如虎,编译一看傻如狗。使用ModelSim编译之后,提示有如下语法错误:image

提示vect的范围必须为常量表达式。也就是必须为,vect[6:2]或vect[7:4],不能是vect[a:0],vect[4:b],或vect[a:b]。额,这该怎么办呢?

既然有这个使用场景,那Verilog在设计之初就应该会考虑到这个应用吧!于是就去翻IEEE的Verilog标准文档,在5.2.1章节发现了一个用法可以实现我这个需求,那就是+:和-:符号,这个用法很少,在大部分关于FPGA和Verilog书籍中都没有提到。

4730630e220212a25336dd90d8a21886_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

大致意思就是,可以实现动态截取固定长度的数据,基本语法为:

image

其中base可以为变量,width必须为常量。下面来举几个例子来理解这个符号。有如下定义:

image

以下写法分别表示什么呢?

image

分为以下三个步骤:

1)先看定义

vect_1[7:0]定义是大端模式,则vect_1[4+:3]和vect_1[4-:3]转换后也一定为大端模式;vect_2[0:7]定义是小端模式,则vect_2[4+:3]和vect_2[4-:3]转换后也一定为小端模式。

2)再看升降序

其中+:表示升序,-:表示降序

3)看宽度转换image

222f44cf1d407829ab22d46b12e48ad7_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

同理:image

18c7c8484c64c0c0fcb5dc392907804c_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

ModelSim仿真验证,新建test.v文件:

image在ModelSim命令窗口输入:

image

这种语法表示需要注意,前者起始位可以是变量,后者的宽度必须是常量,即vect[idx+:cnt]不符合语法标准,vect[idx+:4]或vect[idx-:4]才符合。

相关推荐:

数电知识点整理_一文极速理解数电!

半导体存储最强科普

转行芯片ic行业,选择哪个岗位最容易实现年薪百万?

推荐阅读

换一换