明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 269770|回复: 1

MDY常用的数据选择语句

[复制链接]
发表于 2020-3-28 11:28:09 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本文为明德扬原创及录用文章,转载请注明出处!

    Verilog语法中有一个常用的选择语句,其语法形式为:

    vect[a +: b]或vect [a -: b];

    vect为变量名字,a为起始位置,加号或者减号代表着升序或者降序,b是进行升序或者降序的宽度。

    vect[a +: b]等同于vect[a : a+b-1],vect的区间从a开始,往比a大的方向数b个数;vect [a -: b]等同于vect[a : a-b+1],vect的区间从a开始,往比a小的方向数b个数。a可以是一个常数也可以是一个可变的数,但b必须是一个常数。

    例1:vect[7 +: 3];

    其中,起始位置为7,+代表着升序,宽度为3。即从7开始往比7大的方向数3个数。其等价形式为:vect[7 +: 3]==vect[7 : 9]。

     例2:vect[9 -: 4];

    其中,起始位置为9,-代表着降序,宽度为4。即从9开始往比9小的方向数4个数。其等价形式为:vect[9 -: 4]==vect[9 : 6]。

    在实际使用的过程中,这个语法最常用的形式是将a作为一个可变的数来使用。例如需要设计如下代码:

    当cnt==0时,将din[7:0]赋值给data[15:8];当cnt==1时将din[7:0]赋值给data[7:0]。

    在设计的时候便可以写成:data[15-8*cnt -: 8] <= din[7:0](这里需要把15-8*cnt看成一个整体a,它是一个随着cnt变化而变化的数)。这样就可以精简我们的代码了。

    选择语句的硬件电路结构如下图31所示,本质上是个选择器。当cnt==0时,选中data[15:8]的锁存器,将din[7:0]赋值给data[15:8],而data[7:0]的锁存器保持输出不变;当cnt==1时,选中data[7:0]的锁存器,将din[7:0]赋值给data[7:0],而data[15:8]的锁存器保持输出不变。

1.png

    图31选择语句硬件电路图


    用Modelsim对上面的例子进行一下功能仿真,仿真图如下:

2.png

    图32 仿真的波形图


    仿真结果满足实际的设计需求。

    笔者经验:在实际工程中可以多多使用选择语句vect[a +: b]或vect [a -: b]的形式来写代码,这将有助于精简设计代码。


FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385

0

主题

3

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2021-1-21 19:06:28 | 显示全部楼层
对学习有帮助 非常不错,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-25 14:03 , Processed in 0.053550 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表