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

news2024/11/16 13:35:59

目录

  • 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)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实现:发射部分完整工程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BurpSuite2024.5.3专业版,仅支持Java21以上

01更新介绍 此版本引入了对 WebSocket 的 Burp Scanner 支持、对录制的登录编辑器的改进、WebSocket 匹配和替换规则以及许多性能改进。我们还删除了一些冗余的扫描检查。 Burp Scanner 对 WebSockets 的支持我们更新了内部代理的配置&#xff0c;以允许 WebSocket 流量。这使…

CORE Mobility Errorr的调试

在运行CORE tutorial 3中的mobility示例时&#xff0c;出现如下错误&#xff1a; 当看到这个问题的时候&#xff0c;并没有仔细去分析日志和现象&#xff0c;在core-daemon的进程打印界面只看了一下最后的出错堆栈&#xff1a; 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

Arduino - 旋转编码器 - 伺服电机

Arduino - 旋转编码器 - 伺服电机 Arduino - Rotary Encoder In this tutorial, We are going to learn how to program Arduino to rotate a servo motor according to the rotary encoder’s output value. 在本教程中&#xff0c;我们将学习如何对Arduino进行编程&#xff…

浏览器页面打不开(网络连接正常的情况下)

目录 一、代理被打开 二、DNS被篡改 三、网络配置出现问题 四、浏览器配置问题 一、代理被打开 1. 右击Wifi图标 2.点击“打开网络和internet设置” 3. 点击代理&#xff0c;把该窗口所有的东西都关闭&#xff0c;尤其是代理服务器 二、DNS被篡改 如果第一个方法不行&am…

平板WPS转换的PDF文件保存位置解析

在日常工作和生活中&#xff0c;我们经常需要将文档转换成PDF格式进行分享&#xff0c;以确保接收者能够无障碍地查看文件内容&#xff0c;不受软件版本或操作系统的限制。WPS作为一款功能强大的办公软件&#xff0c;也提供了文档转换为PDF的功能。然而&#xff0c;有时在转换并…

一本顶三本?入门LLM大模型必读《大模型应用开发极简入门》附PDF书籍

今天带来的是最近刚出版的新书&#xff1a; 《大模型应用开发极简入门&#xff1a;基于 GPT-4 和ChatGPT》 。 这本书是 O’Reilly 出版的&#xff0c;两位共同作者是来自 Worldline 公司的机器学习研究员 Olivier Caelen 和 数据工程师 Marie-Alice Blete。这两位作者一位侧重…

Kafka入门到精通(二)-安装Zookeeper

前言&#xff1a;因为我们要学习kafka&#xff0c;那么我们必须先安装了解下Zookeeper&#xff1b; Zookeeper简介 Zookeeper是一个开源的分布式协调服务&#xff0c;由Apache维护&#xff0c;旨在为分布式系统提供一致性、可靠性和高效的数据管理。 它通过提供一系列简单…

【Java Web】MVC架构模式

目录 一、MVC是什么? 二、MVC组成结构 三、MVC模式下项目常见包 一、MVC是什么? MVC&#xff08;ModelViewController&#xff09;是软件工程中的一种软件架构模式&#xff0c;它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织…

Django项目部署:uwsgi+daphne+nginx+vue部署

一、项目情况 项目根目录&#xff1a;/mnt/www/alert 虚拟环境目录&#xff1a;/mnt/www/venv/alert 激活虚拟环境&#xff1a;source /mnt/www/venv/alert/bin/activate 二、具体配置 1、uwsgi启动配置 根目录下&#xff1a;新增 uwsgi.ini 注意&#xff1a;使用9801端…

LSTM理解

目录 一、LSTM的本质 二、LSTM的原理 三、LSTM的应用 本文将从LSTM的本质、LSTM的原理、LSTM的应用三个方面&#xff0c;带您一文搞懂长短期记忆网络Long Short Term Memory | LSTM。 一、LSTM的本质 RNN 面临问题&#xff1a;RNN&#xff08;递归神经网络&#xff09;在处理…

