有人遇到过这种问题吗?我最大值的索引,然后在状态机的一个状态里面这么写,结果计数正常,但是一下子就求出最大值,导致我索引不对。
4条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
根据您提供的代码片段,看起来您正在尝试在一个状态机中找到一个信号(例如
amp_ram_1_output
)的最大值,并且同时记录最大值对应的索引(通过mapian_1_cnt
计数)。然而,您提到在某个状态下,最大值似乎在一瞬间就被确定了,导致索引不正确。这可能是由于您的条件语句结构问题,导致每次循环都会更新最大值。为了解决这个问题,我们需要确保最大值只在当前读取的值大于当前最大值时才被更新。同时,为了正确跟踪最大值出现的次数,我们需要在最大值更新时保持
mapian_1_cnt
的值不变,否则它会在每个时钟周期递增。以下是修改后的代码,以解决上述问题:
process(clk) begin if rising_edge(clk) then if (mapian_1_max < amp_ram_1_output) then -- 当前值大于最大值时更新最大值和计数器 mapian_1_max <= amp_ram_1_output; mapian_1_cnt <= mapian_1_cnt_temp; -- 保留旧的计数值 mapian_1_cnt_temp <= mapian_1_cnt + 1'b1; -- 更新临时计数器 max_1_flag <= 1; else -- 当前值不大于最大值时,仅增加计数器 mapian_1_cnt <= mapian_1_cnt + 1'b1; max_1_flag <= 0; end if; end if; end process;
在这个版本中,我们使用了一个额外的变量
mapian_1_cnt_temp
来保存最大值出现时的计数值。当新的最大值出现时,我们会将mapian_1_cnt
设置回mapian_1_cnt_temp
的值,这样可以保证计数器在最大值出现后不会立即递增。同时,max_1_flag
可用于指示是否找到了一个新的最大值。这个修正应该能确保您得到正确的最大值及其对应的索引。如果您有其他需求或问题,随时告诉我。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
- ¥100 解决数据不连续出现问题
- ¥15 clousx6整点报时指令怎么写
- ¥30 远程帮我安装软件及库文件
- ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
- ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
- ¥15 Arduino的wifi连接,如何关闭低功耗模式?
- ¥15 Android studio 无法定位adb是什么问题?
- ¥15 C#连接不上服务器,
- ¥15 angular项目错误