logic[1:0] a;
logic[1:0] b;
assign a = {1'b0, 1'b1};
assign b = '{1'b0, 1'b0};
在Verilog / SystemVerilog中拥有'{}之前是否有区别?
答案 0 :(得分:6)
是。只要将'
放在前面,就不再有连接;你有一个任务模式。在许多情况下,结果看起来相同,但主要区别在于连接,每个操作数在自定义上下文中进行评估,而在赋值模式中,每个操作数都在一个赋值给每个元素的上下文中。模式。拿这个修改过的例子:
assign a = {2'b1,2'b0}; // result is 4'b0100, a == 2'b00
assign b = '{2'b1,2'b0}; // result is b[1] = 2'b1, b[0] = 2'b0; b == 2'b10
串联的宽度为4位,并被截断为2位。 在赋值模式中,每个操作数从2到1位被截断。
连接具有分配模式中不可用的其他功能,例如复制a = {2{1'b1}};
分配模式具有连接中不可用的功能,例如索引标记b = '{0:1, 1:0};
b = 2'b01。此功能在结构和关联数组中非常有用。例如
string AA[int] = '{0:"zero", 1:"one",2:"two",default:"undefined"};
AA [0],AA [1]和AA [2]分别返回“零”,“一”和“两”。但是任何其他索引都返回字符串“undefined”