欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > OFDM 802.11a的FPGA实现:发射部分,bug更正,以及更新说明。

OFDM 802.11a的FPGA实现:发射部分,bug更正,以及更新说明。

2025/5/11 0:31:55 来源:https://blog.csdn.net/xxqlover/article/details/140008539  浏览:    关键词:OFDM 802.11a的FPGA实现:发射部分,bug更正,以及更新说明。

目录

  • bug1
  • bug2
  • bug3
  • bug4

微信公众号获取更多FPGA相关源码:
在这里插入图片描述
OFDM 802.11a的FPGA实现:发射部分完整工程

经过各位朋友的提醒,这部分内容有些许bug,目前已经更正,后续还会持续更新。获取更新内容,可以进上述链接,进文末的链接二进行下载,或者根据文末的指引,在后台回复,也可获取最新工程的下载链接。

感谢各位朋友的支持,以及给我提出项目中的错误。对于项目中出现了错误,我深表歉意,下面我将逐一说明并更正目前发现的一些错误。

bug1

IFFT后进行加窗处理时,逻辑和计算方式有误,文件路径为:OFDM_802.11a_my\TX\src\IFFT\ifft.v,现将那部分代码更正如下:

//下一个符号第一个数据(CP的第一个样值)将和OFDM符号64个样值中的第一个数据相加且右移1位后再行输出。
assign	ifft_dout = ifft_dout_Index == 'd48 & ifft_dout_vld_edge_pluse ? {$signed(first_iff_dout[15:8]) + $signed(m_axis_data_tdata[23:16])>>>1,$signed(first_iff_dout[7:0]) + $signed(m_axis_data_tdata[7:0])>>>1} : {m_axis_data_tdata[23:16],m_axis_data_tdata[7:0]};
//----------------------------------------------------------------------------------//

bug2

路径为OFDM_802.11a_my\TX\src\MCU\tx_mcu.v的代码文件中,有如下一段代码,没有使用到,编译时会报错。这里是在调试时加入的,但是后期上传时未删除,这部分注释掉即可。并且路径为OFDM_802.11a_my\TX\testbench\test_tb.v的仿真测试文件中关于mcu_dout_train_rdy的端口也应删去或者注释掉。

//控制训练序列输出
always@(posedge clk or negedge rst_n)beginif(!rst_n)mcu_dout_train_rdy <= 1'b0;else if(~phy_rst_n)mcu_dout_train_rdy <= 1'b0;elsemcu_dout_train_rdy <= 1'b1;
end

bug3

扰码模块,路径为OFDM_802.11a_my\TX\src\Data_Modem\scramler.v的文件,对于shift_reg信号在复位时,应该改赋值为7’b1011101,而不是0,不然在使用路径为OFDM_802.11a_my\TX\testbench\test_tb.v的仿真测试文件进行测试时会导致结果不正确,修改后如下:

always@(posedge clk or negedge rst_n ) beginif(!rst_n) beginshift_reg <= 7'b1011101;scram_dout <= 0;scram_dout_vld  <= 0; scram_dout_sig_flag <= 0;scram_dout_rate_con <= 4'b1011;end else if( scram_load ) begin shift_reg <= scram_seed; scram_dout_vld <= 0; endelse if( scram_en) beginif(~scram_din_sig_flag)beginscram_dout <= shift_reg[6] + shift_reg[3] + scram_din; //s(x) = x^7 + x^4 + 1 scram_dout_vld  <= 1; shift_reg <= {shift_reg[5:0],(shift_reg[6]+shift_reg[3])}; endelse beginscram_dout <= scram_din;scram_dout_vld  <= 1;endscram_dout_sig_flag <= scram_din_sig_flag;scram_dout_rate_con <= scram_din_rate_con;endelse if(scram_dout_vld & scram_din_rdy)begin //下游接受完毕,没有新数据进来,vld拉低 scram_dout_vld  <= 0; endend

bug4

