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

基于FPGA的2FSK调制


前言

设计实现连续相位 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.模块分析

代码如下(示例):

c 复制代码
//产生载波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+22

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_I <= 0;
	end
	else	begin
	    cnt_I <= cnt_I + Freq;
	end
end
 
assign  addr_I = cnt_I[33:22];  //右移12位,相当于除以2的12次方
 
ROM	b2v_inst2(   //调用ROM,将右移后的值送入ROM的地址端
	.clka(clk),
	.addra(addr_I),
	.douta(sin));
 
endmodule
c 复制代码
//产生载波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+22
   
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_I <= 0;
	end
	else	begin
	    cnt_I <= cnt_I + Freq;
	end
end
 
assign  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的理解。

相关推荐
易享电子4 小时前
基于单片机大棚浇水灌溉控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
cmc10286 小时前
127.XIlinx fpga端的pcie(XDMA)与驱动是如何交换数据的
笔记·fpga开发
荆白雪18 小时前
触摸按键控制LED
fpga开发
sz66cm1 天前
FPGA基础 -- cocotb仿真之任务调度cocotb.start_soon与asyncio的使用注意事项
fpga开发
霖001 天前
ZYNQ裸机开发指南笔记
人工智能·经验分享·笔记·matlab·fpga开发·信号处理
tiantianuser1 天前
NVMe高速传输之摆脱XDMA设计52: 上板资源占用率分析
fpga开发·nvme·pcie·xdma·高性能nvme
我爱C编程1 天前
【仿真测试】基于FPGA的完整DQPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·帧同步·viterbi译码·dqpsk·频偏锁定·定时点
nnerddboy1 天前
FPGA自学笔记(正点原子ZYNQ7020):2.IP核与组成
fpga开发
碰大点1 天前
第8章 zynq uboot更新系统镜像并引导启动和个人心得
驱动开发·fpga开发·uboot·zynq
szxinmai主板定制专家1 天前
基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
arm开发·嵌入式硬件·fpga开发·无人机·能源