logic[1:0] a;
logic[1:0] b;
assign a = {1'b0, 1'b1};
assign b = '{1'b0, 1'b0};
Run Code Online (Sandbox Code Playgroud)
在Verilog/SystemVerilog中拥有'{}之前有区别吗?
是.一旦你把它'放在前面,你就不再有连接; 你有一个任务模式.在许多情况下,结果看起来相同,但主要区别在于连接,每个操作数在自定义上下文中进行评估,而在赋值模式中,每个操作数都在一个赋值给每个元素的上下文中.模式.拿这个修改过的例子:
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
Run Code Online (Sandbox Code Playgroud)
串联的宽度是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"};
Run Code Online (Sandbox Code Playgroud)
AA [0],AA [1]和AA [2]分别返回"零","一"和"两".但任何其他索引返回字符串"undefined"