首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FSL总线的SIM卡接口设计--

基于FSL总线的SIM卡接口设计--

SIM卡是一种带CPU的IC卡,目前已经广泛应用于电信、金融、交通及公共事业等领域。SIM卡的电气特性和传输协议主要遵循ISO/IEC 7816-3规定,具体的激活、复位、释放等时序请参考ISO/IEC 7816-3标准,这里不再赘述。数据传输采用T=0或T=1的通信协议,T=0协议是异步半双工字符传输,T=1协议是异步半双工块传输协议,目前SIM卡还是T=0协议用的比较多,其字符传输格式如下:

串行通信以一比特的低电平开始,随后是八比特的一个字符,再后是一比特奇偶校验位。两个字符传输之间的间隔为保护时间,保护时间至少为两比特以上。要实现这个串行通信功能,对有一定逻辑设计经验的朋友来说是很容易的,这里也不再赘述了,注意一下的是奇偶校验位后面的一个比特是用作应答位,在接收方如果检测到有一个奇偶校验错误发生后通过拉低该位来告诉发送方需要重新发送,有错误时最多连续重新发送三次。
根据SIM卡接口的特点,在物理层用硬件实现比较合适,而通信协议用软件实现比较合适,所以我们的方案是选用XILINX的MICROBLAZE处理器为主处理器,通信协议在MICROBLAZE上用软件完成,而物理层采用逻辑设计后作为一个自定义的IP通过FSL ( Fast Simplex Link ,快速单工链路) 总线挂接到MICROBLAZE处理器上,FSL 总线是基于FIFO 的单向点对点通信总线, 这个特点正好用于串口通信的数据缓冲功能而不用单独在串口通信模块再使用FIFO了。
首先在XPS上产生IP,修改硬件连接情况。在XPS界面选择Hardware → Create or Import Peripheral… 产生一个基与FSL接口的IP,注意钩选Generate example design in Verilog instead of VHDL以产生一个verilog参考设计文件。然后把它加到工程,再在System Assembly View里点Bus Interfaces栏里,把处理器配置一个FSL接口,和IP的MFSL,SFSL连接上,这里注意一下连线是交叉的,即MICROBLAZE处理器的MFSL连接到IP的SFSL接口、 MICROBLAZE处理器的SFSL连接到IP的MFSL接口上的。 双击IP核,在弹出的IP配置窗口里钩选C_USE_CONTROL 置为1,以打开FSL 总线的控制位传输功能。
硬件连接好以后,下一步就是把我们设计的SIM卡接口的逻辑部分定义为该IP的功能。SIM卡接口的逻辑部分设计分为四个模块,分别为TOSIM,FROMSIM,CONTROL,FSLINTERFACE;下面简要说明一下要实现的功能:
①TOSIM: 串行通信的发送模块,负责向SIM卡发送串行数据。
②FROMSIM:串行通信的接收模块,负责接收SIM卡发送的串行数据。
③CONTROL:SIM卡接口的控制单元,用来产生所有的控制信号、SIM卡接口时钟信号和自定义命令解析功能。
④FSLINTERFACE:FSL总线接口模块,包括主和从接口,另外实现数据拆包和组包功能(就把32位字按字节传给SIM卡发送模块和把4个字节组成一个32位字供MICROBLAZE处理器读取)。
这里注意下我们使用到了FSL接口的控制线,控制线为高时表示传输的是控制命令,控制线为低时表示传输的是实际数据,MICROBLAZE处理器提供了cget 、cput、ncget 、ncput、等指令专门用来对FSL 总线进行操作。具体控制命令可以我们自己定义,如可以定义要读或写的数据长度、读或写的寄存器地址等。SIM卡接口的逻辑部分的具体实现这里也不再说明了,本文的重点是以SIM卡接口设计为例说明通过FSL总线挂接IP的方法与流程,而不是具体设计。
IP模块的功能设计好后,怎么把它加到IP上呢,一个简单的方法就是直接在我们前面在产生IP时钩选Generate example design in Verilog instead of VHDL后产生的参考设计文件上修改,把IP功能代码文件拷贝到该文件即可。但如果IP模块的功能复杂点,不可能把所有设计等放在一个文件里,如果设计有多个文件时,我们也可以把所有文件拷贝该IP放参考设计的源文件的地方,如D:\edklab\sim\pcores\sim_v1_00_a\hdl\verilog。这里注意下顶层模块命名应该和IP名字一样。在XPS界面选择Hardware → Generate Netlist(如果以前运行过可能要运行Hardware → Clean Hardware、Hardware → Clean Netlist 、Hardware → Clean Bits)。
XPS会提示类似如下的错误:
ERROR:MDT - Aborting XST flow execution!
INFO:MDT - Refer to D:\edklab\sim\synthesis\sim_0_wrapper_xst.srp for details
Running NGCBUILD ...
IPNAME:rs232_dce_wrapper INSTANCE:rs232_dce - D:\edklab\sim\system.mhs line 88 -
Running NGCBUILD
说明XPS软件并不会自动读取IP目录下的HDL源码,研究发现在XPS软件中HDL源码文件是由一个PAO(Peripheral Analyze Order)文件指定的,具体位置在IP目录下的data目录,类似如下地址:D:\edklab\sim\pcores\sim_v1_00_a\data\sim_v2_1_0.pao
PAO文件的格式十分简单,如下形式: tooltarget libraryname filename hdllang
分别指定工具目标类型、库名、文件名和HDL语言类型。
工具目标类型:lib, simlib, synlib, vlgincdir
lib可用于综合与仿真,simlib仅用于仿真,synlib仅用于综合,vlgincdir用来定义Verilog包含目录的相对路径。
libraryname就IP库名,filename 指定文件名。
Hdllang为HDL语言类型,即verilog 或vhdl。
如下是一个实例:lib sim_v1_00_a sim.v verilog。
在PAO文件里把所有的源文件加上,再运行Hardware → Generate Netlist就没有问题,然后就可以像普通IP那样使用了。
最后总结一下,XININX提供的FSL总线具有简单、快速的特点,并且与MICROBLAZE处理器紧密结合,用它来连接自定义的高速IP是十分方便地,具体的读写时序可以参考XININX的文档:LogiCORE IP Fast Simplex Link (FSL) V20 Bus (v2.11c) Product Specification。也可结合Create or Import Peripheral…时产生的参考设计学习,以上所写希望对要使用FSL总线的朋友有些帮助,也欢迎大家来讨论与交流啊。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表