首页 > 其他分享 >FPGA数字信号处理—1S上报一次解析数据

FPGA数字信号处理—1S上报一次解析数据

时间:2024-11-01 20:45:11浏览次数:6  
标签:count 输出 1S FPGA 信号处理 error input bit parameter

数字信号结果处理完毕之后,需要定时上报,利用计数器完成定时上报;

module Error_bit_report (
    input  wire        clk,               // 时钟信号
    input  wire        rst_n,             // 复位信号,低有效
    input  wire        error_compare_ena, // 误码比较使能信号
    input  wire [31:0] error_bit_count,   // 错误的bit数量
    input  wire [31:0] total_bit_count,   // 总的bit数量
    output reg  [15:0] data_out,          // 输出16位数据
    output reg         data_out_valid     // 数据有效信号
);
reg error_compare_ena_0;
reg error_compare_ena_1;
reg error_compare_ena_2;//1s 计数器使能开启
// 定义状态,使用parameter定义并用格雷码编码
parameter S0 = 4'b0000;  // 空闲状态
parameter S1 = 4'b0001;  // 输出5555
parameter S2 = 4'b0011;  // 输出5555
parameter S3 = 4'b0010;  // 输出5500
parameter S4 = 4'b0110;  // 输出AA78
parameter S5 = 4'b0111;  // 输出error_bit_count高16位
parameter S6 = 4'b0101;  // 输出error_bit_count低16位
parameter S7 = 4'b0100;  // 输出total_bit_count高16位
parameter S8 = 4'b1000;  // 输出total_bit_count低16位
//parameter S9 = 3'b011;  // 等待状态1s

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        error_compare_ena_0 <= 0;  // 复位时进入空闲状态
        error_compare_ena_1 <= 0;
        error_compare_ena_2 <= 0;
    end else begin
        error_compare_ena_0 <= error_compare_ena;  // 更新状态
        error_compare_ena_1 <= error_compare_ena_0;
        error_compare_ena_2 <= error_compare_ena_1;
     
   end     
end


// 状态寄存器
reg [2:0] current_state, next_state;

