1、 引言
ieee 802.11标准定义了能够统筹所有基于以太网的无线通信的协议。它是迄今为止最流行的无线局域网的标准。这个标准还细分了一些子标准, 如802.11a, 802.11b和802.11g。这其中有些协议可使用直接序列扩频技术(dsss)来发送无线信号, 如802.11b。 无线局域网带宽窄,终端设备处理能力弱,其信号的组帧环节需要尽可能采用处理时延小,占用存储资源少的方法。本文正是以此为指导思想进行802.11协议帧的生成的。
2、模块的设计与实现
2.1 全局控制模块
该模块的设计方法是采用一个9bit的计数器,以协议帧的二进制位长度为周期循环计数,在不同的时间片发出不同的使能信号,以实现对多个输出模块的控制,实现实时的串行输出。并设计有选通信号sel[1..0],以实现对输出端口的多路选择器的控制。其仿真时序波形图如图1所示。其关键代码如下:
①always@(posedge clk4) //初始化
begin
if(!reset)
begin
count《=0;
end else
begin
if(count==9‘d472) count《=0;
else count《=count+1;
end
end
②always//对帧序号生成模块的控制
begin
if(!reset) seqenable《=0;
if(count==9’d176) seqenable《=1;
if(count==9‘d192) seqenable《=0;
end ③always //对两个rom单元的使能和禁止控制
begin
if(!reset)
begin
dataaddrenable《=0;
dataromenable《=0;
crccalenable《=0;
end
if(count==9’d240)//送data
begin
dataaddrenable《=1;
dataromenable《=1;
crccalenable《=1;
end
if(count==9‘d440)
begin
dataaddrenable《=0;
dataromenable《=0;
crccalenable《=0;
end
end
④always //在每帧结束时送出帧序号加1的使能信号
begin
if(!reset)contin《=0; if(count==9’d472) contin《=1; if(count==1)contin《=0;
end
⑤always //对crc校验码生成模块的控制
begin
if(!reset)
crcdoutenable《=0;
if(count==9‘d440) //数据送完了。
crcdoutenable《=1;
if(count==9’d472)
crcdoutenable《=0;
end
⑥always//选通信号控制
begin
if(!reset) sel=2‘b00;
if(count==9’d470) sel=2‘b01;
if(count==9’d173) sel=2‘b00; 续⑥if(count==9’d190) sel=2‘b01;
if(count==9’d238) sel=2‘b10;
if(count==9’d438) sel=2‘b11;
end
endmodule
2.2 crc校验码生成器模块
此模块需要的常用crc生成多项式如下:
crc-8:x8+x2+x+1
crc-16:x16+x15+x2+1
crc-32:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
其关键代码如下。该模块crc校验时序仿真波形如图2所示。
always@(negedge clk)//posedge把数据送出来,
//negedge对数据进行处理
begin
if(calculateen) //flag为高时作crc的产生
begin
dout《=1’bz;
d[0]《=din^d[31];
d[1]《=d[0]^din^d[31];
d[2]《=d[1]^din^d[31];
d[3]《=d[2];
d[4]《=d[3]^din^d[31];
d[5]《=d[4]^din^d[31];
d[6]《=d[5];
d[7]《=d[6]^din^d[31];
d[8]《=d[7]^din^d[31];
d[9]《=d[8];
d[10]《=d[9]^din^d[31];
d[11]《=d[10]^din^d[31];
d[12]《=d[11]^din^d[31];
for(i=12;i《=14;i=i+1)
d[i+1]《=d[i];
d[16]《=d[15]^din^d[31];
for(i=16;i《=20;i=i+1)
d[i+1]《=d[i];
d[22]《=d[21]^din^d[31];
d[23]《=d[22]^din^d[31];
d[24]《=d[23];
d[25]《=d[24];
d[26]《=d[25]^din^d[31];
for(i=26;i《=30;i=i+1)
d[i+1]《=d[i];
end
else dout《=1‘bz;
if(outputen)
begin
dout《=d[31];
d《=d《《1;
end
else
dout《=1’bz;
end
endmodule//
2.3 帧序号生成模块
该模块的功能是产生16bit的帧序号,由overall_ctrl在每帧结束时发出的contin信号实现计数的加一。由enable信号触发,将帧序号串行输出。其关键代码为:
①always@(negedge clk4) //产生帧序号
begin
if(!reset)
seqctrl[15:0]《=0;
if(contin)
begin
if(seqctrl[15:0]==16‘hffff)
seqctrl[15:0]《=0;
else seqctrl《=seqctrl+1;
end
end 续② 4’d3:q《=seqctrl[3];
4‘d4:q《=seqctrl[4];
4’d5:q《=seqctrl[5];
4‘d6:q《=seqctrl[6];
4’d7:q《=seqctrl[7];
4‘d8:q《=seqctrl[8];
4’d9:q《=seqctrl[9];
4‘d10:q《=seqctrl[10];
4’d11:q《=seqctrl[11];
4‘d12:q《=seqctrl[12];
4’d13:q《=seqctrl[13];
4‘d14:q《=seqctrl[14];
4’d15:q《=seqctrl[15];
endcase
end
else
begin
q《=1‘bz;
count《=0;
end
end
else q《=1’bz;
end
endmodule
②always@(negedge clk4) //16 bit帧序号串行输出
begin
if(enable)//enable信号只能严格划分为十六个周期;
begin
count《=count+1;
if(count!=16)
begin
case(count)
4‘d0:q《=seqctrl[0];
4’d1:q《=seqctrl[1];
4‘d2:q《=seqctrl[2];
该模块的帧序号生成模块时序仿真图如图3所示。
2.4 ieee 802.11协议帧生成器 系统总体结构模块
ieee 802.11协议帧生成器 系统总体结构模块框图如图4所示。
3. 结论
本文以展示详尽的verilog hdl代码、各模块时序仿真图和系统总体结构框图的方式给出了一种基于fpga的ieee 802.11协议帧生成器的设计实现方法。该协议帧可直接由dsss发射机发送。本设计几乎不产生组帧延迟,实时性能好,且不占用缓冲资源,具有新颖性和实用性。
本文作者创新点:
1) 本文给出了一种以fpga为硬件平台的ieee 802.11协议帧生成器的设计实现方法。
2)采用该方法几乎不产生组帧延迟,实时性能好,且不占用缓冲资源,具有新颖性和实用性。
安防行业洗牌 留给中小安防企业企业的机会已经不多了
信息化部部长向外界介绍了我国5G网络铺设的速度
工控一体机电脑的性能特征
高通基于可穿戴设备的多国语言字库解决方案 — 字型专业美观
什么是电力补偿电容器,它的作用是什么
基于可编辑逻辑器件实现IEEE 802.11协议帧生成器的应用方案
Arduino篇—点亮LED
设计师点评,荣耀9、三星S8、锤子坚果Pro谁更惊艳
迎向新版蓝牙5.4标准的必备设计知识!
传统巨头在改变,通用凯雷德配备38英寸OLED曲面显示屏
新疆力促光伏扶贫,进一步深化供给侧结构性改革
博通为可穿戴设备推出支持无线充电的蓝牙智能 SoC
IPTV编解码标准综述
富士康公布2020年10月营收达6125.54亿元
Omdia:2020年将是智能家居行业转型的一年
台湾中小尺寸面板旺季不旺,或靠Mini LED续命
谷歌Pixel3评测 饱含满满的国际大厂范儿
图解无刷电机原理
用于电动汽车的48V系统
Mini/Micro LED的成本将会快速下降,从而在更多的应用领域落地