基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功

devtools/2024/11/27 0:07:14/

基于FPGA的2FSK调制

  • 前言
  • 一、2FSK储备知识
  • 二、代码分析
    • 1.模块分析
    • 2.波形分析
  • 总结


前言

设计实现连续相位 2FSK 调制器,2FSK 的两个频率为:fI=15KHz,f2=3KHz,波特率为 1500 bps,比特0映射为f 载波,比特1映射为 载波。
1)接收到被发送的数据帧后,按下面格式生成突发帧:帧头(1111111101111110,16比特)+数据帧长度字节(高位在前)+数据帧(来自UART接口的数据字节,每个字节高位在前)+XOR校验字节(长度字节、数据的XOR结果)+结尾8比特(0000000)
2)通过 DAC 模块输出已调信号波形

一、2FSK储备知识

2FSK(双频移键控)调制是数字调制技术的一种,常用于无线通信、数据传输等领域。2FSK属于频移键控(FSK)调制方式的一种特例,其中“2”表示使用两个不同的频率来表示二进制数据0和1。

  1. 输入数据比特流:发送端输入二进制数据流(0和1)。
  2. 选择频率:比特0对应f0,比特1对应f1
  3. 频率调制:在发送端,根据信号的0和1的不同,调节载波信号的频率。每个数据比特对应一个特定的频率周期。
  4. 信号传输:调制后的信号通过传输媒介(如无线电波、电缆等)发送到接收端。

二、代码分析

1.模块分析

代码如下(示例):

//产生载波0
module DDS_Mod1(input 	clk,input   rst_n,output wire    [11:0] 	addr_I,output wire signed  [7:0]  sin		//调制信号
);parameter   Freq =  34'd687026;	//题目要求2KHz/3Khz  设置频率控制字  0.04096 * 2的22次方 =171966  257530
//parameter    Freq =  32'd4278;	//题目要求2KHz/3Khz  设置频率控制字  0.04096 * 2的22次方 =171966  257530
reg     [31:0]  Freq_1;
reg     [33:0]  cnt_I = 0;  //32位=10+22always @(posedge clk or negedge rst_n) beginif(!rst_n)	begincnt_I <= 0;endelse	begincnt_I <= cnt_I + Freq;end
endassign  addr_I = cnt_I[33:22];  //右移12位,相当于除以2的12次方ROM	b2v_inst2(   //调用ROM,将右移后的值送入ROM的地址端.clka(clk),.addra(addr_I),.douta(sin));endmodule
//产生载波1
module DDS_Mod(input 	clk,input   rst_n,output wire    [11:0] 	addr_I,output wire signed  [7:0]  sin		//调制信号
);
//0对应2k 1对应3k
parameter   Freq =  34'd343932;	//题目要求2KHz/3Khz  设置频率控制字  0.04096 * 2的22次方 =171966  257530
//parameter    Freq =  32'd4278;	//题目要求2KHz/3Khz  设置频率控制字  0.04096 * 2的22次方 =171966  257530
reg     [31:0]  Freq_1;
reg     [31:0]  Freq_2;
reg     [33:0]  cnt_I = 0;  //32位=10+22always @(posedge clk or negedge rst_n) beginif(!rst_n)	begincnt_I <= 0;endelse	begincnt_I <= cnt_I + Freq;end
endassign  addr_I = cnt_I[33:22];  //右移12位,相当于除以2的12次方ROM	b2v_inst2(   //调用ROM,将右移后的值送入ROM的地址端.clka(clk),.addra(addr_I),.douta(sin));endmodule

其他模块就是围绕功能进行编写
其他模块就是围绕功能进行编写
其他模块就是围绕功能进行编写
关注三连后台获取

2.波形分析

串口接收到88、55数据后存在fifo里面
在这里插入图片描述
按照通信协议进行实现,将比特0和1映射为对应的频率。

在这里插入图片描述

总结

软件:vivado 2023 modelsim
工程文件完善,修改比较方便,方便大家进行课程知识点的学习与设计,加深对于FSK的理解。


http://www.ppmy.cn/devtools/137253.html

相关文章

大学课程项目中的记忆深刻 Bug —— 一次意外的数组越界

开头 在编程的世界里&#xff0c;每一行代码都像是一个小小的宇宙&#xff0c;承载着开发者的心血与智慧。然而&#xff0c;即便是最精心编写的代码&#xff0c;也难免会遇到那些突如其来的 bug&#xff0c;它们就像是潜伏在暗处的小怪兽&#xff0c;时不时跳出来捣乱。 在我…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…

Web开发:ABP框架7——前端请求头的读取

一、前端请求头的读取 1.注入 高层代码使用注入&#xff0c;IHttpContextAccessor 是 ASP.NET Core 中的一个接口&#xff0c;用于在服务层中获取与当前 HTTP 请求相关的信息&#xff0c;比如请求的头部、Cookie、用户身份等。 private readonly IHttpContextAccessor _http…

性能监控利器:Ubuntu 22.04 上的 Zabbix 安装与配置指南

简介 今天我们来聊聊如何在 Ubuntu 22.04 上安装和配置 Zabbix。我们会用到 PostgreSQL 作为数据库后端&#xff0c;Nginx 作为 Web 服务器&#xff0c;并用 Let’s Encrypt SSL 证书来保驾护航。 什么是 Zabbix&#xff1f; Zabbix 是一个开源的网络监控和管理解决方案&…

【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在机器学习建模过程中,模型的表现往往取决于参数的选择与优化。Scikit-learn提供了便捷的工具GridSearchCV和RandomizedSearchCV,帮助我们在参数空间中搜索最佳组合以提升模型表现。本文将从理论和实践两个角度…

计算机网络——第3章 数据链路层(自学笔记)

本文参考【王道计算机考研 计算机网络】 数据链路层的功能 主要任务&#xff1a;实现帧在一段链路上或在一个网络中进行传输。 基本原则&#xff1a;封装成帧、透明传输和差错检测。 信道&#xff1a;点对点信号和广播信道。 数据链路层所处地位 数据进入路由器后&#x…

‌Kotlin中的?.和!!主要区别

目录 1、?.和!!介绍 2、使用场景和最佳实践 3、代码示例和解释 1、?.和!!介绍 ‌Kotlin中的?.和!!主要区别在于它们对空指针的处理方式。‌ ‌?.&#xff08;安全调用操作符&#xff09;‌&#xff1a;当变量可能为null时&#xff0c;使用?.可以安全地调用其方法或属性…

基于联邦学习的卫星-地面集成网络移动流量预测

论文标题&#xff1a;Federated Learning-Based Mobile Traffic Prediction in Satellite-Terrestrial Integrated Networks 作者信息&#xff1a;Weiwei Jiang1,2, Jianbin Mu3, Haoyu Han1,2, Yang Zhang1,2, Sai Huang1,2 Key Laboratory of Universal Wireless Communicat…