行情
HOME
行情
正文内容
zynq nand 扩展 万兆网UDPTCP网络加速IP
发布时间 : 2024-10-05
作者 : 小编
访问数量 : 23
扫码分享至微信

万兆网UDPTCP网络加速IP

10G 全硬件UDP/TCP 网络加速协议栈是一款低资源、高灵活性的网络加速IP,采用FPGA内部逻辑为客户实现高速传输,网络数据采集、存储提供相应的网络协议栈加速。该IP无需CPU参与,解决了高速网络数据环境下由于CPU中断过多、负载过大与多并发等造成的数据处理与传输的设计困难。

IP采用全硬件流水线化设计,采用AXIS-Stream做为数据接口,可通过AXIS-Interconnect单元快速实现任意多路的点对点/组播/广播的数据发送与接受。

IP针对Xilinx的相应系列器件进行了深度优化,大幅减小了所需资源,并根据客户的使用场景,提供了灵活的接口,以便于客户的快速集成与使用。

根据行业软硬结合的发展趋势,创新性的采样Filter+旁路的相应模式,并扩展出三种应用模型:

1

可作为无CPU,纯FPGA逻辑下的Udp数据收发协议栈。

2

使处理器与FPGA可同时使用单一网络接口进行数据收发,同时可过滤FPGA测高速,密集的数据流,大幅降低CPU负载,而FPGA测也通过处理器测的扩展,使其应用变得更为灵活,保留了处理器与FPGA对于网络数据处理的各自优越性。客户可使用FPGA内通道进行相对固定应用模式的高速数据收发/处理,同时可使用处理器进行相对低速,但复杂的应用协议开发,并可将本地PL测如端口,地址,路由等的管理任务交由处理器管理。

3

由于采用了axis总线,客户亦可结合DMA模型,将该协议栈作为网络协议加速器,使处理器对于相关Udp/Tcp协议打包与解析的操作于FPGA内部完成,此种应用模型下客户本地处理器应用的网络数据收发将转化为简单而高效的内存DMA操作,大幅提升原有处理器网络性能,使得其突破本身单处理器模型下的应用瓶颈。

产品特性:

灵活性:支持无CPU,协同CPU,网络加速器三种应用模型

支持协议:IPv4, UDP, ARP (for Request and Reply), ICMP,TCP

协同处理器:可配合Xilinx Zynq系列扩展完整的Linux网络协议栈(Zynq7000系列速率1Gbps,Zynq MP 2Gbps),配合使用,提供更为强大的灵活性。

兼容AXI-S总线协议:可通过AXIS-INTERCONNECT 任意扩展连接数目

支持组播模式

兼容AXI总线

支持巨大帧

支持用户模式的ARP管理,客户可根据需求扩展

快速项目集成

少量资源,无器件限制

可根据需求,选择TCP或UDP协议栈独立使用

结构框图:

「正点原子FPGA连载」第十五章AXI4接口之DDR读写实验

1)摘自【正点原子】领航者 ZYNQ 之嵌入式开发指南

2)实验平台:正点原子领航者ZYNQ开发板3)平台购买地址:https://item.taobao.com/item.htm?&id=6061601087614)全套实验源码+手册+视频下载:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)对正点原子FPGA感兴趣的同学可以加群讨论:8767449006)关注正点原子公众号,获取最新资料

第十五章AXI4接口之DDR读写实验

