打造IC人才
科技生态圈
发布时间:2022-10-11
来源:IC修真院
动态截取固定长度数据语法,即+:和-:的使用,这两个叫什么符号呢?运算符吗?
Verilog比较方便的一个特点就是数据的截取和拼接功能了,截取使用方括号[],拼接使用大括号{},例如:
于是举一反三(zi zuo cong
ming),为了实现动态截取固定长度数据的功能,使用软件编程的思维写了如下语句,功能很好理解,根据cnt的值,每次截取vect的5Bit数据。
一顿操作猛如虎,编译一看傻如狗。使用ModelSim编译之后,提示有如下语法错误:
提示vect的范围必须为常量表达式。也就是必须为,vect[6:2]或vect[7:4],不能是vect[a:0],vect[4:b],或vect[a:b]。额,这该怎么办呢?
既然有这个使用场景,那Verilog在设计之初就应该会考虑到这个应用吧!于是就去翻IEEE的Verilog标准文档,在5.2.1章节发现了一个用法可以实现我这个需求,那就是+:和-:符号,这个用法很少,在大部分关于FPGA和Verilog书籍中都没有提到。
大致意思就是,可以实现动态截取固定长度的数据,基本语法为:
其中base可以为变量,width必须为常量。下面来举几个例子来理解这个符号。有如下定义:
以下写法分别表示什么呢?
分为以下三个步骤:
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)看宽度转换
同理:
ModelSim仿真验证,新建test.v文件:
在ModelSim命令窗口输入:
这种语法表示需要注意,前者起始位可以是变量,后者的宽度必须是常量,即vect[idx+:cnt]不符合语法标准,vect[idx+:4]或vect[idx-:4]才符合。
相关推荐:
上一篇:为什么越来越多人选择嵌入式?
推荐阅读
2022-10-14
2022-08-03
2022-12-27
2023-06-26
2022-11-22