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

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

3天内不再提示

Verilog比较方便的特点

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-08-17 09:01 次阅读

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

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


reg[7:0]vect; wirea; wire[3:0]b, wire[5:0]c; assigna=vect[1];//取其中1Bit assignb[3:0]=vect[7:4];//截取4Bit assingc[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; assignout=vect[cnt+4:cnt];

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


**Error:test.v(10):Rangemustbeboundedbyconstantexpressions.

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

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

29de4094-1dc1-11ed-ba43-dac502259ad0.jpg

(获取IEEE官方Verilog标准文档IEEE_Verilog_1364_2005.pdf下载,公众号(ID:电子电路开发学习)后台回复【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]

29efbad6-1dc1-11ed-ba43-dac502259ad0.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]

2a0b6eca-1dc1-11ed-ba43-dac502259ad0.jpg

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


moduletest; 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命令窗口输入:


//进入到源文件所在文件夹 cdc:/users/whik/desktop/verilog //编译 vlogtest.v //仿真 vsimwork.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:0psIteration:0Instance:/test #BreakinModuletestattest.vline15

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

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

    关注

    8

    文章

    7030

    浏览量

    89036
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110100
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32871

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

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

收藏 人收藏

    评论

    相关推荐

    Verilog_比较细节的语法

    Verilog比较细节的`语法
    发表于 09-17 23:47

    fpga用什么软件工具开代码比较方便

    fpga用什么软件工具开代码比较方便比如看C语言,用Source Insight比较方便,但是发现用source insight 看verilog
    发表于 04-15 21:55

    vhdl与verilog语法比较

    VHDL与verilog比较1vhdl语法要求严格 如赋值的数据类型必须一致, 左边为整数,右边必须也为整数, 左边为矢量右边必须也为矢量左右的数据的 位宽必须也一致,例如: library
    发表于 05-30 15:12

    现在社会上Verilog与vhdl哪个用的比较多?

    现在社会上Verilog与vhdl哪个用的比较多?
    发表于 09-08 20:45

    【FPGA学习】Verilog HDL有哪些特点

    Verilog HDL 的特点Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。使用这种语言编写的模型可以方便地使用
    发表于 09-18 09:33

    Verilog HDL与VHDL及FPGA的比较分析

    Verilog HDL与VHDL及FPGA的比较分析. Verilog HDL优点:类似C语言,上手容易,灵活。大小写敏感。在写激励和建模方面有优势。
    发表于 01-11 10:45 1378次阅读

    VHDL,Verilog,System verilog比较

    本文简单讨论并总结了VHDL、Verilog,System verilog 这三中语言的各自特点和区别 As the number of enhancements
    发表于 01-17 11:32 0次下载

    verilog与VHDL相互转化软件

    一款基于verilog与VHDL相互转化的软件,用着很方便,很实用。
    发表于 03-21 17:26 20次下载

    verilog是什么_verilog的用途和特征是什么

    本文首先介绍了verilog的概念和发展历史,其次介绍了verilog的特征与Verilog的逻辑门级描述,最后介绍了Verilog晶体管级描述与v
    发表于 05-14 14:22 4.5w次阅读
    <b class='flag-5'>verilog</b>是什么_<b class='flag-5'>verilog</b>的用途和特征是什么

    Verilog HDL的基础知识详细说明

    硬件描述语言基本语法和实践 (1)VHDL 和Verilog HDL的各自特点和应用范围 (2)Verilog HDL基本结构语言要素与语法规则 (3) Verilog HDL组
    发表于 07-03 17:36 54次下载
    <b class='flag-5'>Verilog</b> HDL的基础知识详细说明

    比较Verilog中Wire和Reg的不同之处

    wire 和reg是Verilog程序里的常见的两种变量类型,他们都是构成verilog程序逻辑最基本的元素。正确掌握两者的使用方法是写好verilog程序的前提。
    的头像 发表于 03-08 17:18 1.2w次阅读

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

    Verilog比较方便的一个特点就是数据的截取和拼接功能了,截取使用方括号[],拼接使用大括号{}。
    的头像 发表于 03-21 10:01 3145次阅读
    关于<b class='flag-5'>Verilog</b>语法你不知道的方法

    Verilog在设计时候的不方便地方

    Verilog发布到今天,其已经经历了四十年的风雨,早期的“电路”设计Verilog的确很方便,尤其在那个年代,其也崔进了集成电路的发展。但是“老”不代表方便,尤其高速发展的今天,集
    发表于 08-02 10:08 953次阅读

    二十进制编码器及Verilog HDL描述 Verilog HDL程序的基本结构及特点

    节通过硬件描述语言Verilog HDL对二十进制编码器的描述,介绍Verilog HDL程序的基本结构及特点
    的头像 发表于 08-28 09:54 2948次阅读
    二十进制编码器及<b class='flag-5'>Verilog</b> HDL描述 <b class='flag-5'>Verilog</b> HDL程序的基本结构及<b class='flag-5'>特点</b>

    Verilog与VHDL的比较 Verilog HDL编程技巧

    Verilog 与 VHDL 比较 1. 语法和风格 VerilogVerilog 的语法更接近于 C 语言,对于有 C 语言背景的工程师来说,学习曲线较平缓。它支持结构化编程,代
    的头像 发表于 12-17 09:44 146次阅读