Xilinx从Spartan-6和Virtex-6系列开始使用AXI协议来连接IP核。在7系列和ZYNQ-7000 AP SoC器件中,Xilinx在IP核中继续使用AXI协议。本章我们对AXI协议作一个简单介绍,并在Vivado中实现一个AXI4接口的IP核,用于对ZYNQ PS端的DDR3进行读写测试。本章包括以下几个部分:1515.1简介15.2实验任务15.3硬件设计15.4软件设计15.5下载验证15.1简介ZYNQ将高性能ARM Cotex-A系列处理器与高性能FPGA在单芯片内紧密结合,为设计带来了如减小体积和功耗、降低设计风险,增加设计灵活性等诸多优点。在将不同工艺特征的处理器与FPGA融合在一个芯片上之后,片内处理器与FPGA之间的互联通路就成了ZYNQ芯片设计的重中之重。如果Cotex-A9与FPGA之间的数据交互成为瓶颈,那么处理器与FPGA结合的性能优势就不能发挥出来。我们在前面的实验中介绍了一些ZYNQ PS与PL交互所使用的接口,比如《EMIO按键控制LED实验》中的EMIO,以及《AXI GPIO按键控制LED实验》中的AXI4-Lite接口等。其中AXI4-Lite接口属于AXI4总线协议,接下来我们将对该协议作一个更具体的介绍。AXI的英文全称是Advanced eXtensible Interface,即高级可扩展接口,它是ARM公司所提出的AMBA(Advanced Microcontroller Bus Architecture)协议的一部分。在介绍AXI协议之前,我们首先要对通信协议有一个基本的概念。简单来说,通信协议就是指双方进行信息传递所遵循的规则和约定。其实在我们的生活当中,比如在打电话的时候,就遵循着一些基本的“通信协议”。为了更形象的说明这一概念,我们首先来看一个通话记录:《少林寺的通话记录》

老方丈:下午张三丰和灭绝师太要来参观,你去机场接一下,我把他俩手机号给你 //主机发送控制信号小和尚:好的,稍等,我找张纸记一下。老方丈:嗯。 //主机等待小和尚:我准备好了,您说吧。 //从机返回Ready信号 老方丈:张三丰的是“123-321-34567”,灭绝师太的是“123-456-56789”。 //主机突发传输数据小和尚:记下来了。 //从机返回响应信号上面的通话记录是一次完整的通信过程,传输的信息是两个手机号。我们把“老方丈”当成主机,“小和尚”当成从机,那么这一通信过程由主机发起,最终向从机写入两组数据(手机号)。我们需要注意的是整个过程中二者的协调配合:为了确保数据传输无误,主机需要等从机准备好之后才能发送数据;另外从机在接收数据完成后,会发送响应信号,表示传输完成。然后再来看另外一个通话记录:《武当山的通话记录》张三丰:下午我要去趟少林寺,你把方丈的手机号找给我 //主机发送控制信号小道士:找到了,188-666…… //从机返回有效数据张三丰:等一下,我找支笔。好了,你说吧 //主机发送Ready信号小道士:188-666-66666,念完了 //从机返回有效数据,以及响应信号 张三丰:好的。 在武当山的通话记录中,张三丰是主机,小道士是从机。通信过程同样是由主机发起,向从机请求数据。主机准备好之后发送Ready信号,接下来从机开始发送数据。从机在数据发送完成后给出响应信号,表明本次传输结束。对比上述两个通话记录可以发现,少林寺的通话是一次主机向从机写数据的过程,而武当山的通话则是主机向从机读数据的过程。在通信过程中,主从之间会进行协调,只有等接收方准备好之后,才能开始数据传输,这种机制我们称之为“握手”。在打电话的时候,通话双方能够理解彼此的语言,进而从中筛选有效信息。而在数字电路中,通信双方就没有那么智能了,主设备和从设备需要按照约定好的数据传输方式来发送和接收数据。AXI协议就是描述了主设备和从设备之间的数据传输方式,在该协议中,主设备和从设备之间通过握手信号建立连接。AXI协议是一种高性能、高带宽、低延迟的片内总线,具有如下特点: 1、总线的地址/控制和数据通道是分离的;2、支持不对齐的数据传输;3、支持突发传输,突发传输过程中只需要首地址;4、具有分离的读/写数据通道;5、支持显著传输访问和乱序访问;6、更加容易进行时序收敛。在数字电路中只能传输二进制数0和1,因此可能需要一组信号才能高效地传输信息,这一组信号就组成了接口。AXI4协议支持以下三种类型的接口:1、AXI4:高性能存储映射接口。2、AXI4-Lite:简化版的AXI4接口,用于较少数据量的存储映射通信。3、AXI4-Stream:用于高速数据流传输,非存储映射接口。 在这里我们首先解释一下存储映射(Meamory Map)这一概念。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。AXI4协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI-Lite为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而AXI-Stream接口则像FIFO一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速AD、PCIe、DMA接口等需要高速数据传输的场合。在本章我们重点介绍AXI4接口,它由五个独立的通道构成:1、读地址2、读数据3、写地址4、写数据5、写响应下面是使用读地址和读数据通道实现读传输过程的示意图:

