7天内完成基础USB开发(2)——Pionway SDK简介

Pionway SDK是为了解决现有开发平台的种种局限性而开发出的新一代的专用USB快速开发软件套件。为用户在FPGA与计算机之间建立一个灵活便捷的基于USB接口的数据传输通道。

Pionway SDK 框图

 

Pionway SDK主要由三部分组成:运行在上位机上面的API、运行在USB接口芯片内部的固件程序和运行在FPGA上面的IP cores。

Pionway API简介:

专门为Pionway FPGA模块设计的上位机应用程序编程接口,它提供了用于上位机与Pionway HDL通信的基本函数及一些基本的系统配置函数,用户软件通过调用这些函数可以很轻松地跟Pionway FPGA模块中的FPGA实现通信。用户可以在Windows平台使用Pionway API,目前支持的语言为C和C++。另外,用户也可以利用第三方软件,如Matlab或者LabVIEW调用Pionway的动态链接库(DLL)。

Pionway 固件简介:

运行在Pionway FPGA模块的USB微控制器上,为系统内置程序,它提供FPGA与PC之间的通信管道。

Pionway HDL简介:

建立在FPGA端的若干HDL模块,它使FPGA能与USB微控制器进行通信,并为用户提供编程接口。它由Host Interface和Endpoint等模块组成。


Pionway SDK使用简介:

Pionway SDK的主要作用是在Pionway FPGA模块与PC之间建立一个便利且有效的数据通道,用户可以很容易地将现有的或新的FPGA设计与其建立连接。更重要的是,Pionway SDK使用户不需要考虑物理接口(USB)部分的具体实现,这在很大程度上减少了用户在产品开发过程中的风险和时间。

Pionway SDK在用户的FPGA设计中引入了“Endpoint”的概念。一个Endpoint是FPGA中的一串内部互连,它以某种方式从或向PC传输数据。在很多情况下,Endpoint可以通过用户想要传输的现有信号创建。对于其它情况,用户需要为了实现特定的数据传输而创建Endpoint。

Endpoint简介:

在Pionway HDL中,Endpoint可以是Wire、Trigger或Pipe,并且数据传输方向可以是In或Out。通过定义,数据传输方向是以FPGA为视角,所有向用户设计输入数据的Endpoint都是In方向,而所有由用户设计输出数据的Endpoint都是Out方向。在一个设计中,所有的Endpoint都是使用Pionway HDL库来实例化,并且共用一个Host Interface。

下图是一个FPGA示例程序的结构框图。pwHost连接到一些FPGA的外部引脚以及一条被所有Endpoint共享的总线。这条总线提供了所有Endpoint与Host Interface之间的数据传输通道。

Pionway HDL Endpoint 使用示例

每个Endpoint的实例都有一个关联的地址(括号中所示),从而能够独立于其它Endpoint被访问。在这个示例中,两个Wire In Endpoint用于系统的配置,两个Wire Out Endpoint用于向PC传回状态信息,一个Trigger In Endpoint用于启动状态机,一个 Trigger Out Endpoint用于指示状态机的完成,一个Pipe In Endpoint用于向FPGA导入数据。

Endpoint

类型

同步/异步

描述

Wire In

异步

PC向用户HDL输入一个信号状态。

(例如:虚拟按钮或开关)

Wire Out

异步

用户HDL向PC输出一个信号状态。

(例如:虚拟LED或数码管的显示)

Trigger In

同步

PC向用户HDL输入一个可以和特定时钟同相的单脉冲信号。

(例如:用于启动状态机的按钮)

Trigger Out

同步

用户HDL通知PC有一个特定的事件发生。

(例如:状态机发出Done信号后PC上弹出窗口告知用户可以开始数据传输)

Pipe In

同步

PC向用户HDL输入批量数据。

(例如:存储器的数据下载,流数据)

Pipe Out

同步

用户HDL向PC输出批量数据。

(例如:存储器的数据上传,读取计算结果)


Pionway API使用介绍:

