【摘要】微机接口技术是计算机以及电子信息类专业的一门必修课程,该课程的内容抽象枯燥、学习难度较大,本文提出了一种将SystemC引入到该门课程的实验环节,通过实际对课程中各类芯片的实际建模及仿真的方式在提高学生学习兴趣的同时加深对所学内容的理解。
【关键词】SystemC 建模 仿真
【基金项目】省科学技术基金(黔科合J字LKS[2010]11号 基于SystemC的微机接口技术仿真平台的构建。)
【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2015)01-0244-01
微型计算机接口技术是电子信息、计算机等相关专业必修的一门专业课。该课程主要介绍计算机与外设之间进行数据交换时所需要解决的各类问题。课程主要的内容是介绍某一具体问题,以及所采用的技术,实现这一技术的接口芯片。重点是对于每一类芯片的功能、结构以及编程三个方面。课程的实用性较强,主要培养学生在对各种芯片的内部结构及工作原理理解的基础上学会运用接口芯片解决实际的问题的能力。本文介绍了在微机接口技术教学过程中引入SystemC作为辅助工具,以使学生通过对芯片建模的方式加深对芯片理解的方法。
一、 微机接口教学内容的特点
微机接口技术这门课程的教学主要是理论加实验。理论环节主要是介绍数据传输中需要解决的问题。在介绍各种技术的理论知识后,重点则是实现该技术的具体芯片,包括芯片的功能、内部结构、工作原理及使用等。课程的实用性很强,而实验环节一般是购买某个厂家的实验箱,且实验箱都有配套的实验书,书的内容包含了接口芯片的内部寄存器结构说明,实验连线图,程序等。实验过程一般是按照书中的实验图在实验箱上连线,在计算机或实验箱上输入程序,編译运行。看实验结果。一般来说,如果实验箱设备状态良好,实验程序及连线无误则实验结果很快就会出现。在这一过程中,大部分学生没有经过思考,未能很好地理解实验内容。此外,因为设备、场地等客观条件,很难让每一位学生一台实验箱独立做实验,实验课时有限。结果只能是学生对所学的内容知之甚少,随着所学内容的不断深入,因前面内容不理解,感觉课程难度越来越大,从而失去信心和兴趣。[1][2][3]
为了加深对课程内容的理解,在进行实验前必须对实验的内容加以预习,这其中对芯片各部分内容的回顾是必不可少的,但仅靠布置作业,回答几道题的方式来进行预习,效果并不理想。为此,本文提出了一种利用SystemC编程以对某类芯片进行建模的方式以达到让学生对芯片有一个完整的认识的过程,以提高实验质量。
二、SystemC的建模功能
SystemC是由OSCI(Open SystemC initiative)组织制定和维护的一种基于C++的建模平台,它完全是用C++语言编写的。它可以实现各种抽象级别上的硬件建模和仿真。通过文献2的实例可以看出,对一个电路进行功能建模的元素包括:模块(Module)、端口(Port)、信号(signal)、进程(Process)、仿真的启动和停止等。其中模块的作用相当于C/C++中的结构体或者是类,作用是将内部的数据与外部其他部分分离,但提供一定的外部接口。模块是用SC_MODULE关键字表示的。端口的作用是用于数据在不同模块之间传输,有方向性。端口必须指定可以传输的数据类型。例如SC_in
1.模块的描述SC_MODULE(模块名){包括端口、进程等的定义}。
2.端口SC_IN(OUT、INOUT)<数据类型>端口名。
3.信号SC_SIGNAL<数据类型>信号名。
4.进程 SC_METHOD(进程名);sensitive<<端口或其他能激发事件的对象。
5.仿真实现在主函数中完成几个步骤:定义的模块实例化,实例化的模块连接,调用sc_start启动仿真,查看运行结果[5]。
对于描述一个电路或是集成芯片,从内部结构到功能实现到仿真,有了这几部分已经足够。
三、利用SystemC对微机接口芯片建模
下面以8255A并口的建模为例:
1.对8255A的引脚建模
Sc_inout
Sc_in
2.内部寄存器
Bool Creg[8],Areg[8],Breg[8],CReg[8];
定义控存、数据寄存器等。
3.功能的描述
8255的主要作用就是完成数据从端口A、B或C上接收数据并存入内部寄存器中。8255有三种工作方式,为此可以实现两个数据输入输出进程,一个实现基本输入输出,另一个则实现选通式的输入输出。
SC_METHOD(Basic_INOUT);
Sensitive< Sensitive< 表示当PA、PB或PC上有变化时,该进程被调用,进程内部代码中包括了按照控存的内容进行相应操作的功能。 SC_METHOD(Select_INOUT) Sensitive< 进程内部需要对选通信号进行识别以区分是A口还是B口数据。 内部功能的实现,几乎就是一个完全C/C++程序设计的问题。 4.测试平台的建立与仿真 在主函数中,生成8255的实例模块,并定义相应的信号,进行连接。启动仿真函数sc_start。查看结果。为了能够调用8255的进程,需另编写一个产生各种信号的模块。 通过上面的对几个部分的描述,可以使得学生在预习过程中,将原本枯燥的内容转为一次次的编程练习,在一定程度上提高了学生的学习兴趣,且经过每一步的编程描述加深学生对芯片的理解和熟悉。 四、结束语 本文提出了一种利用SystemC编程的方式从简单引脚、内部寄存器到复杂的功能描述对接口芯片建模。可以看出对芯片建模并不需要很复杂的知识,只是在原有的C/C++的基础上增加少量的SystemC建模知识,对于较难的部分,可以给予一定的指导。透过这种方式可以使得学生较为完整地认识和理解所学的芯片,为后续的实验环节以及应用打下坚固的基础。 参考文献: [1]陈燕俐、李爱群、周宁宁.微机接口虚拟中断实验的研究和实现[J].计算机应用与软件.2010,171. [2]孔世明.微机接口技术课程教改探究[J].教育界.2013,(6):172. [3]杨斌.从知识点掌握到应用系统构建的微机接口课程设计规划及实现.计算机教育.2009(13):104. [4]张弥左、王兆月等.微型计算机接口技术[M].机械工业出版社,2004. [5]朱小虎、曹阳等.基于SystemC的周期精确事物级AMBA总线建模[J].武汉大学学报(理学版).2005(5):629. 作者简介: 曹晓龙(1976-),男,汉族,讲师,硕士,研究方向:SoC系统级设计、计算机软件。