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

微信公众号获取更多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)begin
	if(!rst_n)
		mcu_dout_train_rdy <= 1'b0;
	else if(~phy_rst_n)
		mcu_dout_train_rdy <= 1'b0;
	else
		mcu_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 ) begin
        if(!rst_n) begin
            shift_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; 
        end
        else if( scram_en) begin
			if(~scram_din_sig_flag)begin
				scram_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])}; 
			end
			else begin
				scram_dout <= scram_din;
				scram_dout_vld  <= 1;
			end
			scram_dout_sig_flag <= scram_din_sig_flag;
			scram_dout_rate_con <= scram_din_rate_con;
        end
        else if(scram_dout_vld & scram_din_rdy)begin //下游接受完毕,没有新数据进来,vld拉低 
            scram_dout_vld  <= 0; 
        end
    end

bug4

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

always@(posedge clk or negedge rst_n ) begin
   if(!rst_n) begin 
       map_dout_Re  <= 0;
       map_dout_Im  <= 0;
       map_dout_Index <= 6'b111_111;  
   end
   else 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    //Bpsk
               case(map_din_r[0])
                   1'b0: map_dout_Re <= 8'b1100_0000; // -1
                   1'b1: map_dout_Re <= 8'b0100_0000; //1
               default:map_dout_Re <= 0;
               endcase
               map_dout_Im <= 8'b00000000;
               map_dout_Index <= map_dout_Index + 1;
           end
           2'b01: begin        //Qpsk
               case(map_din_r[0])
                   1'b0: map_dout_Re <= 8'b1101_0011;  //-1 * 1/√2
                   1'b1: map_dout_Re <= 8'b0010_1101;  //1 * 1/√2    
               default:map_dout_Re <= 0;
               endcase
               case(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;
               endcase
               map_dout_Index <= map_dout_Index + 1;
           end
           2'b10: begin       //16-qam
               case(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;
               endcase
               case(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;
               endcase
               map_dout_Index <= map_dout_Index + 1;
           end
           2'b11: begin    //64-qam
               case(map_din_r[2:0])
                   3'b000: map_dout_Re <= 8'b1011_1011; //-7 * 1/√42
                   3'b001: map_dout_Re <= 8'b1100_1111; //-5*1/√42
                   3'b011: map_dout_Re <= 8'b1110_0011; //-3*1/√42
                   3'b010: map_dout_Re <= 8'b1111_0111; //-1*1/√42
                   3'b110: map_dout_Re <= 8'b0100_0101; //7*1/√42
                   3'b111: map_dout_Re <= 8'b0011_0001;//5*1/√42
                   3'b101: map_dout_Re <= 8'b0001_1101;//3*1/√42
                   3'b100: map_dout_Re <= 8'b0000_1001;//1*1/√42
               default:map_dout_Re <= 0;
               endcase
               case(map_din_r[5:3])
                   3'b000: map_dout_Im <= 8'b1011_1011; //-7 * 1/√42
                   3'b001: map_dout_Im <= 8'b1100_1111; //-5*1/√42
                   3'b011: map_dout_Im <= 8'b1110_0011; //-3*1/√42
                   3'b010: map_dout_Im <= 8'b1111_0111; //-1*1/√42
                   3'b110: map_dout_Im <= 8'b0100_0101; //7*1/√42
                   3'b111: map_dout_Im <= 8'b0011_0001;//5*1/√42
                   3'b101: map_dout_Im <= 8'b0001_1101;//3*1/√42
                   3'b100: map_dout_Im <= 8'b0000_1001;//1*1/√42
               default: map_dout_Im <= 0;
               endcase
               map_dout_Index <= map_dout_Index + 1;
           end
           default:;
       endcase
   end
end	

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值