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

VHDL中4位与3位无符号数相加异常及后续问题咨询

VHDL ALU加法输出'X'问题原因解析

核心本质:进程敏感列表的触发逻辑

VHDL进程仅会在敏感列表中列出的信号发生跳变时才会启动执行,重新计算内部逻辑并更新输出信号。你的问题完全是由于敏感列表未覆盖所有输入变化导致的。


情况1:c赋值在进程内时的问题

  • 最初敏感列表未包含c,而c是进程内由b生成的位宽调整信号(拼接/resize)。当b变化时,进程不会被触发(因为b不在敏感列表),c的更新无法传递到加法逻辑,导致输出始终为X。
  • 把c加入敏感列表后,b变化会先更新c,c的跳变再触发进程执行,加法逻辑能获取到最新的c值,输出恢复正常。

情况2:c赋值移到进程外时的问题

  • 进程外的c <= resize(b, a'length)属于并发赋值,c会随b实时更新,但此时你把敏感列表改成仅保留ch:
    • 只有当操作选择信号ch变化时,进程才会执行;如果b变化但ch保持不变,进程不会重新运行,加法逻辑仍然使用之前的旧值(甚至是初始的未知态X),所以输出还是X。
  • 正确的敏感列表应该包含所有参与进程内运算的输入信号:a、b(或c)、ch,确保任何一个输入变化都能触发进程重新计算输出。

关于位宽调整的补充

你用的('0' & b)拼接或resize(b, a'length)都是无符号数扩位的正确方式(补0符合无符号数的数值含义),本身没有问题,输出X的根源不在位宽调整逻辑,而在进程的触发条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:17