Verilog位拼接运算符{}

前言

在Verilog中如何给一个多位的变量(如123bit)赋值呢?不能连续写123个1吧,此时需要位拼接运算。

一:位拼接运算符的定义

1:{}位拼接运算符用于将两个或多个信号拼接起来,表示一个整体的信号,如下:

a = {b[5],b[4:0]}

意思为 b的最高位b[5]和b的低五位拼接起来,组成的a为6位,相当于:

a = {b[5],b[4],b[3],b[2],b[1],b[0]}

2:即把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号,例如:

{a, b[3:0], c, 3'b100}

也可以写成为:

{a, b[3],b[2], b[1],b[0],c, 1'b1,1'b0,1'b0}

3:将d_in的最高位和d_in的低7位取反加一拼接起来,拼接之后d_out为8位;

d_out={d_in[7],~d_in[6:0]+1'b1};

4:表示一个整体的信号例如一个一位全加器可以将进位输出和结果拼接在一起:

例如加法器:

module fulladder(a, b, cin, sum, cout);
  input a, b, cin;
  output sum, cout;
 
  assign {cout, sum} = a + b + cin;    // 进位输出与和拼接在一起
 
endmodule

6:使用重复数字法简化拼接表达式的书写

  • 例如要表示4bit的w
{4{w}} <=> {w, w, w, w}
  • 使用嵌套方式简化书写
{a, {3{b, c}}} <=> {a, b, c, b, c, b, c}

注意:

  • 位拼接表达式中最好指明每个元素的具体位数,否则默认为32位二进制数

二:{{}}表示复制

1:{4{a}}等同于{a,a,a,a}

2:

16{a[15]} //等价于下面


{ 
   a[15], a[15], a[15], a[15], a[15], a[15], a[15], a[15],
   a[15], a[15], a[15], a[15], a[15], a[15], a[15], a[15]
}

3:

assign result = {{16{a[15]}}, {a[15:0]}};//等价于下面



assign result[ 0] = a[ 0];
assign result[ 1] = a[ 1];
assign result[ 2] = a[ 2];
assign result[ 3] = a[ 3];
assign result[ 4] = a[ 4];
assign result[ 5] = a[ 5];
assign result[ 6] = a[ 6];
assign result[ 7] = a[ 7];
assign result[ 8] = a[ 8];
assign result[ 9] = a[ 9];
assign result[10] = a[10];
assign result[11] = a[11];
assign result[12] = a[12];
assign result[13] = a[13];
assign result[14] = a[14];
assign result[15] = a[15];
assign result[16] = a[15];
assign result[17] = a[15];
assign result[18] = a[15];
assign result[19] = a[15];
assign result[20] = a[15];
assign result[21] = a[15];
assign result[22] = a[15];
assign result[23] = a[15];
assign result[24] = a[15];
assign result[25] = a[15];
assign result[26] = a[15];
assign result[27] = a[15];
assign result[28] = a[15];
assign result[29] = a[15];
assign result[30] = a[15];
assign result[31] = a[15];

花括号表示连接,从左侧的最高有效位(MSB)到右侧的最低有效位(LSB)。您正在创建一个32位总线(结果),其16个最高有效位由总线的第15位(MSB)的16个副本组成,其16个最低有效位仅由总线组成(此特定结构已知)作为符号扩展,例如,需要将负数以2的补码形式右移并保持为负而不是将零引入MSBits中

  • 7
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值