Verilog 位拼接运算符 { }

虽然Verilog HDL和C语言长得很像,但是在学习verilog的过程中还是遇到了一些和C完全不同的语法,比如拼接运算符 { }

注意: 这个{ }的使用跟C语言一点关系没有,Verilog语言表示代码区块是用begin-end来表示

1. 定义

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

例如一个一位全加器可以将进位输出和结果拼接在一起:

module fulladder(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;

assign {cout, sum} = a + b + cin;	// 进位输出与和拼接在一起

endmodule

因为如果a+b+cin产生了溢出位,正好被参与拼接中的cout所接收,就起到了简化表达式的作用

再例如在移位寄存器中有以下的部分:

// 设有寄存器store[7:0]
store <= {0, store[7:1]};

上面的代码通过拼接0和store的左侧7位实现了右移1位的操作
则store的值的变化:

// store 初值为1111_1111
1111_1111
0111_1111
0011_1111
	......

2. 技巧与注意事项

使用位拼接运算符的技巧:

  1. 使用重复数字法简化拼接表达式的书写
{4{w}} = {w, w, w, w}
  1. 使用嵌套方式简化书写
{a, {3{b, c}}} = {a, b, c, b, c, b, c}

使用位拼接运算符的注意

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

你可能感兴趣的:(Verilog,HDL与FPGA)