路径为OFDM_802.11a_my\TX\src\Data_Modem\maping.v的文件中,下图所示代码逻辑错误,会导致后期综合出现问题,但是仿真没问题,当时没注意这部分代码这样描述是不可综合的。
image
需要将其修改如下:

always@(posedge clk or negedge rst_n ) beginif(!rst_n) begin map_dout_Re  <= 0;map_dout_Im  <= 0;map_dout_Index <= 6'b111_111;  endelse if(map_dout_Index == 6'd47)map_dout_Index <= 6'b111_111;else if( full & ~rd_en) begin case(map_din_Map_Type) 2'b00: begin    //Bpskcase(map_din_r[0])1'b0: map_dout_Re <= 8'b1100_0000; // -11'b1: map_dout_Re <= 8'b0100_0000; //1default:map_dout_Re <= 0;endcasemap_dout_Im <= 8'b00000000;map_dout_Index <= map_dout_Index + 1;end2'b01: begin        //Qpskcase(map_din_r[0])1'b0: map_dout_Re <= 8'b1101_0011;  //-1 * 1/√21'b1: map_dout_Re <= 8'b0010_1101;  //1 * 1/√2    default:map_dout_Re <= 0;endcasecase(map_din_r[1])1'b0: map_dout_Im <= 8'b1101_0011;1'b1: map_dout_Im <= 8'b0010_1101; default: map_dout_Im <= 0;endcasemap_dout_Index <= map_dout_Index + 1;end2'b10: begin       //16-qamcase(map_din_r[1:0])2'b00: map_dout_Re <= 8'b1100_0011; //-3 * 1/√10      2'b10: map_dout_Re <= 8'b1110_1100;//-1* 1/√10  2'b11: map_dout_Re <= 8'b0001_0100;//1* 1/√10  2'b01: map_dout_Re <= 8'b0011_1101;//3* 1/√10  default:map_dout_Re <= 0;endcasecase(map_din_r[3:2])2'b00: map_dout_Im <= 8'b1100_0011;2'b10: map_dout_Im <= 8'b1110_1100;2'b11: map_dout_Im <= 8'b0001_0100;2'b01: map_dout_Im <= 8'b0011_1101;default: map_dout_Im <= 0;endcasemap_dout_Index <= map_dout_Index + 1;end2'b11: begin    //64-qamcase(map_din_r[2:0])3'b000: map_dout_Re <= 8'b1011_1011; //-7 * 1/√423'b001: map_dout_Re <= 8'b1100_1111; //-5*1/√423'b011: map_dout_Re <= 8'b1110_0011; //-3*1/√423'b010: map_dout_Re <= 8'b1111_0111; //-1*1/√423'b110: map_dout_Re <= 8'b0100_0101; //7*1/√423'b111: map_dout_Re <= 8'b0011_0001;//5*1/√423'b101: map_dout_Re <= 8'b0001_1101;//3*1/√423'b100: map_dout_Re <= 8'b0000_1001;//1*1/√42default:map_dout_Re <= 0;endcasecase(map_din_r[5:3])3'b000: map_dout_Im <= 8'b1011_1011; //-7 * 1/√423'b001: map_dout_Im <= 8'b1100_1111; //-5*1/√423'b011: map_dout_Im <= 8'b1110_0011; //-3*1/√423'b010: map_dout_Im <= 8'b1111_0111; //-1*1/√423'b110: map_dout_Im <= 8'b0100_0101; //7*1/√423'b111: map_dout_Im <= 8'b0011_0001;//5*1/√423'b101: map_dout_Im <= 8'b0001_1101;//3*1/√423'b100: map_dout_Im <= 8'b0000_1001;//1*1/√42default: map_dout_Im <= 0;endcasemap_dout_Index <= map_dout_Index + 1;enddefault:;endcaseend
end	

再次感谢各位的支持,有这么多错误,真的深表歉意!!!

获取更新内容,可以进上述链接,进文末的链接二进行下载,或者根据文末的指引,在后台回复,也可获取最新工程的下载链接。OFDM 802.11a的FPGA实现:发射部分完整工程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词