0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于Verilog语法你不知道的方法

FPGA之家 来源:开源博客 作者:电子电路开发学习 2021-03-21 10:01 次阅读

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

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

reg [7:0] vect; wire a; wire [3:0] b, wire [5:0] c; assign a = vect[1]; //取其中1Bit assign b[3:0] = vect[7:4];//截取4Bit assing c[5:0] = {a, b[3:0], 1‘b1}; //拼接

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

reg [7:0] vect; reg [1:0] cnt; wire [4:0] out; assign out = vect[cnt+4:cnt];

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

** Error: test.v(10): Range must be bounded by constant expressions.

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

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

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

vect[base+:width]或[base-:width]

其中base可以为变量,width必须为常量。

下面来举几个例子来理解这个符号。

有如下定义:

reg [7:0] vect_1; reg [0:7] vect_2; wire [2:0] out;

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

vect_1[4+:3]; vect_1[4-:3]; vect_2[4+:3]; vect_2[4-:3];

分为三步:

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.看宽度转换。

vect_1[4+:3]表示,起始位为4,宽度为3,**升序**,则vect_1[4+:3] = vect_1[6:4] vect_1[4-:3]表示,起始位为4,宽度为3,**降序**,则vect_1[4-:3] = vect_1[4:2]

90395bd0-8925-11eb-8b86-12bb97331649.jpg

同理,

vect_2[4+:3]表示,起始位为4,宽度为3,升序,则vect_2[4+:3] = vect_2[4:6] vect_2[4-:3]表示,起始位为4,宽度为3,降序,则vect_2[4-:3] = vect_2[2:4]

90935130-8925-11eb-8b86-12bb97331649.jpg

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

module test; reg [7:0] vect_1; reg [0:7] vect_2; initial begin vect_1 = ’b0101_1010; vect_2 = ‘b0101_1010; $display(“vect_1[7:0] = %b, vect_2[0:7] = %b”, vect_1, vect_2); $display(“vect_1[4+:3] = %b, vect_1[4-:3] = %b”, vect_1[4+:3], vect_1[4-:3]); $display(“vect_2[4+:3] = %b, vect_2[4-:3] = %b”, vect_2[4+:3], vect_2[4-:3]); $stop; end endmodule

在ModelSim命令窗口输入:

//进入到源文件所在文件夹 cd c:/users/whik/desktop/verilog //编译 vlog test.v //仿真 vsim work.test //运行 run -all //运行结果 # vect_1[7:0] = 01011010, vect_2[0:7] = 01011010 # vect_1[4+:3] = 101, vect_1[4-:3] = 110 # vect_2[4+:3] = 101, vect_2[4-:3] = 011 # ** Note: $stop : test.v(15) # Time: 0 ps Iteration: 0 Instance: /test # Break in Module test at test.v line 15

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109312
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92423

原文标题:这个Verilog语法你一定不知道

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    直插大功率电感不知道怎么选就看这里

    直插大功率电感不知道怎么选就看这里 编辑:谷景电子 关于直插大功率电感的选型一直是一个难题,要想直插大功率电感的优势在电路中发挥着作用,那么选型这个环节是必不可少并且特别重要。如果你对直插大功率电感
    的头像 发表于 01-04 22:46 142次阅读

    7种MOSFET栅极电路的常见作用,不看不知道

    7种MOSFET栅极电路的常见作用,不看不知道
    的头像 发表于 12-15 09:46 405次阅读
    7种MOSFET栅极电路的常见作用,不看<b class='flag-5'>不知道</b>!

    揭秘pcb是什么物质:你不知道的“化学战士”

    揭秘pcb是什么物质:你不知道的“化学战士”
    的头像 发表于 12-14 10:27 408次阅读

    verilog中有符号数和无符号数的本质探究

    不知道有没有人像我一样,长久以来将verilog中的有符号数视为不敢触碰的禁区。
    的头像 发表于 12-04 16:13 319次阅读
    <b class='flag-5'>verilog</b>中有符号数和无符号数的本质探究

    不知道的FPC,它的发展史竟然是这样的!

    不知道的FPC,它的发展史竟然是这样的!
    的头像 发表于 11-15 10:48 462次阅读

    Verilog 模块基本结构

    verilog极简语法手册
    发表于 10-23 09:28 0次下载

    【每日一练】参与FPGA技术社区每日学习,轻松掌握Verilog语法

    活动介绍: 每日一练活动主要针对 Verilog 入门常用语法及常用技巧的练习,30个关于语法练习的题目,每天更新一个题目及公布前一天的参考答案及相关解析 活动规则: 每日一练活动结
    发表于 08-01 10:37

    怎么解决verilog和system verilog语法亮亮的问题呢?

    在创建一个linux系统的时候,安装完gvim,系统默认的gvim的模式是白色背景,黑色字体,无语法亮亮。打开一个python脚本大概是下面这种效果。
    的头像 发表于 07-26 17:37 689次阅读
    怎么解决<b class='flag-5'>verilog</b>和system <b class='flag-5'>verilog</b><b class='flag-5'>语法</b>亮亮的问题呢?

    verilog可综合的语法子集

    可综合的语法是指硬件能够实现的一些语法,这些语法能够被EDA工具支持,能够通过编译最终生成用于烧录到FPGA器件中的配置数据流。
    的头像 发表于 07-23 12:25 815次阅读

    关于AnyDesk你不知道的5件事

    游戏玩家会回忆起那些需要将软盘或CD安装到硬盘驱动器上的电脑游戏。不用说,数字时代已经推进了我们今天安装视频游戏的方式,因为从合法游戏平台下载已经取代了旧的CD-ROM。现在,您知道外出时可以使用AnyDesk远程开始下载PC游戏吗?
    的头像 发表于 06-11 15:53 785次阅读

    从仿真器的角度理解Verilog语言2

    要想深入理解Verilog就必须正视Verilog语言同时具备硬件特性和软件特性。在当下的教学过程中,教师和教材都过于强调Verilog语言的硬件特性和可综合特性。将Verilog语言
    的头像 发表于 05-25 15:10 630次阅读
    从仿真器的角度理解<b class='flag-5'>Verilog</b>语言2

    从仿真器的角度理解Verilog语言1

    要想深入理解Verilog就必须正视Verilog语言同时具备硬件特性和软件特性。在当下的教学过程中,教师和教材都过于强调Verilog语言的硬件特性和可综合特性。将Verilog语言
    的头像 发表于 05-25 15:10 677次阅读
    从仿真器的角度理解<b class='flag-5'>Verilog</b>语言1

    盘点你不知道的电缆套管知识-科兰

    电缆套管又称保护管、导管,是在电气安装中用于保护电线、电缆布线的管道,允许电线、电缆的穿入与更换。电缆套管是电力工程中推广使用的一种新型套管材料。盘点你不知道的电缆套管知识,希望能够得到帮助。 电缆
    的头像 发表于 05-25 10:24 1141次阅读

    SD卡挂载完成,不知道有没有能够测试SD卡读写速度的例子?

    SD卡挂载完成,不知道有没有能够测试SD卡读写速度的例子?请知道的大侠赐教!!
    发表于 05-12 15:33

    pikascript移植报错不知道是哪里的问题?

    想在fm33lx基础上应用pikaScript做脚本开发,通过env添加了pikaScript的软件包,工程里也出现了对应的文件,但是在编译的时候提示错误,不知道哪里的问题,请大咖指教。
    发表于 05-05 11:49