图 15.1.1 读传输过程示意图从图 2.1.1中可以看到,在一个读传输过程中,主机首先在读地址通道给出读地址和控制信号,然后从机由读数据通道返回读出的数据。另外我们需要注意的是,这是一次突发读操作,主机只给出一个地址,从该地址连续突发读出四个数据。写传输过程如图 15.1.2所示,它用到了写地址、写数据和写响应三个通道。主机在写地址通道给出写地址和控制信号,然后在写数据通道连续突发写四个数据。从机在接收数据之后,在写响应通道给出响应信号。

图 15.1.2 写传输过程示意图

AXI总线中的每个通道都包含了一组信息信号,还有一个VALID和一个READY信号。VALID信号由源端(source)产生,表示当前地址或者数据线上的信息是有效的;而READY信号由目的端(destination)产生,则表示已经准备好接收地址、数据以及控制信息。VALID和READY信号提供了AXI总线中的握手机制,如下图所示:

图 15.1.3 VALID和READY握手机制

在图 15.1.3中,ACLK为时钟信号,在AXI协议中,所有的输入信号都在是ACLK的上升沿采样,所有的输出信号必须在ACLK的上升沿之后才能改变。在T1之后,源端将VALID拉高,表明INFORMATION信号线上传输的是有效的地址、数据或者控制信息。目的端在T2之后将READY拉高,表明它已经准备好接收数据,此时源端必须保持INFORMATION数据稳定不变,直到T3时刻进行数据传输。需要注意的是,源端不允许等目的端的READY信号拉高之后,才将VALID信号置为有效状态。而且,一旦VALID拉高,源端必须保持其处于有效状态,直至成功握手(在时钟上升沿检测到VALID和READY同时为有效状态)。AXI协议的五个通道都有各自的VALID/READY握手信号对,每个通道握手信号对的名称如下图所示:

图 15.1.4 各通道握手信号名称

到这里,我们已经简单介绍了AXI4协议的读写过程,以及握手协议。关于如何实现AXI4通信协议,以及如何在设计中使用该协议进行通信,我们将硬件设计部分进行讲解。15.2实验任务本章的实验任务是通过自定义一个AXI4接口的IP核,通过AXI_HP接口对PS端DDR3进行读写测试。15.3硬件设计根据实验任务我们可以画出本次实验的系统框图,如下图所示:

图 15.3.1 系统框图在图 5.3.1中,DDR3 Test是我们自定义的IP核,具有AXI4 Master端口,该端口通过AXI Smartconnect模块,最终连接到PS端的S_AXI_HP0端口。首先创建Vivado工程,工程名为“axi4_ddr_rw”,然后创建Block Design设计(system.bd)并添加ZYNQ7 Processing System模块。接下来按照《“Hello World”实验》中的步骤2-7、2-8分别配置PS的UART和DDR控制器。需要特别注意的是,我们在《“Hello World”实验》的步骤2-10中,移除了PS中与PL端交互的接口信号,在我们本次实验中我们要保留时钟FCLK_CLK0和复位FCLK_RESET0_N信号,移除GP Master AXI Interface接口。由于本次实验用到了PS端的HP接口,因此在ZYNQ7处理系统的配置界面左侧点击“PS-PL Configuration”标签,然后在右侧界面中勾选“HP Slave AXI Interfacce”下的“S AXI HP0 Interface”,如下图所示:

