【 Verilog HDL 】Verilog 迭代连接运算符

举报
李锐博恩 发表于 2021/07/15 07:42:06 2021/07/15
【摘要】 Verilog HDL中有一个特殊的连接符号——“{}”,(上次看华为面试题也有这个简单的选择题),称为迭代连接运算符,顾名思义,它兼具迭代和连接的双重功效,如下: (1)连接功能 该运算符号的第一个基本功能就是连接功能,能够将若干个寄存器或者线网类型的变量首尾连接起来组成一个位宽更大的变量。例如: wire a = 1'b1;wire [2:0] b = 3'b001...

Verilog HDL中有一个特殊的连接符号——“{}”,(上次看华为面试题也有这个简单的选择题),称为迭代连接运算符,顾名思义,它兼具迭代和连接的双重功效,如下:

(1)连接功能

该运算符号的第一个基本功能就是连接功能,能够将若干个寄存器或者线网类型的变量首尾连接起来组成一个位宽更大的变量。例如:


  
  1. wire a = 1'b1;
  2. wire [2:0] b = 3'b001;
  3. wire [3:0] c = {a, b}; // c = 4'b1001;

(2)迭代功能

迭代功能是该运算符号的第二个基本功能,它能够把一个变量复制多次,然后首尾连接起来组成一个位宽更大的变量。例如:


  
  1. wire [1:0] a =2'b10;
  2. wire [7:0] b = {4{a}}; //b = 8'b10101010;

注意,最外层的那个大括号{}是不能省略的!里外两层大括号是语法的必须要求!因为上述赋值其实相当于:


  
  1. wire [7:0] b ={a,a,a,a};
  2. //如果省略了,相当于如下:
  3. wire [7:0] b = a,a,a,a;//不伦不类

所以,里层的大括号完成的是多次复制,而外层的大括号完成的是连接功能,两层大括号配合起来才完成了迭代功能。

(3)混合功能

所谓混合功能就是既有迭代又有连接的功能,如下:


  
  1. wire a = 1'b1;
  2. wire [2:0] b = 3'b011;
  3. wire [7:0] c = { {5{a}}, b }; //c = 8'b11111_011

注意,要保证迭代的完整性,不能写成:

c = { 5{a}, b };

即使你看起来也行呀,其实也不行,会导致编译出错。

上述例子是先迭代再连接,也可以先连接再迭代,如下:

wire [7:0] d = {2{a,b}}; // d = 8'b1011_1011;
 

最后,迭代连接运算符除了可以操作变量外,还可以操作常量,例如:如果我们要给一个64bit的线网向量赋值一个64bit的常量,我们可以这么做:


  
  1. wire [63:0] a = 64'bF9F9F9_A8A8A8A8A8;
  2. //可以利用迭代写成:
  3. wire [63:0] a = 64'b{ {3{8'hF9}}, {5{8'hA8}} };

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/82775152

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。