20世纪80年代初,Intel公司推出了MCS-51单片机,随后Intel以专利转让的办法把8051内核发布给许多半导体厂家,然后呈现了许多与MCS-51体系兼容的产品。这些产品与MCS-51的体系结构相同,选用CMOS工艺,因而常用80C51系列来指代一切具有8051指令体系的单片机。在80C51系列中,OC8051以架构明晰、取指带广大、时钟功率高级许多长处遭到业内人士的喜爱。本文在剖析OpenCores网站供给的一款OC8051IP核的基础上,给出了一种仿真调试计划;运用该计划指出了其间若干逻辑过错并对其进行修正,终究完结了修正后IP核的FPGA下载测验。
1 OC8051结构剖析
尽管上述OC8051 IP核声称兼容一切8051指令体系,可是实践履行时并非如此。例如在履行表2所列的2组功用相同的代码时,所得到的履行成果并不相同。代码1的履行成果是将5写入地址为0的外部RAM,代码2的履行成果是将5写入地址为4的外部RAM。构成这种现象的原因是,oc8051_ext_addr_sel模块装备写外部RAM地址时延误了一个时钟周期。若要OC8051 IP核与规范8051体系共同,须对源文件中相似的逻辑过错进行修正。
2 OC805 1仿真调试及修正
关于硬件规划而言,仿真的作用是验证规划成果的逻辑功用是否契合初始规则,假如在这一层次上规划出了问题,那么今后各个层次的作业将彻底不确定。由前文可知,OC8051 IP核存在着逻辑过错,所以有必要经过仿真的手法完结过错查找和定位,然后终究完结对逻辑过错的修正。
2.1 仿真调试计划
OC8051仿真调试计划如图2所示。其原理是:在Keil软件环境中编写测验程序,编译生成.hex文件并将其注入ROM的指令寄存器中。testbench担任发生OC8051作业时钟及操控使能等信号,并将OC8051履行ROM中指令的成果输出到文本/波形文件中。开发人员经过对文本/波形文件和Keil调试东西履行测验程序的成果进行比较,然后完结对逻辑过错的查找与定位,并对IP核源文件进行修正。
值得留意的是,尽管Modelsim功用强大,能够便利地调查到任何层次模块信号的改动,可是OC8051 IP核的结构和时序比较复杂,仍避免不了仿真时由于中心信号多所带来的不便利。因而,在仿真调试时可寻求一些简化操作的机制。考虑到凭借数据寄存器指针DPTR和累加器A,MOVX指令能够将程序履行过程中任何寄存器的值输出到外部RAM中,而调查外部RAM中的值相对简单,因而本文选用了这种机制。
2.2 具体修正办法
(1)oc805 1_ext_addr_sel模块
读写外部RAM地址能够由DPTR指示,也能够由Ri指示,该模块的首要功用是挑选读写外部RAM地址。经过select和write信号完结对buff和state的装备,然后完结对读写外部RAM地址addr_out的装备。在Modelsim环境中,履行表1中的代码1时,发现addz_out的改动总是比DPTR慢一个时钟周期,因而其履行成果是将5写入地址为0的外部RAM。构成这种现象的原因是装备buff和state时选用了always进程,本文将该部分代码修正为:
assign state=”write”;
asstgn buff=”select”?{8h00,ri}:{dptr_hi,dptr_lo};
(2)oc8051_psw模块
该模块由一个8位标志寄存器及其操控逻辑组成,用来搜集指令履行后的有关状况。8位寄存器的各位状况一般是在指令履行过程中主动构成,但也能够由用户根据需求选用传送指令加以改动。原规划中担任解说传送指令的逻辑选用if句子:
if(addr[7:3]=='OC8051_SFR_B_ACC)data_out[addr[2:O]]<=cy_in;
'OC8051_SFR_B_ACC被界说为累加器A的高5位地址,用在这儿明显不对。应该将其改为程序状况字PSW的高5位地址'OC8051_SFR_B_PSW。
(3)OC8051_alu模块
该模块是一个功用极强的运算器,不光能够进行四则运算和逻辑运算,并且具有数据传送、移位、程序搬运等功用。其间,程序搬运功用是当遇到短搬运指令SJMlE’或变址搬运指令JZ、CJNE、DJNZ等时,改动程序计数器PC的值,对应原规划为always进程中的'OC8051_ALU_PCS分支。其代码如下:
输入src3为PC[15:8],src2为PC[7;0],src1为方针搬运地址rel。需求留意的是,rel是以当即数办法存在的,且为补码格局(补码数的加减法运算一致为加法运算)。若src1=1'b1建立,则rel为一负数,对应搬运指令是往前搬运;不然,往后搬运。当rel为负数时,原规划仅考虑了:PC[7:0]≥| rel |的状况,其对方针地址{des1,des2}的处理不全面;当PC[7:0]<|rel|时,des2=src2+src1为负数,借位会对des1发生影响,因而应有des1=src3-8'h1。因而,将该部分代码修正为:
其间c是借位标志位,用来标识程序搬运时PC[7:0]对PC[15:8]的影响。
(4)oc8051_decoder模块
该模块用于对指令译码。其规划思维是,剖析当时输入信号op_in和所在状况state,把指令的功用装备为其他模块的操控信号,并得出下一个状况。由于各指令的指令周期不同,所以每条指令译码履行状况也各有不同。模块主体由状况机构成,在每个状况下对状况机不同的履行状况进行条件判别嵌套,以此完结对不同指令的多路挑选。对模块仿真时发现,履行如DJNZ、JB、CLR等指令的成果不正确,其原因是在某些状况下对某些指令的译码有误,首要表现为装备了过错的操控信号。对模块修正成果如表3所列。
2.3 仿真成果
程序履行办法是单片机的根本作业办法,一般能够分为单步履行和接连履行两种。事实上,2.2末节中的具体修正办法正是结合这两种作业办法完结的。数据加密规范(DES)是闻名的对称密钥分组暗码,由美国规范FIPS 46-2界说。根据8051指令体系,DES的软件完结难度不大,但它是对OC8051 IP核作业能力的一次归纳查验。选用DEs规范测验向量:
密钥K=1A624C89520DEC46
明文P=748502CD38451097
密文C=DD0CFEB783CF3FDE
结合图2所示的仿真调试计划,Modelsim环境中OC8051履行DES的仿真成果如图3所示。
3 根据FPGA的下载测验
运用FPGA对其功用进行了验证。选用Altera公司的EP2C35F672C6类型FPGA开发板,含有33 216个逻辑单元(LE)、丰厚的存储器(RAM)和4个锁相环(PLL)。选用QuartusII软件,OC8051 IP核归纳后占用3 917个逻辑单元,时钟频率最高到达30.81 MHz,FPGA测验的实践频率为27 MHz。
运用QuartusII对OC8051 IP核归纳、布局布线后,选用JTAG办法将装备文件下载至FPGA中,测验程序仍选用DES算法程序。In-System Memory ContentEditor是QuartusII供给的一个可在线操作FPGA片上RAM内容的东西,经过JTAG办法,用户能够检查和修正RAM中的内容。假如用户规划对RAM中的内容进行了修正,需求检查修正后的成果是否为所希望的,则运用该东西最为便利。OC8051 IP核外部RAM中的数据能够经过该东西便利地操作,所以本文对DES测验向量的输入和输出都是经过它来完结的,如图4所示。
FPGA下载测验成果表明,OC8051作业正常,与仿真成果相同,测验程序运转正确。
结 语
本文介绍了一种OC8051 IP核的仿真测验计划。该计划给出了查找与定位IP核中逻辑过错的办法,并具体介绍了各种过错的修正办法。测验成果表明,OC8051作业正常,现已开始具有了微操控器的功用,能够被运用于实践的工程开发中。