图 15.3.2 MIO配置

最后点击右下角的“OK”,本次实验ZYNQ处理系统就配置完成了。ZYNQ7 PS配置完成后其接口如下图所示:

图 15.3.3 ZYNQ7模块接口

在图 5.3.4中,S_AXI_HP0是PS端的AXI高性能接口,它是一个从接口,连接到PS内的存储器互联,用于PL访问PS内的存储设备,包括OCM和DDR。在本次实验中,PS内的数据通路如图 15.3.4所示。我们在PL内自定义的DDR3 Test IP核作为主设备,通过PS AXI_HP0接口,与DDR控制器进行通信,最终对DDR3存储器进行读写操作。

图 15.3.4 PS内的数据通路

接下来我们要在Block Design中添加PL端的自定义IP核。在添加该IP之前,我们需要先自定义一个带有AXI4 Master端口的IP核,并将其添加到工程的IP库中。我们在《自定义IP核-呼吸灯实验》中介绍了如何定义一个带有AXI-Lite Slave接口的IP核,在本次实验中定义IP的方法与之相同,只是这次我们要选择AXI4 Master接口。在菜单栏中点击“Tools”,然后在下拉列表中选择“Create and Package New IP”,如下图所示:

图 15.3.5 创建IP

在弹出的对话框中直接点击“Next”,如下图所示:

图 15.3.6 创建和封装IP

在下图所示的界面中选择“Create a new AXI4 peripheral”,点击“Next”:

接下来设置IP核的名称为“PL_DDR3_TEST”,并将IP的路径修改为当前工程路径下的“ip_repo”文件夹,最后点击“Next”,如下图所示:

图 15.3.7 设置IP名称和路径

在“Add Interfaces”界面中修改接口名称为“M_AXI”,选择接口类型为“Full”,接口模式为“Master”,数据位宽为“32”。如下图所示:

图 15.3.8 自定义IP核接口配置

图 5.3.6中对IP核接口的配置与《自定义IP核——呼吸灯实验》不同,在这里我们新建的IP核作为主机(Master),除此之外我们使用的接口类型变成了AXI-Full,而不再是AXI-Lite。设置完成后点击上图中右下角的“Next”。接下来在图 15.3.9中选择“Edit IP”,最后点击“Finish”,如下图所示:

图 15.3.9 创建外设

在上图中点击“Finish”后会自动打开一个新的Vivado工程,工程名为“edit_PL_DDR3_TEST_v1_0”,如图 15.3.10所示。我们可以在这个工程中对创建的IP核——PL_DDR3_TEST进行编辑。

图 15.3.10 Edit IP工程

AXI4接口共有五个独立的通道,每个通道又有少则几个,多则十几个信号,如果让我们自己来实现这样一个接口还是比较复杂的。不过大家不用担心,我们在图 5.3.6中创建AXI4接口的IP时,Vivado提供的IP封装工具已经自动帮我们实现了这样一个接口,并提供了一个示例程序。在图 15.3.10中,箭头所指示的文件实现了AXI4协议下的读写测试模块,我们甚至都不用对代码作任何修改,即可实现对DDR的读写测试功能。虽然该模块的代码看上去比较长(900多行),但是大多是一些注释,非常详尽。大家可以通过阅读代码及注释,来学习AXI4协议主机的实现方式。在这里我们只贴出部分代码:

