前言
在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}<

本文详细讲解了Verilog中如何使用位拼接运算符({}
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



