一种基于VC++程序的FPGA重配置方案设计
时间:04-22
来源:互联网
点击:
3 配置数据分析
本设计中的应用软件所要下载的配置数据流是由硬件设计者根据需求提供的,是以二进制形式存储的.rpd文件。可以根据不同的FPGA来选择不同的外围存储芯片 (如EPCS1,EPCS16),从而生成不同大小的配置数据流。由于软件设计中,每次下发的数据一定,所以,由数据流的大小就能决定循环发送数据的次数。
由于硬件设计者提供的.rod文件中的数据并不是原始的配置数据,而是所要配置的数据经过反转生成的新的配置数据流,所以,要先将.rpd中的数据反转处理后再发送给硬件。通过用户界面可以二进制的形式打开.rod文件并读数,将配置数据流以单字节的形式暂存在一数组中,然后对数据进行反转处理。数组中每个单字节数据的反转过程为:unsigned char strl=DE,反转后为strl=7B,定义无符号char型变量bi(i为小于8的整数),可由下面的转换完成:
由此可以得到:strl=7B。对反转处理生成的单字节数据经过组合处理后,最终便可得到对FPGA进行配置所需要的数据流。
4 仪器驱动函数的设计
根据硬件设计,仪器驱动需将配置数据以长整型的形式发送,即32位。因为配置数据的长度为16位,所以发送数据时,每次要传两个数,高16位和低16位分别放一个数。当应用程序打开.rpd文件时,应将其中配置数据流保存在数组ww[f]中,而反转处理后得到的数据依然放在数组ww[f]中并覆盖原来的数据,然后根据公式(1)进行组合处理,以得到最终要发送的32位数据并保存在长整型数组comdata[f]中。数组comdata[j]中的每个数据实际上包含两个配置数据,第一个数放在高16位,第二个数放在低16位,依次类推。确定好数据后,便可以调用动态连接库中的发送数据函数并发送给硬件。
comdata[j]=(ww<<24)∣(ww[i+1]<<16)∣(ww[i+2]<<8)∣ww[i+3](1)
应用程序可以通过DeviceI/OControl ( )函数和WDM进行通信,DeviceI/OControl ( )既可以读数据,也可以写数据,常用于数据量较小的情况下。在软件设计中,发送配置数据可通过调用DeviceI/OControl()完成。根据硬件要求,每次可下发1022个配置数据到cyclone (即循环发LONG型数据511次),然后由cyclone给DSP一个中断信号,DSP接到中断信号后,即进入中断程序,开始接收配置数据。当应用程序调用发送数据函数时,可先确定要发送的配置数据大小,再计算发送的次数。为了尽可能的减小发送时间,有效完成数据的发送与配置,应在软件设计中建立与底层硬件的握手联系。用户每发送1022个数据便进入等待状态,在等待期间,DSP可把接收到的数据转化为EPCS所需要的配置数据流。当DSP处理完这段数据后,就给上层用户发送一个握手信号,用户接收到握手信号,便进入下一个1022的发送,如果最后一次发送的数据不够1022个,则用0xFFFF补足 1022个数据,如此循环处理,直到数据发送完毕。发送完毕后,再给硬件继续发送一个配置命令,DSP接到该命令后,又开始对cyclone进行配置,从而完成整个配置过程。图4和图5分别是配置数据和发送数据的软件工作流程。
图6为上位机配置控制界面,图中给出了2片配置芯片的配置过程,这是采用Visual C++和NIMeasurement Studio联合编程方式的标准用户界面。其中Visual C++提供了友好的界面及用户熟悉的Windows风格界面,并可以调用CVI中提供的控件库和库函数。
5 结束语
本文给出了一种基于VC++程序的FPGA可重配置的实现方案,该方案在配置过程中,用户可以通过调用自己的逻辑配置文件和程序来完成处理转换,并控制下载,从而实现用户系统的FPGA在系统编程。该方法可有效提高系统配置的效率,并为产品的升级、重构,以及用户产品二次开发提供了良好手段。此外,借助互联网技术,本设计还可以支持远程下载功能。
作者:王方,王志刚(电子科技大学自动化工程学院,四川 成都 611)
来源:《电子元器件应用》 2010年02期
本设计中的应用软件所要下载的配置数据流是由硬件设计者根据需求提供的,是以二进制形式存储的.rpd文件。可以根据不同的FPGA来选择不同的外围存储芯片 (如EPCS1,EPCS16),从而生成不同大小的配置数据流。由于软件设计中,每次下发的数据一定,所以,由数据流的大小就能决定循环发送数据的次数。
由于硬件设计者提供的.rod文件中的数据并不是原始的配置数据,而是所要配置的数据经过反转生成的新的配置数据流,所以,要先将.rpd中的数据反转处理后再发送给硬件。通过用户界面可以二进制的形式打开.rod文件并读数,将配置数据流以单字节的形式暂存在一数组中,然后对数据进行反转处理。数组中每个单字节数据的反转过程为:unsigned char strl=DE,反转后为strl=7B,定义无符号char型变量bi(i为小于8的整数),可由下面的转换完成:
由此可以得到:strl=7B。对反转处理生成的单字节数据经过组合处理后,最终便可得到对FPGA进行配置所需要的数据流。
4 仪器驱动函数的设计
根据硬件设计,仪器驱动需将配置数据以长整型的形式发送,即32位。因为配置数据的长度为16位,所以发送数据时,每次要传两个数,高16位和低16位分别放一个数。当应用程序打开.rpd文件时,应将其中配置数据流保存在数组ww[f]中,而反转处理后得到的数据依然放在数组ww[f]中并覆盖原来的数据,然后根据公式(1)进行组合处理,以得到最终要发送的32位数据并保存在长整型数组comdata[f]中。数组comdata[j]中的每个数据实际上包含两个配置数据,第一个数放在高16位,第二个数放在低16位,依次类推。确定好数据后,便可以调用动态连接库中的发送数据函数并发送给硬件。
comdata[j]=(ww<<24)∣(ww[i+1]<<16)∣(ww[i+2]<<8)∣ww[i+3](1)
应用程序可以通过DeviceI/OControl ( )函数和WDM进行通信,DeviceI/OControl ( )既可以读数据,也可以写数据,常用于数据量较小的情况下。在软件设计中,发送配置数据可通过调用DeviceI/OControl()完成。根据硬件要求,每次可下发1022个配置数据到cyclone (即循环发LONG型数据511次),然后由cyclone给DSP一个中断信号,DSP接到中断信号后,即进入中断程序,开始接收配置数据。当应用程序调用发送数据函数时,可先确定要发送的配置数据大小,再计算发送的次数。为了尽可能的减小发送时间,有效完成数据的发送与配置,应在软件设计中建立与底层硬件的握手联系。用户每发送1022个数据便进入等待状态,在等待期间,DSP可把接收到的数据转化为EPCS所需要的配置数据流。当DSP处理完这段数据后,就给上层用户发送一个握手信号,用户接收到握手信号,便进入下一个1022的发送,如果最后一次发送的数据不够1022个,则用0xFFFF补足 1022个数据,如此循环处理,直到数据发送完毕。发送完毕后,再给硬件继续发送一个配置命令,DSP接到该命令后,又开始对cyclone进行配置,从而完成整个配置过程。图4和图5分别是配置数据和发送数据的软件工作流程。
图6为上位机配置控制界面,图中给出了2片配置芯片的配置过程,这是采用Visual C++和NIMeasurement Studio联合编程方式的标准用户界面。其中Visual C++提供了友好的界面及用户熟悉的Windows风格界面,并可以调用CVI中提供的控件库和库函数。
5 结束语
本文给出了一种基于VC++程序的FPGA可重配置的实现方案,该方案在配置过程中,用户可以通过调用自己的逻辑配置文件和程序来完成处理转换,并控制下载,从而实现用户系统的FPGA在系统编程。该方法可有效提高系统配置的效率,并为产品的升级、重构,以及用户产品二次开发提供了良好手段。此外,借助互联网技术,本设计还可以支持远程下载功能。
作者:王方,王志刚(电子科技大学自动化工程学院,四川 成都 611)
来源:《电子元器件应用》 2010年02期
集成电路 FPGA 总线 DSP CPLD 电路 电子 自动化 相关文章:
- 周立功:如何兼顾学习ARM与FPGA(05-23)
- 初学者如何学习FPGA(08-06)
- 为何、如何学习FPGA(05-23)
- FPGA 重复配置和测试的实现(08-14)
- 适用于消费性市场的nano FPGA技术(09-27)
- 赛灵思“授之以渔”理论:危机中如何巧降成本(06-04)