comebo 2024-04-23 15:43 采纳率: 0%
浏览 5

状态机中求最大值,一瞬间求出

img

有人遇到过这种问题吗?我最大值的索引,然后在状态机的一个状态里面这么写,结果计数正常,但是一下子就求出最大值,导致我索引不对。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-23 15:43
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的代码片段,看起来您正在尝试在一个状态机中找到一个信号(例如 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 可用于指示是否找到了一个新的最大值。

    这个修正应该能确保您得到正确的最大值及其对应的索引。如果您有其他需求或问题,随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月23日

悬赏问题

  • ¥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项目错误