基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功
基于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。
- 输入数据比特流:发送端输入二进制数据流(0和1)。
- 选择频率:比特0对应f0,比特1对应f1
- 频率调制:在发送端,根据信号的0和1的不同,调节载波信号的频率。每个数据比特对应一个特定的频率周期。
- 信号传输:调制后的信号通过传输媒介(如无线电波、电缆等)发送到接收端。
二、代码分析
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的理解。
相关文章:
基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功
基于FPGA的2FSK调制 前言一、2FSK储备知识二、代码分析1.模块分析2.波形分析 总结 前言 设计实现连续相位 2FSK 调制器,2FSK 的两个频率为:fI15KHz,f23KHz,波特率为 1500 bps,比特0映射为f 载波,比特1映射为 载波。 1)…...
JavaScript的基础数据类型
一、JavaScript中的数组 定义 数组是一种特殊的对象,用于存储多个值。在JavaScript中,数组可以包含不同的数据类型,如数字、字符串、对象、甚至其他数组。数组的创建有两种常见方式: 字面量表示法:let fruits [apple…...
第三讲 架构详解:“隐语”可信隐私计算开源框架
目录 隐语架构 隐语架构拆解 产品层 算法层 计算层 资源层 互联互通 跨域管控 本文主要是记录参加隐语开源社区推出的第四期隐私计算实训营学习到的相关内容。 隐语架构 隐语架构拆解 产品层 产品定位: 通过可视化产品,降低终端用户的体验和演…...
JDBC编程---Java
目录 一、数据库编程的前置 二、Java的数据库编程----JDBC 1.概念 2.JDBC编程的优点 三.导入MySQL驱动包 四、JDBC编程的实战 1.创造数据源,并设置数据库所在的位置,三条固定写法 2.建立和数据库服务器之间的连接,连接好了后ÿ…...
Python绘制太极八卦
文章目录 系列目录写在前面技术需求1. 图形绘制库的支持2. 图形绘制功能3. 参数化设计4. 绘制控制5. 数据处理6. 用户界面 完整代码代码分析1. rset() 函数2. offset() 函数3. taiji() 函数4. bagua() 函数5. 绘制过程6. 技术亮点 写在后面 系列目录 序号直达链接爱心系列1Pyth…...
Spring框架特性及包下载(Java EE 学习笔记04)
1 Spring 5的新特性 Spring 5是Spring当前最新的版本,与历史版本对比,Spring 5对Spring核心框架进行了修订和更新,增加了很多新特性,如支持响应式编程等。 更新JDK基线 因为Spring 5代码库运行于JDK 8之上,所以Spri…...
Linux关于vim的笔记
Linux关于vim的笔记:(vimtutor打开vim 教程) --------------------------------------------------------------------------------------------------------------------------------- 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键…...
linux mount nfs开机自动挂载远程目录
要在Linux系统中实现开机自动挂载NFS共享目录,你需要编辑/etc/fstab文件。以下是具体步骤和示例: 确保你的系统已经安装了NFS客户端。如果没有安装,可以使用以下命令安装: sudo apt-install nfs-common 编辑/etc/fstab文件&#…...
【vue】导航守卫
什么是导航守卫 在vue路由切换过程中对行为做个限制 全局前置守卫 route.beforeEach((to, from, next)) > {// to是切换到的路由// from是正要离开的路由// next控制是否允许进入目标路由next(false); //不允许 }路由级别的导航守卫 const routes [{path: /User,name: U…...
基于Matlab实现LDPC编码
在无线通信和数据存储领域,LDPC(低密度奇偶校验码)编码是一种高效、纠错能力强大的错误校正技术。本MATLAB仿真程序全面地展示了如何在AWGN(加性高斯白噪声)信道下应用LDPC编码与BPSK(二进制相移键控&#…...
PostgreSQL 中约束Constraints
在 PostgreSQL 中,约束(Constraints)是用于限制进入数据库表中数据的规则。它们确保数据的准确性和可靠性,通过定义规则来防止无效数据的插入或更新。PostgreSQL 支持多种类型的约束,每种约束都有特定的用途和语法。以…...
✨系统设计时应时刻考虑设计模式基础原则
目录 💫单一职责原则 (Single Responsibility Principle, SRP)💫开放-封闭原则 (Open-Closed Principle, OCP)💫依赖倒转原则 (Dependency Inversion Principle, DIP)💫里氏代换原则 (Liskov Substitution Principle, LSP)&#x…...
【Linux】多线程(下)
目录 一、生产者消费者模型 1.1 概念 1.2 基于阻塞队列 1.3 POSIX信号量 初始化信号量 销毁信号量 等待信号量 发布信号量 1.4 基于环形队列和POSIX信号量 二、线程池 2.1 概念 2.2 代码 三、封装Linux线程库 四、单例模式 4.1 概念 4.2 单例模式的实现方式 4…...
Element-Plus如何修改日期选择器输入框el-date-picker的圆角
使用 el-date-picker 的 style 属性 :style"{ --el-border-radius-base: 10px }"<!-- 日期 --> <el-form-item label"日期" prop"establishmentDate"><el-date-picker v-model"form.establishmentDate" type"dat…...
skywalking es查询整理
索引介绍 sw_records-all 这个索引用于存储所有的采样记录,包括但不限于慢SQL查询、Agent分析得到的数据等。这些记录数据包括Traces、Logs、TopN采样语句和告警信息。它们被用于性能分析和故障排查,帮助开发者和运维团队理解服务的行为和性能特点。 …...
故障排除-------K8s挂载集群外NFS异常
故障排除-------K8s挂载集群外NFS异常 1. 故障现象2. 原因梳理2.1 排查思路2.2 确认yaml内容2.3 创建k8s内的nfs测试2.3.1 创建nfs和svc2.3.2 测试创建pvc2.3.3 测试结果 2.4 NFS服务端故障排除2.4.1 网络阻断排除2.4.2 排除服务状态问题2.4.3 排查NFS权限问题 3. 故障排除 1. …...
Easyexcel(6-单元格合并)
相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽)Easyexcel(6-单…...
解决登录Google账号遇到手机上Google账号无法验证的问题
文章目录 场景小插曲解决方案总结 场景 Google账号在新的设备上登录的时候,会要求在手机的Google上进行确认验证,而如果没有安装Google play就可能出现像我一样没有任何弹框,无法实现验证 小插曲 去年,我在笔记本上登录了Googl…...
【Redis_Day5】String类型
【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…...
Python MySQL SQLServer操作
Python MySQL SQLServer操作 Python 可以通过 pymysql 连接 MySQL,通过 pymssql 连接 SQL Server。以下是基础操作和代码实战示例: 一、操作 MySQL:使用 pymysql python 操作数据库流程 1. 安装库 pip install pymysql2. 连接 MySQL 示例 …...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
