ROM传输数据,数据帧误码比对,用来检测信道品质

ROM存储标准帧数据,开启使能,按地址输出数据;信道传输之后的数据,通过打拍子,时序对齐之后,对比使能信号开启,两个数据帧对应的word数据进行异或处理,根据相同为0,相异为1,判断异或结果的1的个数,判断误码bit数量。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/10/24 15:52:07
// Design Name: 
// Module Name: error_compare
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module error_compare (
    input wire clk,            // 时钟信号
    input wire rst_n,          // 复位信号,低有效
    input wire ena_rom_2,          // ROM使能控制信号
    input wire ena_2_0,        // 数据帧使能控制信号
    input wire [15:0] rom_word,      // ROM中的标准帧word,16位宽
    input wire [15:0] data_word,     // 需要对比的数据帧word,16位宽
    output reg [31:0] error_bit_count,  // 错误的bit数量
    output reg [15:0] word_count,       // 对比的word数量
    output reg [31:0] total_bit_count,   // 对比的总bit数量
    output reg error_compare_ena,
    output reg error_bit_count_ena
);

// 内部寄存器
reg [15:0] xor_result;        // ROM和data_word的异或结果
reg [3:0] bit_errors;         // 当前word中错误的bit数量

// 初始化和复位逻辑
always @(posedge clk or negedge rst_n) begin
   if (!rst_n) begin
      error_compare_ena<=0;
   end else begin
      error_compare_ena<=ena_2_0;
  end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        error_bit_count <= 32'b0;
        word_count <= 16'b0;
        total_bit_count <= 32'b0;
        xor_result <= 16'b0;
        bit_errors <= 4'b0;
    end
    else if  (error_compare_ena) begin      // 使能信号都为高时,进行word对比       
        xor_result <= rom_word ^ data_word;  // 对比两个word的异或结果
        bit_errors <= xor_result[0] + xor_result[1] + xor_result[2] + xor_result[3] +  // 手动累加异或结果中为1的位数,表示错误的bit数
                      xor_result[4] + xor_result[5] + xor_result[6] + xor_result[7] +
                      xor_result[8] + xor_result[9] + xor_result[10] + xor_result[11] +
                      xor_result[12] + xor_result[13] + xor_result[14] + xor_result[15];  
        error_bit_count <= error_bit_count + bit_errors;// 累加错误的bit数量
        
        
        word_count <= word_count + 1;// 累加word数量
        
        
        total_bit_count <= total_bit_count + 16;// 累加总bit数量(每个word有16位)
    end
end

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值