Pionway API包含了能通过USB接口实现通信的函数,这些函数经过特别设计,仅适用于Pionway FPGA模块,并且用于与模块中的FPGA建立连接。Pionway API还提供了一些函数,用于与Pionway HDL模块(Wire,Trigger,Pipe)直接建立连接。这样的抽象化,虽然牺牲了硬件接口的一些灵活性,却为Pionway软件带来了很大的灵活性和便利性,从而可以在很大程度上减少用户的产品开发周期(使用户软件与FPGA建立连接的开发时间以及相关知识的学习时间)。

Pionway API以动态链接库(DLL)形式提供,用户可以在Windows平台使用,并且支持C和C++。

设备交互API:

这些函数提供了查找所有已连接的Pionway设备的方法,查询每个设备的特定信息,并最终打开某个特定设备用于通信。

函数名称

描述

GetDeviceCount

获取已连接的Pionway设备数量,包括未打开的所有设备。

GetDeviceListModel

获取一个已连接的Pionway设备的型号。

GetDeviceListSerial

获取一个已连接的Pionway设备的序列号。

OpenBySerial

打开一个特定序列号的Pionway设备用于通信。

GetDeviceInfo

获取一个已连接的Pionway设备的所有信息,包括设备ID,设备序列号,产品型号等。

Close

关闭一个Pionway设备

IsOpen

查询Pionway设备的打开情况

 

设备配置API:

一旦一个可用设备已被打开,这些函数可用于配置设备的相关特性

函数名称

描述

SetDeviceID

允许用户设置设备ID。

ConfigureFPGA

下载配置文件到FPGA。

FlashEraseSector

擦除用户Flash中的一个扇区。

FlashWrite

向用户Flash写入数据。

FlashRead

从用户Flash读取数据。

FX3FirmwareUpdate

更新Pionway固件

 

FPGA通信API:

一旦FPGA已被配置,应用程序和FPGA之间的通信将通过一些函数完成。FPGA与Pionway设备上的USB微控制器直接连接。这些函数通过该连接进行通信,并要求在配置FPGA时实例化Pionway HDL模块pwHost。

函数名称

描述

IsPionwayEnabled

检查pwHost是否在FPGA配置中已被实例化。

ResetFPGA

通过Host Interface向FPGA发送一个复位信号。用于复位Host Interface或Endpoint,也可用于复位用户硬件。要求实例化Host Interface。

SetTimeout

设置USB超时时间(毫秒)。

UpdateWireIns

同时更新所有Wire In的值(PC向FPGA)。

SetWireInValue

设置一个Wire In的值。需要后续调用UpdateWireIns。

GetWireInValue

获取一个Wire In的值。

UpdateWireOuts

同时获取所有Wire Out的值(FPGA向PC)并在内部存储这些值。

GetWireOutValue

获取一个Wire Out的值。需要在之前调用UpdateWireOuts。

ActivateTriggerIn

触发某个特定的Trigger In(PC向FPGA)。

UpdateTriggerOuts

同时获取所有Trigger Out的值(FPGA向PC)并记录被触发的Trigger Out(自从上次查询开始)。

IsTriggered

查询一个Trigger Out是否被触发(自上次调用UpdateTriggerOuts起)。

WriteToPipeIn

向Pipe In写入数据(字节数组)。

ReadFromPipeOut

从Pipe Out读取数据(字节数组)。


Pionway HDL使用介绍:

使用Pionway API与FPGA通信,需要在您的顶层HDL实例化至少一个Pionway HDL模块。这些模块可以方便快捷地加入到现有的或新的设计中,并负责处理它与Pionway API通信的复杂工作。

Host Interface是使USB微控制器能与FPGA中的各种Endpoint实现通信的模块。FPGA中的一些引脚与USB微控制器连接,而Host Interface则直接与这些引脚连接。它是Pionway API到用户设计的入口点。

Endpoint通过一条共享的控制总线与Host Interface连接。这条内部总线用于将所有来自和去往(即In和Out)Host Interface的Endpoint连接在一起。Pionway API通过Endpoint的地址来选择与之通信的Endpoint,因此,每个Endpoint必须拥有自己唯一的地址才能正常工作。

猜你喜欢

转载自blog.csdn.net/pionway/article/details/54430121