Pionway SDK是为了解决现有开发平台的种种局限性而开发出的新一代的专用USB快速开发软件套件。为用户在FPGA与计算机之间建立一个灵活便捷的基于USB接口的数据传输通道。
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之间的数据传输通道。
每个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必须拥有自己唯一的地址才能正常工作。