我很难理解 Verilog 中的以下语法:
input [15:0] a; // 16-bit input
output [31:0] result; // 32-bit output
assign result = {{16{a[15]}}, {a[15:0]}};
我知道assign
语句将连接一些东西到result
使用电线和组合逻辑的总线,但是花括号和16{a[15]}
?
大括号表示串联,从左侧的最高有效位 (MSB) 到右侧的最低有效位 (LSB)。您正在创建一个 32 位总线(结果),其 16 个最高有效位由 a 总线的第 15 位(MSB)的 16 个副本组成,其 16 个最低有效位仅由 a 总线组成(这种特殊结构已知作为符号扩展 http://en.wikipedia.org/wiki/Sign_extension,这是需要的,例如将负数右移二进制补码 http://en.wikipedia.org/wiki/Two%27s_complement形式并保持其负数而不是在 MSBit 中引入零)。
就其价值而言,周围嵌套的大括号a[15:0]
都是多余的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)