简述
在初步接触到Verilog的括号时经常会将其和matlab矩阵的各种(括号)、[中括号]、{大括号}搞混。
Verilog中括号的应用
Verilog语言中,除去这些括号在计算优先级中的作用(一般也只会用到小括号加优先级)。
(括号)主要用于函数模块传参,例如自定义函数 fuc_name后面括号内定义的input、output,或者一些if、always语句后面括号内添加判定信息(其实也就是函数传参)。
[中括号]用于位数声明,例如定义reg信号的位数,或者调用某信号的位数:
reg [7:0] CPU_RESET_delay = { 8{1'b1} } ;
{大括号}还是参见上例:
1、{ }表示拼接,{第一位,第二位…};
2、{{ }}表示复制,{4{a}}等同于{a,a,a,a};
所以 { 8{1’b1} }就表示将8个1拼接起来,即8’b11111111。
对比matlab
matlab里面(括号)用于引用或声明数组的元素,[中括号]用来存储矩阵和向量,逗号或者空格隔开、分号换行,{ 大括号}用于cell型的数组的分配或引用,例如:
>> clear all;
>> a=cell(2,2)
a=
[] []
[] []
>> a{1,2}=[1,2]
a =
[] [1,2]
[] []
上例中cell型数组的引用也必须用{大括号}才能调用,例如a{1,2} = [1,2]。
matlab个人用的也不算多,全是做图像处理用到的,而且感觉matlab编码不太正经,所以可能理解有较大偏差。