SystemVerilog:Concatenation中的非基于unsized的文字

时间:2017-08-05 01:50:11

标签: verilog system-verilog

我假设当在连接的最左侧放置一个未基于的,未经过大小写的文字时,只需用给定的值填充任何缺失的位。我没有在LRM中看到任何明确说明这一点。

logic [63:0] rd_data;
logic [31:0] mem_dout;
logic [15:0] op_data;
....
assign rd_data = {'0, op_data, mem_dout};

显然,以下是非法

编辑:正如@ dave_59指出的那样,这是合法的,只是不直观。

assign rd_data = {op_data, mem_dout, '0};

只是想检查是否有人知道(1)此模拟按预期进行,以及(2)主要综合工具执行正确的操作并将高16位绑定为0.

1 个答案:

答案 0 :(得分:2)

实际上,这两种陈述都是合法的。在自定义的上下文中,'0相当于1'b0。连接的所有操作数都在自定义的上下文中进行评估。两个连接的结果是32 + 16 + 1 = 49位表达式。在赋值给rd_data的上下文中,这些表达式右对齐,然后用15个零填充。

所以你得到了你期望的结果,但出于完全不同的原因。