735 //implement master command interface state machine 736 737 always @ ( posedge M_AXI_ACLK) 738 begin 739 if (M_AXI_ARESETN == 1'b0 ) 740 begin 741 // reset condition 742 // All the signals are assigned default values under reset condition 743 mst_exec_state <= IDLE; 744 start_single_burst_write <= 1'b0; 745 start_single_burst_read <= 1'b0; 746 compare_done <= 1'b0; 747 ERROR <= 1'b0; 748 end 749 else 750 begin 751 752 // state transition 753 case (mst_exec_state) 754 755 IDLE: 756 // This state is responsible to wait for user defined C_M_START_COUNT 上面的代码实现了一个状态机,其状态转换图如下所示:

图 15.3.11 状态转换图

系统复位后,状态机处于初始状态,在该状态下等待外部输入的启动传输脉冲init_txn_pulse。一旦检测到init_txn_pulse为高电平,状态机跳转到INIT_WRITE状态。在INIT_WRITE状态下,状态机拉高start_single_burst_write信号,来不断地启动AXI4 Master接口对Slave端大小为4KB的存储空间进行突发写操作。写操作完成后,write_done信号会拉高,状态机进入INIT_READ状态。在INIT_READ状态下,状态机拉高start_single_burst_read信号,不断地启动AXI4 Master接口对Slave端同一存储空间进行突发读操作,同时将读出的数据与写入的数据进行对比。读操作完成后,read_done信号拉高,状态机进入INIT_COMPARE状态。在INIT_COMPARE状态下,判断AXI4接口在读写过程中的是否发生错误,并将错误状态赋值给ERROR信号,然后将compare_done信号拉高,表示一次读写测试完成。最后跳转到IDLE状态,等待下一次读写操作的启动信号。我们在查看了图 15.3.10中箭头所指示的IP核源码后,不需要再对IP作任何修改,直接关闭名为edit_PL_DDR3_TEST_v1_0的工程。最终我们创建的IP核将通过AXI4 Master端口向Slave端指定的4K存储空间中连续写入1024个数据,写入的数值从1累加到1024,每个数据占32bit。IP核创建完成后,我们在工程目录下的ip_repo文件夹中可以找到IP相关的文件,如下图所示:

图 15.3.12 IP核相关的文件

需要注意的是,在图 15.3.12中我们只需要保留红色方框中的文件夹即可,其余文件及文件夹是用于对IP进行编辑的工程文件,我们可以直接删除。回到axi4_ddr_rw工程界面,在左侧“Flow Navigator”一栏点击“IP Catalog”,然后在右侧的IP目录中可以看到我们前面所创建的IP核——PL_DDR3_TEST,该IP已经自动添加到了当前工程的IP库中。

图 15.3.13 IP目录

接下来在Diagram窗口中给设计添加自定义的IP核PL_DDR3_TEST,添加完成后如下图所示:

图 15.3.14 添加PL_DDR3_TEST IP核

在图 15.3.14中,M_AXI是AXI-Full类型的主机接口,我们将通过这个接口对PS端的DDR3进行读写操作。PL_DDR3_TEST IP核在检测到m_axi_init_axi_txn端口的上升沿后会启动读写过程,并将读出的数据与写入的数据作比较,比较完成后m_axi_txn_done输出高电平。另外,在比较完成后,m_axi_error信号会指示整个过程是否出错。如果在读写过程中出错,或者在比较的过程中发现读出的数据与写入的数据不一致,那么m_axi_error将会拉高。添加完自定义IP核之后,双击该IP核对其进行配置,如下图所示:

图 15.3.15 配置PL_DDR_TEST IP核在图 15.3.15中,我们将变量C M AXI TARGET SLAVE BASE ADDR的值修改为0x1000_0000,它位于DDR3存储器的地址空间,是PL_DDR3_TEST IP核进行读写操作的起始地址。我们将该地址之前的存储空间预留下来,用于运行PS中的软件程序。接下来,我们还要添加Utility Vector Logic IP核。然后将其配置成非门,位宽为1,作为反向器使用。这是因为我们需要使用PL端的按键来作为PL_DDR_TEST IP核的启动信号,ZYNQ领航者底板上的按键在按下的时候为低电平,因此我们通过添加一个反向器,将其修改为按下时输出高电平。IP核添加完成后,使用工具的自动连接功能,对设计进行连线。并手动进行按键与反向器、PL_DDR_TEST IP核之间的连接。连接完成后,在Diagram窗口空白处右击,然后选择“Regenerate Layout”对设计进行重新布局,布局后的界面如下图所示:

