当前位置: 首页 > article >正文

fpga系列 HDL:tips 状态机状态转换时BitOut会存在未知状态的输出的解决

错误描述

在这里插入图片描述

  • 状态转换时BitOut会存在未知状态的输出(一个时钟周期长度):
reg     [5:0]   data_sync  = 6'b111111; 

always @ (posedge clk) begin  
    case (state_reg)    
    0:begin  
            if(Bit_in_EN_r1==1)begin
                  if($unsigned(bit_cnt) ==6) begin
                        state_reg<=1;
                  end

                  BitOut <= data_sync[bit_cnt];
                  bit_cnt = bit_cnt + 1; // 索引增加
            end
    end
    1:begin
            BitOut <= 0;
            bit_cnt = bit_cnt + 1;

            if(bit_cnt==33) begin 
            bit_cnt = 0;
            state_reg<=0;// 发送完成
            end
    end
	 
   endcase 
end

解决方案

在这里插入图片描述

  • 需要注意状态转移判断的时机
reg     [5:0]   data_sync  = 6'b111111; 

always @ (posedge clk) begin  
    case (state_reg)    
    0:begin  
            if(Bit_in_EN_r1==1)begin
                  BitOut <= data_sync[bit_cnt];
                  bit_cnt = bit_cnt + 1; // 索引增加

                  if($unsigned(bit_cnt) ==6) begin
                        state_reg<=1;
                  end
            end
    end
    1:begin
            BitOut <= 0;
            bit_cnt = bit_cnt + 1;

            if(bit_cnt==33) begin 
            bit_cnt = 0;
            state_reg<=0;// 发送完成
            end
    end
	 
   endcase 
end

在这里插入图片描述


http://www.kler.cn/a/595744.html

相关文章:

  • JAVA泛型擦除原理
  • Three.js中的加载器与资源管理:构建丰富3D场景的关键
  • 清晰易懂的Maven安装教程(含自定义依赖包位置)
  • 星越L_陡坡缓降使用讲解
  • 卷积神经网络梯度消失与梯度爆炸的通俗解释
  • 亚信科技:寒风中,用AI驱动增长
  • WEB API 设计规范
  • 基于 kubekey -实现懒人一键部署K8S集群
  • 脚本语言 Lua
  • 企业级AI架构探索:业务驱动,场景优先
  • 【技术】Electron 移动端支持现状与进展洞察
  • Milvus 向量数据库使用示例
  • 【搜索页】- 功能流程
  • 模型整合-cherry studio+mysql_mcp_server服务配置
  • FreeRTOS移植并实现一个多任务程序
  • 如何借助es的snapshot跨集群迁移部分索引
  • git原理与常用命令及其使用
  • electron框架(4.0)electron-builde和electron Forge的打包方式
  • 鸿蒙开发工程师简历项目撰写全攻略
  • 开源模型应用落地-LangGraph101-多智能体协同实践(六)