使用连接符号扩展名

sep*_*eee 0 signed verilog concatenation sign-extension

我需要将符号扩展从4位数转换为32位数.所以我尝试重复MSB 28时间看起来像这样:

assign x={28'b{a[3]},a[3:0]};
Run Code Online (Sandbox Code Playgroud)

但错误是:

"{"附近的语法错误

x定义为:wire [31:0] x ; a定义为:input [3:0]a;

这是在错误的实现中连接,还是这个特定错误的原因是什么?

too*_*lic 6

你需要摆脱'b并添加另一对{}:

assign x = { {28{a[3]}}, a};
Run Code Online (Sandbox Code Playgroud)

请参阅IEEE Std 1800-2012,第11.4.12.1节"复制运算符".