图 15.3.16 重新布局后的设计界面从上图中可以看到,在执行了自动连接之后,工具自动添加了两个IP核,分别是AXI智能互联(AXI Smartconnect)和处理器系统复位(Processor System Reseet)。另外上图中3个蓝色的外部接口需要我们手动添加,其中key_init用于连接领航者底板上的按键,另外两个接口用于连接底板上的LED。图 5.3.8中橙色的连线标注出了本设计中AXI4总线的连接,其中PL_DDR3_TEST IP核的M_AXI作为主机接口,ZYNQ PS的S_AXI_HP0为从机接口,中间经过了AXI Smartconnect。AXI Smartconnect的功能与AXI Interconnect IP核类似,都是用于将AXI存储器映射的主器件连接到存储器映射的从器件。到这里我们的Block Design就设计完成了,在Diagram窗口空白处右击,然后选择“Validate Design”验证设计。验证完成后弹出对话框提示“Validation Successful”表明设计无误,点击“OK”确认。最后按快捷键“Ctrl + S”保存设计。接下来在Source窗口中右键点击Block Design设计文件“system.bd”,然后依次执行“Generate Output Products”和“Create HDL Wrapper”。在左侧Flow Navigator导航栏中找到RTL ANALYSIS,点击该选项中的“Open Elaborated Design”。然后在菜单栏中点击 Layout,在下拉列表中选择I/O Planning以打开I/O Ports窗口。我们将在 I/O Ports 窗口中对key_init等接口进行管脚分配,如下图所示:

图 15.3.17 管脚分配在图 5.3.14中,我们将key_init分配到了L20引脚上,该引脚最终与领航者ZYNQ底板上的按键PL_KEY0相连接;compare_done和error_flag分别连接到底板上的LED:PL_LED0和PL_LED1。管脚分配完成后按快捷键Ctrl+S保存管脚约束。最后在左侧Flow Navigator导航栏中找到PROGRAM AND DEBUG,点击该选项中的“Generate Bitstream”,对设计进行综合、实现、并生成Bitstream文件。在生成Bitstream之后,在菜单栏中选择 File > Export > Export hardware导出硬件,并在弹出的对话框中,勾选“Include bitstream”。然后在菜单栏选择File > Launch SDK,启动SDK软件。15.4软件设计在SDK软件中新建一个BSP工程和一个空的应用工程,应用工程名为“axi4_ddr_rw”。然后为应用工程新建一个源文件“main.c”,我们在新建的main.c文件中输入本次实验的代码。代码如下所示:

