VHDL实现Viterbi解码器:输出解码比特功能异常求助
Viterbi解码器VHDL实现问题:解码比特输出异常,temp_dec未正确更新
问题背景
我用VHDL实现Viterbi解码器时,所有路径度量数组均能正常填充,但最终输出解码比特的逻辑完全失效。为了调试,将原本设计为变量的temp_dec和smallest_metric改为信号,结果发现temp_dec始终无法按预期更新为smallest_metric转换后的std_logic_vector值。
关键观测现象
- 路径度量数组填充正常,说明分支度量计算、累加-比较-选择(ACS)模块逻辑无问题
smallest_metric信号能正确捕获当前状态的最小路径度量值,但类型转换后赋值给temp_dec无任何变化- 将变量改为信号后,时序行为改变,但核心的赋值失效问题未解决
完整实现代码
-- 此处粘贴你的完整VHDL实现代码
仿真截图说明
截图中可见:smallest_metric已正确更新为目标数值,但temp_dec始终保持初始值或固定值,未同步完成类型转换与赋值。
排查建议
- 类型转换校验:确认
smallest_metric(如integer类型)转std_logic_vector时使用了正确的转换函数(例:to_stdlogicvector需匹配位宽,或自定义转换逻辑),避免位宽不匹配导致赋值被忽略 - 变量/信号选型回归:VHDL中变量为立即更新,信号为延迟更新。建议先将
temp_dec和smallest_metric改回变量,在进程内部完成赋值与计算,再排查逻辑问题——改为信号可能引入不必要的时序冲突 - 驱动源检查:确认
temp_dec仅由当前进程驱动,无其他并发语句或进程对其赋值,多驱动源会导致信号值不确定(高阻或冲突) - 最小度量选择逻辑验证:检查
smallest_metric的比较逻辑,确认所有状态的路径度量都被纳入比较,无漏判或比较符号错误(如将<写为>) - 解码回溯触发逻辑检查:若
temp_dec用于回溯过程,确认回溯的启动时钟沿、状态转移条件是否正确,是否在错误的时序点触发赋值
内容的提问来源于stack exchange,提问作者KD13D
相关产品推荐
相关产品推荐