// 计数器,用于1秒延时控制
reg [31:0] delay_counter;
wire delay_done = (delay_counter == 32'd100_000_000); // 假设时钟频率为100MHz,1秒需要1亿个时钟周期

// 状态转移逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        current_state <= S0;  // 复位时进入空闲状态
    end else begin
        current_state <= next_state;  // 更新状态
    end
end

// 状态选择逻辑
always @(*) begin
    case (current_state)
        S0: if (error_compare_ena_1) next_state = S1; else next_state = S0;
        S1: next_state = S2;
        S2: next_state = S3;
        S3: next_state = S4;
        S4: next_state = S5;
        S5: next_state = S6;
        S6: next_state = S7;
        S7: next_state = S8;
        S8: next_state = S1;  // 等待1秒
//        S9: if (delay_done) next_state = S0; else next_state = S9;  // 如果1秒计时结束,则重新开始
        default: next_state = S0;
    endcase
end
//1秒计数器逻辑
//输出使能开启之后,计数的前七个数data_out_valid,之后的data_out_valid为0

always @(posedge clk or negedge rst_n) begin
  if(!rst_n) begin
    data_out_valid<= 1'b0;
  end else if (error_compare_ena_2&&delay_counter<8) begin
    data_out_valid<=1;  
  end else
    data_out_valid <= 0;  // 每个时钟周期递增计数器
end

// 1秒计数器逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        delay_counter <= 32'b0;
    end else if (error_compare_ena_2) begin
        if (delay_done)
            delay_counter <= 32'b0;  // 计时结束,计数器清零
        else
            delay_counter <= delay_counter + 1;  // 每个时钟周期递增计数器
    end
end

// 数据输出逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        data_out <= 16'b0;

    end else begin
        case (current_state)
            S0: begin
                data_out <= 16'b0;

            end
            S1: begin
                data_out <= 16'h5555;  // 输出第一个16位word

            end
            S2: begin
                data_out <= 16'h5555;  // 输出第二个16位word

            end
            S3: begin
                data_out <= 16'h5500;  // 输出第三个16位word

            end
            S4: begin
                data_out <= 16'hAA78;  // 输出第四个16位word

            end
            S5: begin
                data_out <= error_bit_count[31:16];  // 输出error_bit_count高16位
                
            end
            S6: begin
                data_out <= error_bit_count[15:0];  // 输出error_bit_count低16位
                
            end
            S7: begin
                data_out <= total_bit_count[31:16];  // 输出total_bit_count高16位
               
            end
            S8: begin
                data_out <= total_bit_count[15:0];  // 输出total_bit_count低16位
                
//            end
//            S9: begin
//                data_out <= 16'b0;  // 空闲状态下输出0
//                data_out_valid <= 1'b0;  // 数据有效信号变为0,等待1秒后重新开始
            end
            default: begin
                data_out <= 16'b0;
                data_out_valid <= 1'b0;
            end
        endcase
    end
end

endmodule

标签:count,输出,1S,FPGA,信号处理,error,input,bit,parameter
From: https://blog.csdn.net/sunsheets/article/details/143349463

相关文章

  • Springboot计算机毕业设计高速公路联网收费系统13z1s
    Springboot计算机毕业设计高速公路联网收费系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,业务员,收费路段,收费类型,缴费信息开题报告内容一、项目背景随着高速公路网络的不断扩展和交......
  • 现场可编程逻辑门阵列(FPGA)可应用的领域有哪些
    现场可编程逻辑门阵列(FPGA)是一种能够根据需求现场编程的集成电路,能提供灵活的硬件解决方案。FPGA可应用的领域有信号处理、通信系统、工业自动化、医疗设备、军事与航空、金融计算、图像处理和视频分析等。其中,在信号处理方面,FPGA可以执行复杂的并行计算,用于滤波和数据分析。以下......
  • 2024年信号处理与神经网络应用国际学术会议(SPNNA 2024) 2024 International Conferenc
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍2024年信号处理与神经网络应用国际学术会议(SPNNA2024)将于2024年12月13日......
  • FPGA图像处理仿真:生成数据源的方法
    免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。读者在使用本文信息时,应自行验......
  • FPGA实例——点亮led
    前言:Helloworld!这句代码大家都很熟悉吧,作为学习C语言的开始,逐渐的进入代码的世界。那么对于硬件来说,点灯也就是梦的开始,无论是单片机还是FPGA等等。有句话说得好,当你学会点灯的时候那么你就已经开始入门了哈哈哈。当然,硬件的话不比得软件,想要真正的入门还得通过不断地学习......
  • FPGA秋招必看基础 | 什么是FPGA?
    关注......
  • 第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024) 2024 6th International
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍第六届智能控制、测量与信号处理国际学术会议(ICMSP2024)由西安石油大学、中海油田......
  • 针对灵活性进行优化的FPGA ,推出AGFC023R25A1I1V AGFC023R24C3E3V AGFC023R24C3E4X AGF
    产品简介Agilex™7F-系列设备是基于英特尔10纳米SuperFin制程技术构建的常规用途FPGA。它们是许多市场中的一系列应用的理想选择,其特性包括高达58Gbps的收发器速率、支持多种精度的定点和浮点运算的高级数字信号处理(DSP)模块,以及高性能加密块。优势•第二代英特尔......
  • FPGA小白初学第四天
    FSM状态机的定义:状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(FiniteStateMachine)状态机四要素:现态:当前状态次态:即将到来的下一个状态条件:激励条件,满足条件状......
  • FPGA、VHDL 基于RISC-V格式的16位位缩模型机设计
    项目地址:FPGA、VHDL基于RISC-V格式的16位位缩模型机设计设计目的实现基于RISC-V格式的16位MCU设计,参考RISC-V的基本格式,进行位数缩减。实现RISC-V中寄存器加法add,立即数加法addi,半字加载lh,半字存储sh,不等条件跳转bne,相等条件跳转beq,无条件跳转链接jal。实现立即寻址、寄存......