[Verilog]Verilog中的位拼接运算符{ }

                             Verilog中的位拼接运算符{ }

       引言:在Verilog中,如何給一個多bit(如123bit)的變量賦值呢?該不至於連續寫123bit的1吧?或者換算為16進制數表示?如果1230bit又該怎麼辦?此時就需要位拼接運算。

一、Verilog中的位拼接运算符

       虽然Verilog HDL和C语言长得很像,但是在学习Verilog的过程中还是遇到了一些和C完全不同的语法,比如拼接运算符 { }。注意: 这个{ }的使用跟C语言一点关系没有,Verilog语言表示代码区块是用begin-end来表示的。

 1.2、位拼接的定义

       位拼接运算符{ }用于将两个或多个信号拼接起来,表示一个整体的信号例如一个一位全加器可以将进位输出和结果拼接在一起:

  • 例如加法器:
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的值的变化:


二、技巧与注意事项

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

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


 2.2、使用位拼接运算符的注意:

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

三、通過參數指定位寬

localparam    MEM_DUMMY_BIT    =  1024;

assign l1_evt_mem_dummy_data = {{(MEM_DUMMY_BIT){1'b0}}, l1_evt_mem_di};

四、參考文獻

 4.1、參考鏈接:Link

猜你喜欢

转载自blog.csdn.net/gsjthxy/article/details/106301674