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

ModelSim编译Verilog奇偶校验模块报错:assign处语法错误

解决ModelSim编译Verilog奇偶校验模块的语法错误
  • 错误原因拆解:你代码里的endfunction : assign o_parity_out这行完全踩了语法坑!endfunction后面如果加标签,只能是和function同名的标识符,不能直接把assign语句塞这儿。assign是属于module层级的赋值逻辑,必须放在function定义的外部。

  • 修正后的完整代码:

`define WIDTH 8
module Parityfunc(
    input [`WIDTH-1:0] i_data,
    output o_parity_out,
    input parity_type
);

function parity (input [`WIDTH-1:0] data, input parity_type);
begin
    if (parity_type) // 偶校验
        parity = ^data;  // 划重点:function内部要用阻塞赋值=,非阻塞<=是给时序逻辑always块用的
    else // 奇校验,这里不用多此一举判断!parity_type,else就足够覆盖
        parity = ~(^data);
end
endfunction

// 把assign语句移到function定义结束后,放在module层级下才合规
assign o_parity_out = parity(i_data, parity_type);

endmodule // Parityfunc
  • 额外优化提示:
    • 原代码里的else if (!parity_type)可以直接简化成else,逻辑完全等价,还能让代码更清爽。
    • 记住function内部给返回值赋值必须用阻塞赋值,用非阻塞赋值不仅没必要,还可能引发奇怪的编译或仿真问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:50:05