笔记一:
从射频芯片下变频出来的基带信号进入解码流水线经历了以下处理步骤:
1,包检测
2,中心频率校准
3,快速傅里叶变换 (后续的操作将在频域上)
4,信道增益估计
5,解码
6,去交织
7,卷积译码
8,解扰
笔记二:顶层模块以及定义
下图是顶层模块:
下表是信号说明:
我梳理一下:
clock: 时钟内部都采用posedge
enable:模块使能,高电平有效。
reset:模块复位,高电平有效
set_stb,set_addr,set_data:是设置内部配置寄存器的端口。stb为1的时候,data数据将被写入到addr位置的寄存器里。地址线是8位,数据线是32位.
sample_in_stb,sample_in:这是射频接收芯片下变频后的基带信号输入,高16位是虚部,低16位是实部。单stb为1,sample_in被采集。
============此分割线之上全是输入,此分割线之下的全是输出============
pkt_begin:一包的开始信号。
pkt_ht:输出为1表示解析出来的包是802.11n,输出为0表示解析出来的包是802.11a/g。
pkt_len:解析出来的包字节长度。
byte_out_stb,byte_out:是输出口,当stb为1时,byte_out的输出是有效的。
fcs_out_stb,fcs_ok:是指示此数据包是否经过了CRC校验。下图是搜索到的FCS介绍。
笔记三:几个脚本的介绍
gen_*_lut.py是生成一些内存初始化数组的脚本,在verilog目录中的*_lut.coe和*_lut.mif是使用此脚本对应生成的。.COE是XILINX支持的内存初始化文件格式,.MIF是ALTERA支持的内存初始化文件格式。
bin_to_mem.py是将bin文件生成VERILOG仿真器使用readmemh函数初始化数组的文本文件。
decode.py是这个项目对应的python实现,test是对比decode.py的结果和verilog仿真代码的实现是否等效。
condense.py用于压缩文件。我们用 USRP 等外设去到的数据可能有大量的空闲,表现为幅度数值小于某数值,我们可以用这个小工具去掉文件开头部分的这些空闲(相当于逻辑分析仪的触发设置)。
在sample_in目录里面收集了一些能覆盖所有位速率,所有模式的实验样本。这些样本在仿真时候可以直接做为输入,在实际FPGA运行阶段可以直接用USRP设备发送出去,给ZEDBOARD+AD9361这样的硬件实验平台进行解调。