OFDM 802.11a的FPGA实现(十八)signal域数据处理

目录

[1. 前言](#1. 前言)

2.硬件实现

3.verilog代码

原文链接(相关文章合集)OFDM 802.11a的xilinx FPGA实现

1. 前言

在之前的博客当中,已经实现了802.11a当中数据域的一系列处理,最终得到了数据域的时域波形。相较于数据域,signal域的处理很类似并且更简单。

2.硬件实现

·signal域的数据不需要进行加扰和删余操作,因此实现起来比较简单。

·signal域的数据不需要进行二级交织,只需一级交织。

·signal域的数据采用的是BPSK的调制方式,占据一个OFDM符号。

下图的紫色部分,显示了signal域数据的处理过程。

OFDM发射模块

signal域数首先会根据格式产生一帧数据,然后这个数据再依次经过1/2卷积编码,一级交织,BPSK调制,IFFT转换以及添加循环前缀之后,最终得到signal域的时域波形。和data域的区别是不进行扰码,删余和二级交织,所示设计上,在data域处理流程中添加Signal_Flag为Signal符号标志信号,屏蔽这些模块即可实现signal域数剧处理。如下图所示:

添加Signal_Flag后的打他域处理电路图

3.verilog代码

以扰码模块为例进行,添加Signal_Flag为Signal符号标志信号,如下所示:

cpp 复制代码
 
`timescale 1ns / 1ps 
///
//扰码多项式  s(x) = x^7 + x^4 + 1                                                                                
/// 
 
module scramler( 
input               clk           , 
input               rst_n         , 
input       [6:0]   scram_seed    , //扰码器初始状态
input               scram_load    ,
input               scram_din     , 
input            scram_din_vld  , 
input    scram_din_rdy  ,
input    scram_din_sig_flag ,
input  [3:0] scram_din_rate_con ,                                      
output  reg      scram_dout    ,
output  reg      scram_dout_vld  ,
output     scram_dout_rdy  ,
output reg   scram_dout_sig_flag ,
output reg [3:0] scram_dout_rate_con 
);

    reg     [6:0]   shift_reg ;
 wire   scram_en ;
 
assign scram_dout_rdy = scram_din_rdy    ; 
assign scram_en =  scram_dout_rdy & scram_din_vld ;
 
    always@(posedge clk or negedge rst_n ) begin
        if(!rst_n) begin
            shift_reg <= 0;
            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

endmodule   

在scram_din_sig_flag = 1时,不启动扰码模块直接将输入进行输出。同时还添加了scram_din_rate_con信号,用于接收调制方式和数据速率。

这里只展示了扰码模块的修改,其他模块修改也是一样的。Signal域中的信息比特的处理过程与Data域相同,只是标准规定其只能采用BPSK调制而不能用更加复杂的调制方式,编码方式为1/2码率的卷积编码,不再进行删余操作,以尽可能保证可靠传输。这样Signal域就可以得到6Mb/s的信息传输速率,这是IEEE802.11a中所规定的最低速率,同时也是最为可靠的传输方式,以确保Signal域信息的正确接收。

原文链接(相关文章合集)OFDM 802.11a的xilinx FPGA实现

相关推荐
transfer_ICer17 小时前
Vscode搭建verilog开发环境
vscode·fpga开发·编辑器
沐欣工作室_lvyiyi1 天前
汽车牌照识别系统的设计与仿真(论文+源码)
人工智能·单片机·fpga开发·汽车·单片机毕业设计·matlab车牌识别
绅士羊OuO1 天前
FPGA学习笔记#5 Vitis HLS For循环的优化(1)
c++·笔记·嵌入式硬件·学习·fpga开发
Panda 皮2 天前
FPGA时钟之时钟偏移
fpga开发
stm 学习ing2 天前
FPGA 第5讲 点亮你的LED灯
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
tiger1192 天前
理解 FPGA 的关键知识点整理
学习·fpga开发·fpga
17岁boy想当攻城狮2 天前
FPGA实战篇:Moore/Mealy状态机
fpga开发
Panda 皮2 天前
优化扇出
fpga开发
stm 学习ing3 天前
FPGA 第二讲 初始FPGA
c语言·开发语言·stm32·fpga开发·c#·visual studio·嵌入式实时数据库
搬砖的小码农_Sky3 天前
Xilinx FPGA的Vivado开发流程
fpga开发