You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog拼接提取乘法低半段时出现语法错误求助

问题排查与修正

你的语法错误出在{InDest*InSrc}[15:0]这一行,原因是:

  • SystemVerilog中,拼接操作符{}用于将多个信号/常量拼接为一个宽位信号(比如{sig_a, sig_b}),单独一个表达式不需要用大括号包裹
  • 语法上不允许在拼接操作符{}后直接跟位选择索引[15:0],这违反了Verilog/SystemVerilog的语法规则

两个16位有符号数相乘的结果是32位有符号数,直接对乘法结果做位选择即可提取低16位,以下是两种修正方案:

方案一:直接位选(简洁写法)

module ALU
(
  input  signed [15:0] InSrc,
  input  signed [15:0] InDest,
  output logic signed [15:0] OutDest
);

  always_comb
  begin
    OutDest = (InDest * InSrc)[15:0];
  end

endmodule

方案二:使用临时变量(可读性更强,便于调试)

module ALU
(
  input  signed [15:0] InSrc,
  input  signed [15:0] InDest,
  output logic signed [15:0] OutDest
);

  always_comb
  begin
    logic signed [31:0] mult_result; // 声明32位临时变量存储完整乘法结果
    mult_result = InDest * InSrc;
    OutDest = mult_result[15:0];     // 提取低16位
  end

endmodule

内容的提问来源于stack exchange,提问作者jm300

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:15:34