【硬件测试】基于FPGA的QPSK软解调+卷积编码Viterbi译码系统开发,包含帧同步,信道,误码统计,可设置SNR

1.引言

基于FPGA的QPSK软解调+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR。系统包括QPSK调制模块,QPSK软解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,帧同步模块,数据源模块等。

2.算法仿真效果

1

2

3

3.算法涉及理论知识概要

整体系统结构如下所示:

4

数据源模块 → 217卷积编码模块 → QPSK调制模块 → AWGN信道模块 →

QPSK软解调模块 → 帧同步模块 → 维特比译码模块 → 误码统计模块

4.Verilog程序接口

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/11/04 19:54:30
// Design Name: 
// Module Name: tops_hdw
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
 
 
module tops_hdw(
 
input i_clk,
input i_rst,
output reg [3:0] led
);
    
 
 
 
wire signed[1:0]o_en;
wire            o_msg;
wire dat_clk;
wire dat_2clk;
signaler signaler_u(
.i_clk (i_clk),
.i_rst (~i_rst),
.o_en(o_en),
.o_bits(o_msg),
.dat_clk(dat_clk),
.dat_2clk(dat_2clk)
);
 
 
 
//设置SNR
wire signed[7:0]o_SNR;
vio_0 your_instance_name (
  .clk(i_clk),                // input wire clk
  .probe_out0(o_SNR)  // output wire [7 : 0] probe_out0
);
 
wire [1:0]o_enc;
wire signed[15:0]o_Ifir;
wire signed[15:0]o_Qfir;
wire signed[15:0]o_Nmod_T;
 
wire  signed[31:0]o_rmodc; 
wire  signed[31:0]o_rmods;
wire signed[31:0]o_rIfir;
wire signed[31:0]o_rQfir;
 
 
wire [1:0]o_Ibits_data;
wire [1:0]o_Ibits_head;
wire [7:0]o_Ipeak;
wire  o_Ien_data;
wire  o_Ien_pn;
 
wire [1:0]o_Qbits_data;
wire [1:0]o_Qbits_head;
wire [7:0]o_Qpeak;
wire  o_Qen_data;
wire  o_Qen_pn;
 
 
wire signed[31:0]o_error_num;
wire signed[31:0]o_total_num;
wire o_dec_enable;
wire o_dec;
 
QPSK_tops uut(
.i_clk(i_clk),
.i_clkdx(dat_clk),
.i_clkd2x(dat_2clk),
.i_rst     (~i_rst),
.i_en      (o_en),
.i_bits    (o_msg),
.i_SNR     (o_SNR),
.o_enc     (o_enc),
.o_Ifir    (o_Ifir),
.o_Qfir    (o_Qfir),
.o_Nmod_T  (o_Nmod_T),
 
.o_rmodc(o_rmodc),
.o_rmods(o_rmods),
.o_rIfir(o_rIfir),
.o_rQfir(o_rQfir),
 
.o_Ibits_data     (o_Ibits_data),
.o_Ibits_head     (o_Ibits_head),
.o_Ipeak          (o_Ipeak),
.o_Ien_data       (o_Ien_data),
.o_Ien_pn         (o_Ien_pn),
.o_Iframe_start   (),
.o_Qbits_data     (o_Qbits_data),
.o_Qbits_head     (o_Qbits_head),
.o_Qpeak          (o_Qpeak),
.o_Qen_data       (o_Qen_data),
.o_Qen_pn         (o_Qen_pn),
.o_Qframe_start   (),
.o_dec_enable     (o_dec_enable),
.o_dec            (o_dec),
.o_error_num      (o_error_num),
.o_total_num      (o_total_num)
);
 
 
 
 
 
//ila篇内测试分析模块
ila_0 ila_u (
    .clk(i_clk), // input wire clk
    .probe0({ 
            o_msg,o_SNR,o_enc,o_Nmod_T[15:4],//24
            o_rIfir[15:4],o_rQfir[15:4],//24
            o_Ibits_data,o_Ibits_head,o_Ipeak,o_Ien_data,o_Ien_pn,//14
            o_dec_enable,o_dec,//2
            o_error_num[19:0],o_total_num[23:0]//44
 
             })
    );     
 
 
 
endmodule

 

posted @ 2025-12-19 16:46  我爱C编程  阅读(0)  评论(0)    收藏  举报