原创 【博客大赛】TCL脚本存取二进制文件应用举例

2014-3-24 18:00 2894 29 29 分类: FPGA/CPLD 文集: TCL/TK

前面有篇博文介绍了本人研究如何使用TCL脚本来存取二进制文件,这是因为我们在具体项目中实际使用得到,今天就给大家介绍下如何使用。

 

先来简单介绍下我们项目的基本要求吧,如图1所示,项目中有22个FPGA,每个FPGA存有3种表格,而每种表格都有6个block,每一个block的表格在实际产品使用的时候都有可能需要更新,这时候就需要生成表格,然后写入到FPGA,具体如何写入FPGA不是本文的内容,这里主要谈谈如何生成表格文件。

4628.jpg
图1:二进制文件格式定义
 
图1中头和尾的内容就是单个32-bit数据,由于是预先定义好的,所以可以在代码中用常数概念,也即使用TCL脚本插入常数即可。而中间的LUT由于数据庞大,所以必须从另外的文件里读进来,由于每一次需要更新的LUT个数不一样,所以每次更新都需要单独生成。这个工作并不是fpga硬件工程师的任务,但是在最终产品交付之前,我又必须测试我的FPGA逻辑,所以必须自己产生文件进行测试。为了不打扰软件工程师,我自己使用TCL脚本来按照图1格式产生测试文件。
 
最终使用TCL脚本生成的工具如图2所示。
4628.jpg
 
图2:脚本生成的产生LUT更新文件的工具
 
 

以下是插入Header的代码片段:

;##插入头

proc Ins_Header {} {
     set lutfile [open "lut_file.dat" a+]
     set header_file [open "header.txt" r]
     fconfigure $lutfile -translation binary
     gets $header_file line
     set HeadSel [.par1 get]
     set b [expr $line +$HeadSel]
     set a [binary format "i1" $b]
     puts -nonewline $lutfile $a 
     close $lutfile
     close $header_file
}
 
 
上述代码是插入头的参考代码,我们看到在二进制文件中每次插入LUT之前先插入头,而头的具体内容则由菜单命令控制,不同的菜单命令针对不同的FPGA,一共22个FPGA.
 
图3显示的是一个已经生成的查找表的二进制文件,注意第一个32-bit数据为header,二进制数据格式是little-endian。
4628.jpg
图3:二进制文件

文章评论0条评论)

登录后参与讨论
我要评论
0
29
关闭 站长推荐上一条 /2 下一条