基于JTAG接口实现ARM的FPGA在线配置
时间:04-24
来源:互联网
点击:
4 系统设计与实现
4.1 系统硬件设计
系统硬件连接方案如图2所示。系统中只使用JTAG配置方式,所以与AS、PS相关的nCONFIG、MSELO和MSEL1引脚都不使用,而将nCONFIG拉高,MSELO和MSEL1接地。DATA0和DCLK引脚可以任意配置,在这里都接地。使用S3C2410的通用引脚GPB7、GPB8、GPB9、GPBlO引脚分别作为JTAG接口的TMS、TDl、TCK和TDO。
4.2 系统软件设计
4.2.1 生成Jam配置文件
使用Jam STAPL进行JTAG配置,需要有Jam配置文件。集成开发环境QuartusII默认生成的是.sol和.pof格式的配置文件,要生成.jam 和.jbc文件,可以使用2种方法:
第1种方法,在工程编译之前设置QuartusII的生成配置文件选项。在QuartusII的主菜单中,选择【Assign—ments】→ 【【)evice】菜单,进入【Setting】窗口,单击“Device&.Pin Options…”按钮,在弹出的对话框中选择“Program—ming Files”标签,在该标签页中选择.jam或者.jbc文件格式,单击“0K”按钮即可。
第2种方法,编译完成后利用QuartusII自带的文件格式转换工具,将.sof或.pof文件转换为.jam或.jbc文件类型。在 QuartusII的主菜单中,选择【File】→【ConvertProgramming Flies】菜单,进入【Convert ProgrammingFiles】窗口。在该窗口的“Programming file type'’中选择.jam或者.jbc类型,在“File name”中指定文件保存路径和文件名(默认使用与.sof或.pof同路径同名),最后单击“OK”按钮,即可生成.jam或者.jbc配置文件。
4.2.2 移植Jam Player
Altera公司提供的Jam Player源程序文件包含了DOS、Windows和Unix三种平台的代码。在类似Unix的Linux平台中使用,必须进行定制和移植。
Jam Player源程序组织结构如图3所示。与配置平台的I/O处理相关的功能都安排在jbis—tub.c文件中,使用Jam Player的用户只需要根据平台和硬件环境修改jbistub.c中的函数,而不需要修改其他的文件。
将Jam Player移植到嵌入式Linux中,主要进行下列的定制:
①更改平台预定义环境,添加预处理语句,去除不必要的源代码;
②将JTAG信号映射到具体硬件引脚;
③定制错误信息输出方式;
④根据具体微处理器的处理能力,定制延时函数。
关于更详细的定制和移植过程可参考文献[7]和[8]。
为了帮助Jam Player移植过程,Altera公司提供了调试和验证使用的idcode文件。该文件有.jam格式和.jbc格式,分别供移植普通Jam Player和Jam Byte一CodePlayer使用。其功能都是读取目标设备的IDCODE(每种型号的FPGA芯片都有一个与其一一对应的IDC0DE,可参见芯片的数据手册)。如果移植成功,Jam Player会将读取的IDCODE和对应的芯片型号打印出来;否则输出详细的相关错误信息,以供调试使用。
4.2.3 JTAG驱动程序
由于Jam Player运行在嵌入式Linux环境中,无法直接访问ARM芯片的引脚寄存器,也就无法直接操作引脚的输入输出。所以还必须为用于JTAG接口的引脚编写驱动程序,将它们封装成Jam Player可以读写的字符型文件。
该驱动遵守普通Linux字符型文件驱动编写规则,无需向系统申请中断和实现中断函数,最关键的就是对引脚读写时,要符合JTAG接口引脚的时序控制。 JTAG接口的引脚时序如图4所示。从图中可知,对于ARM的JTAG接口,TDI和TMS输出信号是在TCK时钟信号的下降沿锁存的,而TDO反馈信号是在TCK时钟信号的上升沿有效。
在驱动程序中,与操作系统的write和read调用相对应的jtag_write和jtag_read的函数如下(这两个函数实现了JTAG输入输出信号的具体操作过程):
Jam Player中调用该驱动时,在buffer中只提供TMS和TDI信号,如图5(a)所示。根据硬件设计,系统使用的是S3C24lO的GPB端口的 7、8、9、10引脚,GPB数据寄存器(GPBDAT)的结构如图5(b)所示。所以将buffer[0]的内容写到GPBDAT寄存器时,需要左移7 位;读取TDO信号时,仅需返回第10位数据。
4.2.4 JTAG在线配置的性能和时间
由于使用JTAG配置不支持配置信息的压缩形式,JTAG配置的时间只与目标芯片的型号有关,而与具体应用无关。我们在PC系统中已验证:一个源程序为 10行的与门操作应用和一个源程序超过6 000行的IEEE802.16物理层实现的应用,在QuartusII中使用JTAG下载时,下载配置的时间相同。
根据上述嵌入式系统设计,Jam Player运行在基于S3C2410处理器的Linux环境中,时钟频率为200 MHz,一次配置EP2C70的时间约为70 s。在相同的Jam Player运行环境下,尽管不同应用的Jam文件的大小不同,其配置时间是一样的。要减少配置时间,可以有3种方法:一是提高运行Jam Player系统的CPU速率;二是修改JamPlayer源程序的代码,使其执行效率更高;三是根据自身系统设计,在满足JTAG引脚时序的前提下,减少驱动程序的延时操作。
4.1 系统硬件设计
系统硬件连接方案如图2所示。系统中只使用JTAG配置方式,所以与AS、PS相关的nCONFIG、MSELO和MSEL1引脚都不使用,而将nCONFIG拉高,MSELO和MSEL1接地。DATA0和DCLK引脚可以任意配置,在这里都接地。使用S3C2410的通用引脚GPB7、GPB8、GPB9、GPBlO引脚分别作为JTAG接口的TMS、TDl、TCK和TDO。
![](../img/eec-mcu/mcu-1734171bar0ldf4j0.gif)
4.2 系统软件设计
4.2.1 生成Jam配置文件
使用Jam STAPL进行JTAG配置,需要有Jam配置文件。集成开发环境QuartusII默认生成的是.sol和.pof格式的配置文件,要生成.jam 和.jbc文件,可以使用2种方法:
第1种方法,在工程编译之前设置QuartusII的生成配置文件选项。在QuartusII的主菜单中,选择【Assign—ments】→ 【【)evice】菜单,进入【Setting】窗口,单击“Device&.Pin Options…”按钮,在弹出的对话框中选择“Program—ming Files”标签,在该标签页中选择.jam或者.jbc文件格式,单击“0K”按钮即可。
第2种方法,编译完成后利用QuartusII自带的文件格式转换工具,将.sof或.pof文件转换为.jam或.jbc文件类型。在 QuartusII的主菜单中,选择【File】→【ConvertProgramming Flies】菜单,进入【Convert ProgrammingFiles】窗口。在该窗口的“Programming file type'’中选择.jam或者.jbc类型,在“File name”中指定文件保存路径和文件名(默认使用与.sof或.pof同路径同名),最后单击“OK”按钮,即可生成.jam或者.jbc配置文件。
4.2.2 移植Jam Player
Altera公司提供的Jam Player源程序文件包含了DOS、Windows和Unix三种平台的代码。在类似Unix的Linux平台中使用,必须进行定制和移植。
Jam Player源程序组织结构如图3所示。与配置平台的I/O处理相关的功能都安排在jbis—tub.c文件中,使用Jam Player的用户只需要根据平台和硬件环境修改jbistub.c中的函数,而不需要修改其他的文件。
![](../img/eec-mcu/mcu-173418a5g3cha5jp4.gif)
将Jam Player移植到嵌入式Linux中,主要进行下列的定制:
①更改平台预定义环境,添加预处理语句,去除不必要的源代码;
②将JTAG信号映射到具体硬件引脚;
③定制错误信息输出方式;
④根据具体微处理器的处理能力,定制延时函数。
关于更详细的定制和移植过程可参考文献[7]和[8]。
为了帮助Jam Player移植过程,Altera公司提供了调试和验证使用的idcode文件。该文件有.jam格式和.jbc格式,分别供移植普通Jam Player和Jam Byte一CodePlayer使用。其功能都是读取目标设备的IDCODE(每种型号的FPGA芯片都有一个与其一一对应的IDC0DE,可参见芯片的数据手册)。如果移植成功,Jam Player会将读取的IDCODE和对应的芯片型号打印出来;否则输出详细的相关错误信息,以供调试使用。
4.2.3 JTAG驱动程序
由于Jam Player运行在嵌入式Linux环境中,无法直接访问ARM芯片的引脚寄存器,也就无法直接操作引脚的输入输出。所以还必须为用于JTAG接口的引脚编写驱动程序,将它们封装成Jam Player可以读写的字符型文件。
该驱动遵守普通Linux字符型文件驱动编写规则,无需向系统申请中断和实现中断函数,最关键的就是对引脚读写时,要符合JTAG接口引脚的时序控制。 JTAG接口的引脚时序如图4所示。从图中可知,对于ARM的JTAG接口,TDI和TMS输出信号是在TCK时钟信号的下降沿锁存的,而TDO反馈信号是在TCK时钟信号的上升沿有效。
![](../img/eec-mcu/mcu-173419di2idv3n0p3.gif)
在驱动程序中,与操作系统的write和read调用相对应的jtag_write和jtag_read的函数如下(这两个函数实现了JTAG输入输出信号的具体操作过程):
![](../img/eec-mcu/mcu-1734204xlqxnwe5pq.gif)
Jam Player中调用该驱动时,在buffer中只提供TMS和TDI信号,如图5(a)所示。根据硬件设计,系统使用的是S3C24lO的GPB端口的 7、8、9、10引脚,GPB数据寄存器(GPBDAT)的结构如图5(b)所示。所以将buffer[0]的内容写到GPBDAT寄存器时,需要左移7 位;读取TDO信号时,仅需返回第10位数据。
![](../img/eec-mcu/mcu-1734215dysnup1m1p.gif)
4.2.4 JTAG在线配置的性能和时间
由于使用JTAG配置不支持配置信息的压缩形式,JTAG配置的时间只与目标芯片的型号有关,而与具体应用无关。我们在PC系统中已验证:一个源程序为 10行的与门操作应用和一个源程序超过6 000行的IEEE802.16物理层实现的应用,在QuartusII中使用JTAG下载时,下载配置的时间相同。
根据上述嵌入式系统设计,Jam Player运行在基于S3C2410处理器的Linux环境中,时钟频率为200 MHz,一次配置EP2C70的时间约为70 s。在相同的Jam Player运行环境下,尽管不同应用的Jam文件的大小不同,其配置时间是一样的。要减少配置时间,可以有3种方法:一是提高运行Jam Player系统的CPU速率;二是修改JamPlayer源程序的代码,使其执行效率更高;三是根据自身系统设计,在满足JTAG引脚时序的前提下,减少驱动程序的延时操作。
无线电 FPGA DSP 集成电路 电路 ARM 嵌入式 Linux S3C2410 Altera Quartus C语言 CPLD 单片机 相关文章:
- 基于DSP的单兵作战用机器人控制系统设计(07-25)
- 应用处理器连接汽车和消费电子两大领域(02-26)
- TMS320C6000嵌入式系统优化编程的研究(04-08)
- TI首席科学家展望2020年处理器架构和DSP的发展(10-24)
- 数字信号处理器的市场竞争及技术发展趋势(06-24)
- TMS320C6000系列DSP维特比译码程序优化设计(07-06)