我假设当在连接的最左侧放置一个未基于的,未经过大小写的文字时,只需用给定的值填充任何缺失的位。我没有在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.
答案 0 :(得分:2)
实际上,这两种陈述都是合法的。在自定义的上下文中,'0
相当于1'b0
。连接的所有操作数都在自定义的上下文中进行评估。两个连接的结果是32 + 16 + 1 = 49位表达式。在赋值给rd_data的上下文中,这些表达式右对齐,然后用15个零填充。
所以你得到了你期望的结果,但出于完全不同的原因。