EDA报告以太网帧头检测电路设计Word文档下载推荐.docx
- 文档编号:8161299
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:25
- 大小:427.36KB
EDA报告以太网帧头检测电路设计Word文档下载推荐.docx
《EDA报告以太网帧头检测电路设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EDA报告以太网帧头检测电路设计Word文档下载推荐.docx(25页珍藏版)》请在冰点文库上搜索。
引言1
1总体电路结构设计2
1.1电路功能与性能2
1.2关键功能电路设计3
1.3电路接口4
1.4电路功能框图4
1.5验证方案6
2模块设计6
2.1数据同步与恢复模块data_sync设计6
2.2计数模块cnt1536设计8
2.3地址产生模块add_gen设计10
2.4长度锁存模块length_cap设计12
3代码输入与仿真13
3.1HDL代码输入13
3.2仿真与测试的功能列表14
3.3仿真平台构建15
3.4电路功能仿真结果16
3.5电路后仿真结果18
结论18
参考文献19
附录A设计源代码20
引言
近十几年来,可编程器件FPGA/CPLD成本的大幅度降低,且随着EDA技术的日益普及,FPGA/CPLD以其较好的集成度和稳定性、可编程实现与升级的特点,在电子设计领域得到了越来越多的应用[1]。
本设计要实现一个数据恢复电路,完成10/100M以太网物理层MII接口与数据包存储之间的数据变换,将其恢复为16比特的数据存入本地SRAM;
为便于验证,再将SRAM中的数据回显在LED上。
一般情况下实现该功能已经有了现成的芯片可用,这里采用FPGA的方法主要便于进一步的数据处理,比如可以采用硬件的方法处理某些特定的IP数据,甚至是UDP/TCP数据,就象本设计验证中采用的办法,直接处理ICMP数据包。
由此可见可编程逻辑FPGA/CPLD方式实时性更好,逻辑可扩展性也好,如在FPGA/CPLD中使用CPU核,则有着更明显的应用优势[2]。
本设计使用Altera的cycleII芯片,开发过程中采用Altera公司的集成工具QuartusII实现设计。
基本流程是这样的:
首先根据设计任务要求进行方案的设计,包括引脚确定、时序关系、功能框图与模块划分、数据处理流程与方法等;
然后依据模块设计进行模块HDL代码的输入与功能仿真,功能仿真采用HDL仿真工具Modelsim6.1f;
完成功能仿真后,在QuartusII平台下进行电路的约束与综合;
综合结果无误后进行布局与布线,生成配置文件;
在下载前进行时序分析;
最后下载、测试,从而完成设计。
本设计主要完成前端功能设计部分,即方案设计、代码输入、功能仿真。
由于条件所限无法在现场进行接入网络验证,本设计采用开发板上现有资源进行:
开发板上具有MII接口的物理层芯片与RJ45接口,我们将其通过直连线插入电脑网卡,在电脑上用ping命令发送数据,设计电路将其捕捉之后会随着拨挡开关逐一显示在LED上。
1总体电路结构设计
1.1电路功能与性能
以太网帧头检测电路功能主要集中在四方面。
一是在输入的顺序的、无数据结构的、4比特的数据码流中捕捉帧头数据,依据IEEE802.3标准应该是0xaaab;
二是以帧头数据作为标准初始相位,从目的MAC地址数据开始将数据恢复为16比特数据;
三是例化一片内双口同步SRAM,利用线路时钟将恢复的数据写入,利用本地同步时钟将其读出,完成时钟域的切换;
四是驱动LED逐一显示SRAM中的数据。
电路的具体功能细节罗列如下:
1)MII接口输入数据4比特,与其同步的时钟25M/2.5M。
2)本地时钟20M,与线路时钟完全异步。
3)MII侧数据首先进行帧头0xaaab特征码字图样捕捉,连续捕捉到三次0xa之后,再捕捉到0xb即认为确认帧头,下一个数据即认为是目的MAC地址前8比特(MSB)。
4)帧头定位之后,从目的MAC地址开始进行数据的变换,将其变为16比特的具有数据结构的802.3MAC帧数据。
5)电路内设计有MAC帧长度域捕捉电路与帧长计数器,一帧接收完保存成之后给出接收完成信号。
6)恢复后的数据仍然用线路时钟将其存入片内同步双口SRAM中,称为数据写入。
7)SRAM中读出的数据直接驱动16个LED。
8)完成一次接收后,为避免SRAM中的数据被下一帧覆盖,将接收使能信号的拨挡开关关闭。
9)读取SRAM信息时,地址由外部控制:
可以同步复位、可以增量加一、可以减一、可以通过拨挡开关设定10位任意值;
并且SRAM读取地址通过7段数码管显示。
因为该设计仅完成接口电路的功能,每次从SRAM中读取数据时采用手工的方式来进行,数据的吞吐量很小,每次使能操作只进行一个MAC帧的处理。
当正常使用时,同步侧的时钟为20M,处理能力为16bit*20M=320Mbps,足以满足需要。
1.2关键功能电路设计
本电路设计的主要难点在于帧头捕捉与数据恢复。
经过功能分析,决定采用移位寄存器的方式进行帧头捕捉,利用数据选择器将移位寄存器中的结构化数据提取出来。
根据MII接口可知,为了捕捉16比特帧头数据0xaaab,必须设置5级移位寄存器,每级移位寄存器由4个触发器构成。
输入移位寄存器的数据可能具有下面形式中的任何一个,其中x值为不确定,可能为1,也可能为0;
红色的0/1序列为需要检测的比特图样0xaaab;
蓝色的MAC字样位MAC帧数据。
从图中可见,待检测比特图样与MAC数据的起始位可能位于4比特的任意位置,但整个16比特图样一定在5级移位寄存器的20比特当中,且顺序排列。
因此,当帧头数据到来之时,只要从这20比特中顺序选四组16比特序列,一定有一组是定位数据。
例如上图a中,0-15位的16比特是定位数据;
b中1-16位的16比特是定位数据;
c中2-17位的16比特是定位数据;
d中3-18位的16比特是定位数据。
当4-19位的16比特是定位数据时,移位寄存器前一个周期就是a中所示的数据内容,应该在上一时钟周期捕捉到。
完成帧头捕捉之后,在20比特中提取定位信息的位置,每隔4个时钟周期就可以提取一次MAC数据,完成数据的变换。
1.3电路接口
整个设计接口可以分为5部分,分别是线路输入数据和时钟、接收使能与接收完成指示信号、本地同步时钟与系统复位、数据显示接口、地址控制与显示接口。
需要注意的是,这里的大部分输入信号都来自拨挡开关或者按键,与相应的时钟是异步信号,使用之前需要对其进行同步化处理。
注意拨挡开关设定读取SRAM的地址时,完成拨挡开关设定后,由一个控制信号addr_swc控制完成设定值的输入,该信号由按键完成。
具体接口如下表1.1所示。
1.4电路功能框图
依照功能,将电路分为6个功能模块:
输入同步模块data_sync,用于恢复帧定位和MAC数据;
MAC帧长度域捕捉模块length_cap,用于捕捉MAC帧长度域;
计数器模块cnt1024,用于对输入数据进行计数,并根据帧长捕捉模块length_cap得到的MAC帧长域判断当前帧保存操作结束;
1k字节同步双口SRAM模块,用于保存接收的数据;
读地址控制与显示模块addr,根据地址的产生规则产生地址并显示于数码管;
最后是异步信号处理模块sig_sync,用于处理异步单比特输入信号。
电路的功能框图如下图1.2所示。
在图1.2中,模块data_sync只接收一帧数据,接收的机制是这样的:
当电路收到启动命令(rxstart)之后开始接收数据,完成当前帧接收之后cnt1536模块会给出接收完成信号rx_ok,在data_sync模块中用该信号上升沿相位关闭接收模块,等待下一次接收启动命令,如此循环。
帧头定位如1.2节所示,利用移位寄存器的机制进行帧头锁定和16比特数据的恢复。
该模块给出16比特MAC数据、帧定位信息、有效数据指示信号等。
模块length_cap主要完成输入MAC帧中的帧长度域数据的锁存,根据IEEE802.3标准中的帧结构,帧长度域位于第12个字节,16比特计数器应计到5就可以锁存该域数据,并送到模块cnt1024中用于产生rxok信号。
模块cnt1536是计数器(实际MAC帧长小于1536,这里只锁存ping命令产生的ICMP包),该计数器由帧头信号frm作为初始化信号;
由有效数据指示信号rxdf作为计数对象;
当计数值为6时(对应MAC帧中的长度域L/T)输出1比特高电平脉冲用于长度域捕捉;
当计数值到达长度域数值后,计数停止,给出接收完成指示信号rxok;
计数值作为写入数据的地址输出
模块dpsram是双口同步SRAM,用于数据存储、时钟阈之间的变换。
如图1.2,dpsram左侧为线路时钟域;
右侧为系统时钟域。
模块add_gen用于产生读取存储SRAM的地址。
地址产生有4钟机制:
复位时为0;
从任意值开始加1递增,直至0x3ff;
从任意值逐一递减,直至0;
或者设定为0-0x3ff之间的任意值。
最后需要将当前的地址译码驱动7段数码管显示。
1.5验证方案
设计的验证主要有两方面的内容:
一是代码输入过程中的仿真验证;
二是在硬件电路板上的验证。
仿真的验证比较简单,一方面构造MII接口的数据流,需要注意的是构造不同前导码相位的输入码流;
另一方面模拟读取地址产生的各种信号,在这些输入的基础上查看sram的内容、输出信号的波形等。
板级验证需要连接电脑网卡,用ping命令发送数据包,利用各种地址产生的方式读取存在电路中的数据,在LED上即可看到各字段的信息以及相对应的位置地址,对照标准,即可得知接收的数据是否正确。
2模块设计
由图1.2可见,设计共有5个功能模块,分别是数据同步与恢复模块data_sync、计数模块cnt1536、长度域锁存模块length_cap、双端口SRAM模块dpsram、地址产生模块addr_gen。
这里对模块的详细功能和时序关系进行细致说明。
2.1数据同步与恢复模块data_sync设计
输入数据同步与恢复电路模块data_sync主要完成帧头提取、数据结构恢复、数据变换的功能,具体如下。
1)当接收使能脉冲rxstart有效时启动数据接收,接收完成信号rxok有效后关闭接收功能,等待下一次接收使能脉冲rxstart的到来。
2)检测到帧头之后给出1比特指示信号,最少先于MAC数据一个时钟周期。
3)恢复数据16比特,持续4个时钟周期;
目的MAC地址(mac数据)作为第一个有效数据传送。
4)恢复的并行数据伴有1比特指示信号,指示信号位于4个时钟周期并行数据的第一个周期。
5)输入数据可为2.5M,也可为25M,线路时钟与之同步。
本模块的接口信号如下表2.1所示。
数据同步与恢复电路模块data_sync的RTL级电路如下图2.1所示。
图中首先处理接收使能信号,当使能信号有效时才进行数据处理。
使能信号的产生机制是这样的:
设计为了便于验证,每次接收只保存一个数据包,因此接收之前都要手动启动一次,接收使能信号有效时间就是人工手动启动接收到当前帧接收完成,等待下一次接收启动信号后再产生有效信号。
MII接口输入数据送入5级移位寄存器,保存的数据如图1.1所示。
每次移位操作之后都要在锁存的20比特中搜寻16比特帧头图样,分别为sr[15:
0]~sr[18:
3],sr[19:
4]应该在sr[15:
0]时捕获,如下图所示,产生信号frma~frmd。
当frma~frmd中有一个信号有效,表明该信号对应的相位是后续数据的相位,据此即可以恢复正确数据。
比如数据sr[15:
0]中检测到帧头数据,则信号frmd会有脉冲出现,据此生成数据选择信号sel=2’b00,从锁存数据中选择sr[19:
4](sr[15:
0]下一个时钟周期的数据);
若数据sr[18:
3]中检测到帧头数据,则信号frma会有脉冲出现,据此生成数据选择信号sel=2’b11,从锁存数据中选择sr[22:
7](sr[18:
3]下一个时钟周期的数据);
其余数据也如此恢复。
数据的指示信号直接根据帧头信号将时钟4分频即可。
2.2计数模块cnt1536设计
该模块用于产生输入MAC帧的数据定位信息以及输入数据向双口SRAM写入时的地址。
主要的功能如下:
1)计数器由clr信号同步清零,该信号来自帧头指示信号。
2)每一次计数使能信号到来,计数器加一计数,使之和输入数据顺序相对应;
使能信号来自四个时钟来一次的数据指示信号。
3)计数值为6时,输出1bit高脉冲,用于锁存MAC中长度/类型域;
4)当计数值等于从长度域中得到的长度值时,计数器停止,并给出接收完成信号rxok。
该模块的功能比较简单,需要注意的是当初始化之后,输入的长度数据值为零,数据需要计到6才会将该数值取到,这期间要保证计数器正常工作;
另外,电路工作的过程当中,有可能发生使能信号不足6个,这时也应保证电路下一次数据到来之时正常工作。
cnt1536模块的接口信号如下表2.2所示。
2.3地址产生模块add_gen设计
地址产生模块add_gen主要用来产生对双口同步SRAM的读操作信号和相应的地址数据,并将当前的读操作地址显示在7段数码管中。
需要注意的是很多信号来自按钮或者拨挡开关,与接收时钟异步。
具体如下。
1)当异步信号add_rst到来之后,检测上升沿并用之同步清零地址。
2)当异步信号add_swc到来之后,检测上升沿并用之同步锁存add_sw[15:
0]的数据到输出地址addr,并产生1bit高脉冲信号作为读信号rd,注意与地址addr相位同步。
3)当异步信号add_inc到来之后,检测上升沿并用之对计数器进行累加操作,输出地址addr,并产生1bit高脉冲信号作为读信号rd,与地址addr相位同步。
4)当异步信号add_dec到来之后,检测上升沿并用之对计数器进行递减操作,输出地址addr,并产生1bit高脉冲信号作为读信号rd,与地址addr相位同步。
5)7段数码管的显示机制是这样的:
共有8个7段数码管由3bit选择信号进行扫描选择,显示的时候,不进行bcd码变换,每个数码管完成4bit数据的显示:
1010~1111可分别由A/B/C/D表示,其中B与数码8显示相同,可用附加P段(小数点)以示区别;
D与数码0显示相同,同样附加P段。
本模块的接口信号如下表2.3所示。
地址产生模块add_gen主要处理3方面的内容:
将输入的异步信号同步化并产生有效的操作信号;
根据控制信号对地址进行累加、递减、复位、载入等操作并相应产生操作信号;
对地址数据进行变换使之能够在7段数码管上显示。
电路图如下所示。
在上图中,首先对输入的异步信号进行同步化处理,然后利用其上升沿产生1bit的控制信号。
注意的是拨挡开关产生的地址不用同步化,在实际操作中应该首先将拨挡开关的位置确定好,然后按下载入按钮add_swc,因此只需同步载入控制信号即可。
地址操作功能如下流程图所示。
地址数据产生之后进行数码管显示:
利用扫描的方式进行数码管选择并将各数据位不经BCD变换的显示出来。
2.4长度锁存模块length_cap设计
长度锁存模块length_cap只完成MAC帧中长度/类型域的锁定数据保存。
该模块需要和帧信息计数定位模块协调相位。
当MAC帧中L/T域到来时,依据信号cnt6指示的相位将数据保存下来。
本模块的接口信号如下表2.4所示
该模块的数据与信号的相位关系如下图所示。
3代码输入与仿真
3.1HDL代码输入
电路设计完成后,就要进入EDA设计流程,首先进行电路设计HDL输入。
设计共有五个子模块和一个顶层模块,另外还有测试代码。
电路HDL代码输入仅是对前述电路设计的描述,相对较简单:
根据1.3节的电路接口和1.4节的电路功能框图进行顶层代码的输入;
根据第2章模块设计的内容及其中的RTL电路图进行模块代码的输入;
其中双口同步SRAM采用FPGA的分布SRAM块,在HDL描述时只采用cycleII器件的功能和时序模型。
测试代码本章会详细介绍。
所有代码清单见附录。
3.2仿真与测试的功能列表
功能验证分为两部分,一部分是电路功能与时序的软件仿真,采用Moldsim完成,这是本章主要内容;
另一部分是将配置文件下载后在开发板上对设计进行测试,通过开关、按键、LED、数码管以及示波器、逻辑分析仪等方式进行。
功能仿真主要的工作就是模拟外部输入的信号,根据电路需要完成的功能来构造输入激励。
设计中需要检查的功能如下,在仿真中需要加载相应的激励来验证设计是否符合要求。
1)全局异步复位功能——当复位信号低有效时,电路应处于复位状态:
任何输入没有响应、任何触发器的输出均为初始态,SRAM的输出为不定态;
当复位信号变为高电平时,电路正常工作。
2)时钟信号——电路具有两个工作时钟,MII接口信号的处理与向双口同步SRAM写入采用的是线路时钟clkl;
读取SRAM数据的相关电路采用的时钟为系统时钟clks。
当该时钟无效时,与之相关的电路处于静止状态,输出不发生变化;
时钟有效后相应的电路才会正常工作。
3)接收MII数据功能——MII数据流中MAC数据起始比特可能位于4比特任何一位,因此要构造至少4帧输入数据,覆盖MAC数据不相同的起始位。
4)接收启动功能——每次接收一帧MAC数据之前都要启动接收功能,接收完成之后电路会等待启动信号到来之后才会进行下一帧的接收;
该信号由按钮给出,因此相对于时钟相位是任意的。
5)MAC帧L/T(长度/类型)域锁定功能——电路具有从输入数据中捕捉提取L/T域的功能,该域的信息体现在同步SRAM存储的数据深度与输入数据中长度域数值一致;
因此激励应尽可能多覆盖不同的长度域。
6)错误帧的摒弃功能——当接收功能启动后,如果数据的长度域与真实的输入数据长度不一致,或者捕捉到一个错误的帧头,当前帧会丢弃掉,直到接收到下一个有效的正确数据包。
7)读取同步SRAM数据的地址同步复位——每一次输入复位信号后,地址都应该被复位;
该信号应该是脉冲有效(上升沿)。
8)读取同步SRAM数据的地址手工设定——设定固定地址add_sw之后,地址载入控制信号add_swc有效,该设定地址的数据就应该被读取出来。
9)读取同步SRAM数据的地址递增控制——从任何地址开始,都可控制地址逐一递增,至0x3ff之后会回到0;
每递增一次,相应地址的数据就应该被读取出来。
10)读取同步SRAM数据的地址递减控制——从任何地址开始,都可控制地址逐一递减,至0后后会回到0x3ff;
每递减操作一次,相应地址的数据就应该被读取出来。
11)输入与保存数据的LED显示功能——每读一次特定地址的数据,LED应该显示相应的数据,数据比特为1时灯被点亮;
读取的地址与输入数据的顺序上一致的,因此从激励中可知该数据是否正确接收或者保存。
12)读地址的7段数码管显示功能——每对地址进行一次操作(复位/递增/递减/载入),该地址应在7段数码管显示;
显示时并不进行BCD码的变换,000~1001正常显示,1010~1111采用字母A/B/C/D/E/F的方式显示,其中B/D(1011/1101)与8/0(1000/0000)显示是相同的,为了区别,显示B/D时将P段(小数点)点亮;
16位地址分为4个数码管显示,每个数码管表达4比特数值(000~1111),采用扫描的方式进行显示。
3.3仿真平台构建
仿真激励的构造只要针对需要验证的功能即可。
这里构造一个测试平台,相应文件为frm_align_tb.v,其中将位于文件frm_align_stim.v中的激励信号引入,加载到例化的功能模块中;
由于时间限制,这里采用查看波形的方式确认输出。
这里激励主要有以下的内容构成:
一是MII输入数据,其中包括不同起始位的帧、不同L/T域的帧、会引起误定位的帧等。
二是两个时钟信号、一个异步复位信号。
三是接收控制信号,尽可能覆盖不同的输入相位(因为是仿真,无法做到与时钟冲突)。
四是各种读取地址的产生,包括同步复位、递增控制、递减控制、固定地址载入。
需要查看波形的功能有以下内容:
一是异步复位与时钟功能,当没有输入时钟时所有电路处于静止状态;
无论是否有时钟,异步复位都会有效。
二是接收数据的恢复,正常输出应该有正确的帧定位信号、16比特结构化数据、并行数据的指示信号、接收完成信号,以及各信号的相位关系。
三是接收数据的保存,主要是SRAM的写有效信号、地址信号、数据信号,及其相位关系。
四是读SRAM的地址与读信号的产生,主要查看数据/地址/度信号/控制信号的数据及其关系。
五是数码管对地址的显示。
3.4电路功能仿真结果
首先仿真最重要的功能数据恢复,输入激励为不同起始bit位的码流,其中L/T域数值也不同。
这里每次接收都将接收启动信号有效。
图3.1a起始位为第1位数据恢复仿真
图3.1b起始位为第2位数据恢复仿真
3.1c起始位为第3位数据恢复仿真
图3.1d起始位为第4位数据恢复仿真
由图中的移位寄存器内容可见,4个输入数据包起始位从0到3,检测到的帧头信号分别为frm0/frm1/frm2/frm3,恢复的数据为16比特。
其次仿真数据的存储,地址信号、数据信号、控制位的数据应该和MII的数据顺序一致。
至此,电路的功能仿真已经完成,由上述结果可以看出,设计的功能、信号相位、状态切换均达到设计要求。
注意的是异步信号在仿真时无法构造与时钟冲突的时序(建立时间或者是保持时间不足,那样会导致仿真器将未知信号值向下游传递),只能构造不同相位的模拟。
因为仿真时可以捕捉到设计的所有内部信号,严格追踪每一个信号的输入输出,因此结合电路理论上完全可以保证设计的正确性。
但是一方面较难真正构造覆盖所有情况的激励,另一方面在测试考虑的时候难免会有遗漏,因此还要借助硬件的板级验证来最终确认设计的正确性。
3.5电路后仿真结果
电路的后仿真是要在布线完成之后,生成电路网表的仿真模型和标准延时文件,再在仿真器中进行仿真的方法,主要为了查看时序是否满足要求。
这部分工作只简单进行了一下:
将功能仿真的激励施加到网表中,加载延时文件,得到的结果同上面的功能仿真是一样的。
而且设计过程中又进行了静态时序分析.
结论
本次设计经过仿真与板级的验证,可以正常工作,达到了设计的任务书要求。
但是由于设计内容较为简单,实用性稍差,无法实现真正的数据接收。
因此如果有机会应该将其扩展,采用SoPC的模式,将该接口模块做成一个IP,挂接到CPU上,利用软件解析收到的数据包,并应用来网络协议进行解析和处理,实现真正的通信,这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 报告 以太网 检测 电路设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)