劳易测应用案例:橡胶密炼生产线安全改造项目(下)

橡胶密炼是汽车轮胎制造流程中的核心环节&#xff0c;主要负责将橡胶与多种添加剂混合&#xff0c;确保均匀分散&#xff0c;以制备合格的橡胶材料。橡胶密炼生产线由多个关键设备组成&#xff0c;包括切胶机、导切机、称重和输送系统、密炼机、开炼机以及胶片冷却机等&#xf…

《分析模式》漫谈07-怎样把一张图从不严谨改到严谨

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10&#xff0c;里面有一些错误和考虑不周的地方&#xff1a; 2004中译本和2020中译本的翻译如下&#xff1a; 基本上都是照搬&#xff0c;没有改过…

Flutter第十五弹 Flutter插件

目标&#xff1a; 1.Flutter插件是什么&#xff1f;有什么作用&#xff1f; 2.怎么创建Flutter插件&#xff1f; 一、什么是插件 在flutter中&#xff0c;一个插件叫做一个package&#xff0c;使用packages的目的就是为了达到模块化&#xff0c;可以创建出可被复用和共享的代…

数据库逻辑结构设计-实体和实体间联系的转换、关系模式的优化

一、引言 如何将数据库概念结构设计的结果&#xff0c;即用E-R模型表示的概念模型转化为关系数据库模式。 E-R模型由实体、属性以及实体间的联系三个要素组成 将E-R模型转换为关系数据库模式&#xff0c;实际上就是要将实体及实体联系转换为相应的关系模式&#xff0c;转换…

iOS包ShaderVariantCollection预热慢问题

1&#xff09;iOS包ShaderVariantCollection预热慢问题 2&#xff09;使用SBP打Bundle如何读取AssetBundleManifest 3&#xff09;如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用 4&#xff09;为什么我的水这么干净&#xff0c;和UE教程里的有差别 这是第392篇…

位运算算法系列|概念讲解|例题讲解

大家好,我是LvZi,今天带来位运算算法系列|概念讲解|例题讲解 一,位运算基本概念 1.基础位运算 <<:左移操作,相当于 *2>>:右移操作,相当于 /2~:按位取反&:按位与操作,有0则0|:按位或操作,有1则1^:按位异或操作,相同为0,相异为1/无进位相加 注:对于^操作,无进…

昇思25天学习打卡营第4天|linchenfengxue

需求&#xff1a;建立一个图像分类模型&#xff0c;提供自动识别有(猫、狗、飞机、汽车等等) 图片的功能 ResNet50图像分类 图像分类是最基础的计算机视觉应用&#xff0c;属于有监督学习类别&#xff0c;如给定一张图像(猫、狗、飞机、汽车等等)&#xff0c;判断图像所属的类…

【直播倒计时】面向AI领域的开发工程师:TinyML在国产FPGA的边缘AI加速应用

TinyML是机器学习中的一个新兴领域&#xff0c;专注于开发可在低功耗、内存受限的设备上运行的算法和模型。其核心目标是将先进的机器学习算法和模型移植到体积小巧、能耗极低的嵌入式设备中&#xff0c;使这些设备具备边缘智能&#xff0c;能够在没有外部服务器支持的情况下进…

05 threeJs基础---阵列立方体和相机适配体验立方体

1.增加相机视角fov 注&#xff1a; 范围更大&#xff0c;意味着可以看到渲染范围更大&#xff0c;远小近大的视觉效果更明显 fov:眼球张开的角度&#xff0c;0时相当于闭眼。aspect:可视区域横纵比。near:眼睛能看到的最近垂直距离。far&#xff1a;眼睛能看到的最远垂直距离。…

Python类的定义和管理库之attrs使用详解

概要 在 Python 编程中,定义类和数据结构是常见的任务。然而,手动编写类的初始化方法、属性验证和比较方法可能会非常繁琐和容易出错。attrs 库是一个功能强大且灵活的工具,旨在简化类的定义和管理。通过使用 attrs,开发者可以轻松定义不可变对象、进行属性验证和类型检查…