实验背景
在(五)中介绍了Github开源项目verilog-ethernet移植过程中的数据跨时钟域传输,以太网数据传输过程和网络层数据传输,现在介绍传输层数据传输,时钟模块,复位模块,时序约束,板级验证等内容。
实验内容
介绍传输层数据传输,时钟模块,复位模块,时序约束,板级验证等内容。
实验步骤
传输层协议使用UDP协议,UDP协议数据包结构如下:
对应的模块如下:
该模块端口如下:
在端口中可以看到UDP数据包中的源端口,目的端口,长度,校验和等信号。
创建顶层模块,如下:
将目的mac地址,源mac地址,协议类型,目的IP地址,源IP地址等设置为定值,可根据实际需要进行设置。
对应顶层的RTL视图如下:
对该顶层模块进行仿真,仿真文件如下:
仿真过程如下,首先传输首部信息
接着传输20字节有效数据
有效数据发送仿真波形如下:
mii_tx发送前导码,帧间隔符,以及帧头信息波形如下:
mii_tx发送数据如下:
至此,传输层数据封装过程分析完成。
下面创建顶层文件,该顶层文件的功能是通过UDP协议栈连续向上位机传输ABCDEFGHIJKLMNOPQRST共20个字母的ASCII码,部分代码如下:
PLL模块,产生100M时钟作为系统内部时钟
将PLL模块的pll_locked信号作为复位信号,进行同步处理,关于异步复位,同步释放处理的内容,可以参看如下文章:
http://xilinx.eetrend.com/blog/2021/100062600.html
这里需要指出的是,对Xilinx FPGA来说,同步处理后的复位信号被用作同步复位(表述不太准确),在WP272文档中由如下介绍:
而Intel(Altera)FPGA推荐将同步处理后的复位信号作为异步复位使用,且推荐使用低电平复位,在《ug-qps-design-recommendations》文档中有如下代码:
由于verilog-ethernet项目中的模块均使用同步复位,且复位高电平有效,所以这里将同步后的复位信号作为同步复位,且高电平有效。
使用一个状态机来连续发送ABCDEFGHIJKLMNOPQRST共20个字母的ASCII码,部分代码如下:
RTL视图如下:
对顶层模块进行仿真,
波形如下:
连续向上位机发送数据仿真正确。
下面对工程进行约束,包括物理约束和时序约束,这里介绍时序约束,
创建SDC文件,首先是主时钟(Primary clock),分为FPGA外部晶振输入的50MHz, PHY芯片输入的25MHz mii_tx_clk时钟
然后是PLL输出时钟
接下来是mii接口信号,由于这里只使用FPGA通过PHY向外部发送数据,所以只使用了发送数据相关的引脚,即mii_tx_clk, mii_txd[3:0], mii_tx_en,以及rst_n信号。
下面设置输出端口约束,模型如下:
该模型摘自Intel官方文档《ug-qpp-timing-analyzer》。
其中dd表示数据信号在FPGA与下游器件(这里是PHY芯片)之间PCB走线延时,cd_altr表示从Oscillator发出的时钟信号到FPGA之间的PCB走线延时,cd_ext表示从Oscillator发出的时钟信号到下游芯片之间的PCB走线延时,tsu_ext是下游器件接收数据时的建立时间。可以看到dd,cd_altr,cd_ext均与PCB走线有关,具体的计算方法可以参考特权同学的博文《特权和你一起学NIOS2 第五章 实战演练之时序收敛》
http://blog.chinaaet.com/ilove314/c/267
由于试验的板子是开发板,没有对应的PCB文件,这里就认为dd的最大值ddmax为1.5 ns, ddmin为1ns。
对于MII接口来说,mii_tx_clk由PHY芯片发出,所以这里cd_ext为0 ns,假设这里cd_altr最大值为1.2 ns,最小值为0.6 ns。现在查阅PHY芯片手册来确定tsu_ext与th_ext,PHY芯片为RTL8201CP,对应的信息如下:
tsu_ext为24 ns,th_ext为10 ns。
计算得到
output_delay_max = 1.5 ns + 24 ns + (1.2 – 0) ns = 26.7 ns
output_delay_min = 1 ns + 10 ns + (0.6 – 0 ) ns = 11.6 ns
对应的约束命令如下:
按照同样的方法可以计算mii_tx_en信号的输出约束,如下:
由于mii_tx_clk与clk_50M不相关,需要进行约束,如下:
下面进行时序例外分析
此外,项目中用到了async_fifo进行跨时钟域处理,以及复位信号同步处理模块,verilog-ethernet项目中提供了对应的约束,移植如下:
这里需要注意的一点是,SDC文件中source命令的起始路径是工程文件.qfp文件的路径,以这个路径为起始路径去指定其他的的sdc文件路径。对工程进行全编译,查看报告
建立时间和保持时间slack均为正值,
下面进行板级验证,设定上位机(电脑)IP地址如下:
使用wireshark工具进行抓包,如下:
可以看到IP地址,端口号等信息与设置值移植,使用网络调试助手接收数据如下,与wireshark中抓包有效数据一致。
在这里插入图片描述
至此,移植过程基本结束。后续会介绍verilog-ethernet项目中个模块的实现,以及约束文件的编写。