基于UART的智能卡接口IP核设计
2.4 智能卡接口IP核的实现
由于篇幅有限,本文只介绍状态转换和指令的实现方法。
用变量state表示当前的状态,有效值为0~5,其他值均为无效状态,在无效状态下将直接跳转到空闲状态。状态与state的对应关系如表2所列。本文引用地址:https://www.eepw.com.cn/article/189738.htm
本文所使用的收发缓冲模块为SCFIFO,所有下发指令都先写入到发送FIFO,所有接收的数据都进入到接收FIFO。
表1中,4种指令长度都大于4,为实现复位操作,定义复位指令长度为1。实现时,为便于判断指令,在指令之前先将指令长度写到发送FIFO中。定义复位操作指令为01 01,其他操作指令为LEN(指令长度)+CMD(指令本身)。IP核先取出指令长度,当FIFO数据达到该长度时表示一个完整的指令已经下发,这时才可对智能卡进行操作。
3 仿真与实际测试
3.1 Modelsim仿真分析
为验证智能卡接口IP核的正确性,在Modelsim ASE6.6d上进行了仿真分析。仿真时,测试程序模拟CPU向IP核发送指令,同时模拟智能卡给IP核回复数据。
3.1.1 复位操作仿真
测试程序模块CPU向发送缓冲区写复位指令01 01,再模拟智能卡回复3b 7d 94 00 00 57 44 37 51 90 86 93 85 3e 97 06 2e 24(数据来源于实际PSAM卡)。图6是复位操作的Modelsim仿真图。
图6中,收到01 01指令后,IP核清空发送缓冲(tx_bur_clr=1),使IC卡复位(ic_reset=0),并跳转到复位状态(state=5)。由图中可以看出,IP核接收到2字节后计算出回复的总长度为18,状态变为接收定长数据状态(state=4)。当接收到的数据个数达到设定长度时(rx_buf_len =18),向CPU申请中断(irq=1),同时回到空闲状态(state=0)。
由仿真看出,复位操作时序正确。
3.1.2 取随机数操作仿真
测试程序模拟CPU向发送缓冲区写取随机数指令05 00 84 00 OO 08,再模拟智能卡回复84 11 22 33 44 5566 77 88 90 00(8字节随机数任意填写)。图7是取随机数操作的Modelsim仿真图。
图7中,取随机数指令下发后,IP核将数据线切换为发送(t_r_sel=0),发送指令并跳转到接收1字节状态(state=1)。当第1个字节等于INS(84)且LC=0时,清空接收缓冲区中的过程响应(rx_bur_elr=1),设置接收长度为10(rx_const_len=0a),跳转到接收定长数据状态(state= 4)。当接收到10个数据(rx_bur_len=00a)后跳转到空闲状态,同时向CPU申请中断(irq=1)。
由仿真看出,取随机数据操作时序正确。
3.2 实际测试
对本文设计的IP核进行了实际测试。采用Ahera公司的Nios Il CPU作为控制器,EP3C40F48417N为FPGA芯片,用10张PSAM卡作为测试的IC卡,CPU时钟为88.473 6 MHz,PSAM时钟为5.529 6 MHz。
测试操作过程为:
①返回根目录3f00;
②取PSAM卡序列号;
③进入文件目录df01;
④初始化加密认证;
⑤取认证码;
⑥取随机数。
6个操作为1轮,每秒对10张PSAM卡进行一轮测试。共测了201 803轮,耗时20 908 s,平均每秒9.65轮,所有操作全部成功。
由此验证,该IP核设计正确,运行稳定。
结语
本文分析了UART核与智能卡接口的结构,对T=0时的操作进行归纳,设计出基于UART的智能卡接口IP核。由于不需要重新设计UART的接收、发送以及相关寄存器等功能,使开发周期缩短了至少一半。将该IP核用在多卡系统中,能大量减轻CPU的负担,提高CPU的效率。
评论