您现在的位置:首页 >> 通信 >> 内容

m基于FPGA的GFDM调制解调系统verilog实现,包含testbench仿真测试文件

时间:2023/10/8 4:33:50 点击:

  核心提示:00_045m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZZWUkp1u

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

   随着通信技术的不断发展,人们对数据传输速率和频谱效率的要求越来越高。为了满足这些需求,一种名为广义频分复用(GFDM)的新型调制技术应运而生。GFDM具有灵活的子载波间隔和符号时间长度,能够在各种复杂环境中实现高效的数据传输。

   GFDM是一种基于子载波的多载波调制技术,通过对子载波进行调制和解调来实现数据传输。与传统的正交频分复用(OFDM)相比,GFDM具有更灵活的子载波间隔和符号时间长度,可以更好地适应不同的信道环境。

4.部分源码

`timescale 1ns / 1ps

//

// Company: 

// Engineer: 

// 

// Project Name: 

// Target Devices: 

// Tool Versions: 

// Description: 

// 

// Dependencies: 

// 

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

// 

//

module TEST_GFDM;

reg             i_clk;        

reg             i_clk2x;         

reg             i_rst;          

reg             i_fft_start;               

reg             i_fft_end;   

reg             i_fft_en;  

reg signed[15:0]i_I;                 

reg signed[15:0]i_Q;   

 

wire  o_GFDM_start;

wire  o_GFDM_ends ;

wire  o_GFDM_enable;

wire signed[31:0]o_GFDM_I;                 

wire signed[31:0]o_GFDM_Q;

 

 

wire  o_deGFDM_start;

wire  o_deGFDM_ends ;

wire  o_deGFDM_enable;

wire signed[31:0]o_deGFDM_I;                 

wire signed[31:0]o_deGFDM_Q;  

 

GFDM GFDM_u(

                .i_clk         (i_clk),

                .i_clk2x       (i_clk2x),

                .i_rst         (i_rst),

                

                .i_fft_start   (i_fft_start),

                .i_fft_end     (i_fft_end),

                .i_fft_en      (i_fft_en),

                .i_I           (i_I),

                .i_Q           (i_Q),

                

                .o_GFDM_start       (o_GFDM_start),

                .o_GFDM_ends        (o_GFDM_ends),

                .o_GFDM_enable      (o_GFDM_enable),

                .o_GFDM_I           (o_GFDM_I),

                .o_GFDM_Q           (o_GFDM_Q),

                

                .o_deGFDM_start     (o_deGFDM_start),

                .o_deGFDM_ends      (o_deGFDM_ends),

                .o_deGFDM_enable    (o_deGFDM_enable),

                .o_deGFDM_I         (o_deGFDM_I),

                .o_deGFDM_Q         (o_deGFDM_Q)

                );

 

reg [15:0]cnts;

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

     begin

     cnts       <= 16'd0;

         i_I <= -1000;

         i_Q <= 1000;

     end

else begin

          

          if(i_fft_en == 1'b1)

          begin

          cnts       <= cnts+16'd1;

          

              if(cnts>=16'd400 & cnts<=16'd1648)

              begin

                  i_I <= ~i_I;

                  if (cnts[0]==1'b1)

                  i_Q <= ~i_Q;

                  else

                  i_Q <=  i_Q;

              end    

          end

          else begin

          cnts       <= 16'd0;

          i_I <= -1000;

          i_Q <= 1000;

          end

     end

end

reg [19:0]cnts2;

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

     begin

     cnts2        <= 20'd0;

     i_fft_start<=1'b0;

     i_fft_en    <=1'b0;

     i_fft_end  <=1'b0;

     end

else begin

          if(cnts2==20'd30000)

          cnts2  <= 20'd0;

          else

          cnts2  <= cnts2 + 20'd1;

 

          if(cnts2==20'd0)

          begin

             i_fft_start<=1'b1;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

          if(cnts2==20'd1)

          begin

             i_fft_start<=1'b1;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

          if(cnts2==20'd2)

          begin

             i_fft_start<=1'b1;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

          if(cnts2==20'd3)

          begin

             i_fft_start<=1'b1;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

          

          if(cnts2==20'd4)

          begin

             i_fft_start<=1'b0;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

          if(cnts2>=20'd5 & cnts2<=20'd4+2047)

          begin

             i_fft_start<=1'b0;

             i_fft_en    <=1'b1;

             i_fft_end  <=1'b0;

          end

          

          if(cnts2==20'd4+2048)

          begin

             i_fft_start<=1'b0;

             i_fft_en    <=1'b1;

             i_fft_end  <=1'b1;

          end

          

          if(cnts2>20'd4+2048)

          begin

             i_fft_start<=1'b0;

             i_fft_en    <=1'b0;

             i_fft_end  <=1'b0;

          end

     

     

     

     end

end

initial

begin

    i_clk2x= 1'b1;

    i_clk = 1'b1;

    i_rst = 1'b1;

    #1000

    i_rst = 1'b0;

end

always #10 i_clk=~i_clk;

always #5 i_clk2x=~i_clk2x;

endmodule

00_045m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168