1 #include <stdio.h>2 #include "xil_cache.h"3 #include "xil_printf.h"4 #include "xil_io.h"5 6 int main()7 {8 int i;9 char c;10 11 Xil_DCacheDisable();12 print("AXI4 PL DDR TEST!\n\r");13 14 while(1){15 scanf("%c",&c);16 if(c=='c'){17 printf("start\n\r");18 for(i=0;i<4096;i=i+4){19 printf("%d is %d\n",i,(int)Xil_In32(0x10000000+i));20 }21 }22 }23 24 return 0;25 }可以看出,我们的软件程序特别简单。在代码的第14行至22行,通过一个while(1)死循环,连续判断用户输入的字符。当输入字符“c”时,程序通过一个for循环开始从地址0x1000_0000读取DDR3存储器中的数据,读取的存储空间大小为4KB。需要注意的是,变量i每次累加4,这是因为我们调用了函数Xil_In32( )来读取内存数据,每次读取32bit。而内存地址是以字节(1字节==8bit)为单位的,那么操作完成后地址应该累加4。可以看出,我们在软件中读取的内存地址与硬件设计过程中PL_DDR_TEST IP核所写入的地址是一致的。我们将软件读出的数据通过串口打印出来,与PL_DDR_TEST IP核写入的数据进行对比,即可验证我们通过AXI4接口对DDR进行的读写操作是否成功。另外,在代码的第11行,我们通过调用函数Xil_DCacheDisable( )来关闭数据缓存(Data Cache),以避免从缓存中读取数据。这是因为在对同一地址进行读操作时,读出的有可能是Data Cache中缓存的数据,而不是DDR中真正的数据。程序设计完成后,按快捷键Ctrl+S保存main.c文件,工具会自动进行编译。编译完成后控制台(Console)中会出现提示信息“Build Finished”,同时在应用工程的Binaries目录下可以看到生成的elf文件。15.5下载验证首先我们将下载器与领航者底板上的JTAG接口连接,下载器另外一端与电脑连接。然后使用Mini USB连接线将开发板左侧的USB_UART接口与电脑连接,用于串口通信。最后连接开发板的电源,并打开电源开关。在SDK软件下方的SDK Terminal窗口中点击右上角的加号设置并连接串口。然后下载本次实验硬件设计过程中所生成的BIT文件,来对PL进行配置。最后下载软件程序,下载完成后,在下方的SDK Terminal中可以看到应用程序打印的信息“AXI4 PL DDR TEST!”。然后在SDK Terminal窗口中输入字符“c”,然后点击“Send”发送。程序会打印从DDR3中读出的数据,如下图所示:

图 15.5.1 第一次从DDR3中读出的数据

如图 15.5.1所示,串口打印出了DDR3存储空间中从地址0x1000_0000开始的1024个数据,每个数据占4个字节。从图中可以看出,开发板上电后,在没对该地址空间进行写操作之前,DDR3中的数据是随机的。我们按下领航者底板上的按键PL_KEY0然后释放,该动作会启动PL_DDR3_TEST IP核对DDR3的读写操作。然后底板上的PL_LED0会点亮,表示读写操作完成。如下图所示:

图 15.5.2 领航者开发板实物图

在图 15.5.2中,如果右侧的PL_LED1也点亮了,这表明在对DDR3进行读写操作过程中出现了错误。但是这个错误指示灯点亮的原因并不唯一,通过分析PL_DDR3_TEST IP核的源码可以看出,在AXI4通信过程中写响应出错、读响应出错、以及读出与写入的数据不一致均会导致错误指示灯点亮。因此,要判断我们自定义的IP核究竟有没有成功地向DDR3指定地址中写入数据,还是要通过查看该内存空间中的数据来判断。在SDK Terminal窗口中重新输入字符“c”并发送,程序会再次打印从DDR3中读出的数据,如下图所示:

图 15.5.3 第二次从DDR3中读出的数据

从图 15.5.3中可以看出,PS端软件从DDR3中指定的4KB存储空间中读出的数据依次为1到1024,与PL_DDR3_TEST IP核写入的数据一致,说明本次实验在领航者ZYNQ开发板上面下载验证成功。

相关问答

如何看待美国赛灵思收购中国AI初创企业深鉴科技?

不过之前深鉴科技就宣布完成了数千万的A轮融资,其中赛灵思就是深鉴科技的投资方,不知道塞灵思此举,是不是有意要继续加码。不过换个方面想,这对深鉴科技来说...

如何自学stm32?

要想学好STM32,不仅仅需要学好程序设计,还要具备一定电子电路的知识,不需要太深,对上拉、下拉电阻,LED灯、三极管这些有一个基础的认识就行。其次就是要对C...S...

 克林特-卡佩拉  江恩角度线 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部