(计算机应用技术专业论文)iss结构自动生成方法研究.pdf_第1页
(计算机应用技术专业论文)iss结构自动生成方法研究.pdf_第2页
(计算机应用技术专业论文)iss结构自动生成方法研究.pdf_第3页
(计算机应用技术专业论文)iss结构自动生成方法研究.pdf_第4页
(计算机应用技术专业论文)iss结构自动生成方法研究.pdf_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华北电力大学硕士学位论文 摘要 嵌入式系统仿真的核心工作就是指令集仿真,但纯手工开发一个指令集仿真器 不但是一项繁重的工作,而且极易出错。还需要花费大量时间来进行仿真器正确性 的验证。 本课题研究了各种i s s ( 指令集仿真器) 结构自动生成技术,并最终选择指令 集描述语言自动生成技术。并构建了一个能根据用户描述自动生成指令集仿真器的 仿真器自动生成工具,自动生成工具在l i n u x 下采用c 语言实现,并通过描述不同 体系结构对其进行验证。全部正确,但仍需要改进,使之能更真实反映硬件的特性。 关键词:嵌入式,仿真,i s s ,指令集描述语言 a b s t r a c t t h ec o r ew o r ko fe m b e d d e ds y s t e ms i m u l a t i o ni si n s t r u c t i o n - s e ts i m u l a t i o n ,t h e d e v e l o p m e n to fi n s t r u c t i o ns e ts i m u l a t o rp u r e l yb yh a n di sa no n e r o u st a s k ,a n de a s i l y g o e sw r o n g i ta l s on e e d st os p e n dal o to ft i m et oc a r r yo u tt h et e s to nt h ea c c u r a c yo f s i m u l a t o r i nt h i sp a p e r ,ir e s e a r c hav a r i e t yo f i s s ( i n s t r u c t i o ns e ts i m u l a t o r ) s t r u c t u r ea u t o m a t i c g e n e r a t i o nt e c h n o l o g y , a n df i n a l l y c h o o s ei n s t r u c t i o ns e t d e s c r i p t i o nl a n g u a g e a u t o m a t i cg e n e r a t i o nt e c h n o l o g y ,a n dc o n s t r u c tas i m u l a t o ra u t o m a t i cg e n e r a t i o nt o o l w h i c hc a nw i t hu s e r s d e s c r i p t i o ng e n e r a t ea ni s s a u t o m a t i cg e n e r a t i o nt o o li s d e v e l o p e di ncl a n g u a g eu n d e rl i n u x ,a n d1w i l lc e r t i f yi tt h r o u g hd e s c r i p i n gd i f f e r e n t a r c h i t e c t u r e i t sr i g h t , b u ti ts t i l ln e e d st ob ei m p r o v e d ,s oa st om o r ea c c u r a t e l yr e f l e c t t h ec h a r a c t e r i s t i c so ft h eh a r d w a r e h o ub o t a o ( c o m p u t e ra p p l i c a t i o nt e c h n o l o g y ) d i r e c t e db yp r o f s h a oz u o z h i k e yw o r d s :e m b e d d e ds y s t e m , s i m u l a t i o n ,i s si n s t r u c t i o ns e td e s c r i p t i o n l a n g u a g e i 一 华北电力大学硕士学位论文 摘要 嵌入式系统仿真的核心工作就是指令集仿真,但纯手工开发一个指令集仿真器 不但是一项繁重的工作,而且极易出错。还需要花费大量时间来进行仿真器正确性 的验证。 本课题研究了各种i s s ( 指令集仿真器) 结构自动生成技术,并最终选择指令 集描述语言自动生成技术。并构建了一个能根据用户描述自动生成指令集仿真器的 仿真器自动生成工具,自动生成工具在l i n u x 下采用c 语言实现,并通过描述不同 体系结构对其进行验证。全部正确,但仍需要改进,使之能更真实反映硬件的特性。 关键词:嵌入式,仿真,i s s ,指令集描述语言 a b s t r a c t t h ec o r ew o r ko fe m b e d d e ds y s t e ms i m u l a t i o ni si n s t r u c t i o n - s e ts i m u l a t i o n ,t h e d e v e l o p m e n to fi n s t r u c t i o ns e ts i m u l a t o rp u r e l yb yh a n di sa no n e r o u st a s k ,a n de a s i l y g o e sw r o n g i ta l s on e e d st os p e n dal o to ft i m et oc a r r yo u tt h et e s to nt h ea c c u r a c yo f s i m u l a t o r i nt h i sp a p e r ,ir e s e a r c hav a r i e t yo f i s s ( i n s t r u c t i o ns e ts i m u l a t o r ) s t r u c t u r ea u t o m a t i c g e n e r a t i o nt e c h n o l o g y , a n df i n a l l y c h o o s ei n s t r u c t i o ns e t d e s c r i p t i o nl a n g u a g e a u t o m a t i cg e n e r a t i o nt e c h n o l o g y ,a n dc o n s t r u c tas i m u l a t o ra u t o m a t i cg e n e r a t i o nt o o l w h i c hc a nw i t hu s e r s d e s c r i p t i o ng e n e r a t ea ni s s a u t o m a t i cg e n e r a t i o nt o o li s d e v e l o p e di ncl a n g u a g eu n d e rl i n u x ,a n d1w i l lc e r t i f yi tt h r o u g hd e s c r i p i n gd i f f e r e n t a r c h i t e c t u r e i t sr i g h t , b u ti ts t i l ln e e d st ob ei m p r o v e d ,s oa st om o r ea c c u r a t e l yr e f l e c t t h ec h a r a c t e r i s t i c so ft h eh a r d w a r e h o ub o t a o ( c o m p u t e ra p p l i c a t i o nt e c h n o l o g y ) d i r e c t e db yp r o f s h a oz u o z h i k e yw o r d s :e m b e d d e ds y s t e m , s i m u l a t i o n ,i s si n s t r u c t i o ns e td e s c r i p t i o n l a n g u a g e i 一 声明尸明 本人郑重声明:此处所提交的硕士学位论文( i s s 结构自动生成方法研究, 是本人在华北电力大学攻读硕士学位期间,在导师指导下进行的研究工作和取得的 研究成果。据本人所知,除了文中特别加以标注和致谢之处外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得华北电力大学或其他教育机构的 学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在 论文中作了明确的说明并表示了谢意。 学位论文作者签名:越日期: 关于学位论文使用授权的说明 p, 、3 76 本人完全了解华北电力大学有关保留、使用学位论文的规定,即:学校有权 保管、并向有关部门送交学位论文的原件与复印件;学校可以采用影印、缩印或 其它复制手段复制并保存学位论文;学校可允许学位论文被查阅或借阅;学校 可以学术交流为目的,复制赠送和交换学位论文;同意学校可以用不同方式在不 同媒体上发表、传播学位论文的全部或部分内容。 ( 涉密的学位论文在解密后遵守此规定) 作者签名: 日期:日期 华北电力大学硕士学位论文 1 1 研究背景 第一章 引言 在计算机领域,仿真的概念是:用软件虚拟硬件,构造虚拟机来辅助硬件设计, 开发系统软件和应用软件。在计算机技术发展过程中,仿真一直是一个非常重要的 研究领域。当构建一个新系统时,有效地测试和验证新系统的行为和正确性十分重 要。在硬件方面,利用仿真,硬件生产者可以在构建系统之前就对其正确性及性能 进行验证,从而大大降低开发成本和时间。在软件方面,利用仿真还可以使得软件 开发者在样机生产之前就能够进行软件开发,从而使软、硬件同时面世成为可能。 另外,利用仿真还可以在程序运行时收集机器的运行信息,帮助分析系统的行为, 从而进行相关的优化【1 1 。 如今,仿真技术和虚拟技术被广泛应用各个领域,特别在嵌入式系统的开发过 程中,由于在不同应用领域中,嵌入式开发要求的硬件体系差别很大,用软件进行 系统仿真或虚拟非常必要,因为嵌入式开发有如下特性。 1 领域针对性强,不同领域对硬件和软件的要求区别很大。 2 软件的开发和调试都需要特定的硬件环境,比如嵌入式很多都使用a r m 处 理器,软件不能直接跑在一般p c 机器上【2 1 。 3 嵌入式一般都是底层开发。 嵌入式开发的上述特性在很大程度上阻碍了其自身发展,为了克服这些困难, 出现了很多软件模拟硬件的虚拟机环境,这些软件可以使嵌入式软件开发和调试在 p c 机器上直接完成,完全脱离了对嵌入式硬件环境的要求。这种软件模拟硬件的方 法极大促进了程序员的开发效率,也降低了嵌入式开发成本,给嵌入式开发带来了 很大的弹性。如今,几乎所有的嵌入式开发都会在模拟平台或环境中进行。因此可 以说,对虚拟机或仿真器的开发在嵌入式开发中也成为一门独立的技术或学科【3 1 。 然而,有两个难题摆在面前:首先,不断缩短的市场生命周期对虚拟机的开发 提出了时间上的紧迫要求。其次,开发一个指令集仿真器不但是一项繁重的工作, 而且极易出错。一般来说,开发仿真器就需要花费数月的时间,还需要花费大量时 间来进行仿真器正确性的验证。即使如此,在使用该仿真器的时候,也不能认定其 已经是正确的。这些原因导致了嵌入式s o c 的开发和优化趋向于以一种语言为基础 设计方法论【4 l 。 华北电力大学硕士学位论文 完整的虚拟机开发是一个相当庞大的工程,不仅要模拟计算机的各种硬件,包 括内存、数据总线、时钟、串口、c p u 等,还要组装这些部件,使这些部件能够很 好地协调工作。在这些部件模拟中,c p u 模拟的工作量最大,大约占整个模拟过程 的8 0 工作量,而除了一些中断模拟外,指令集模拟几乎是c p u 模拟的全部工作量。 所以虚拟机模拟也可以说是体系结构指令集合的模拟。因此指令集模拟的好坏直接 关系到虚拟机模拟的好坏,指令集模拟工作量也是虚拟机模拟工作量的主要参考。 c p u 拥有几十个寄存器,上百条指令,完全手工模拟( 采用c + + c 等语言编写) 是 相当费时和难调试的,如果采用一种符合c p u 特性的描述语言,并通过工具链自动 生成目标代码,可以快速模拟c p u 部件。指令集描述语言( i s d l ) 正是从体系结 构描述语言中剥离出来,专门针对不同体系或特定体系的描述语言,用于描述指令 集合和处理器状态,并通过工具链自动生成指令集仿真器( i s s ) ,虽然是从机器语 言中剥离出来,但严格上讲它也是一门体系结构描述语言,属于机器语言的范畴【5 1 。 1 2 目的和意义 本实验室一直致力于s o c 系统级设计及仿真的研究,已经在功能级建模、仿真 及性能分析开展了很多的工作。如a r m 系列的指令集仿真和周期仿真的工作,基 于s y s t e m c 功能级建模、t l m 级建模等。但目前所进行的仿真工作都是手工编写的, 像a r m v 5 的指令集仿真,花费了本届五名同学多月时间去书写,工作量大并且繁 琐,而且为了测试指令集的正确性,又编写了很长的测试程序,同样工作量大且繁 琐,以后再编写a r m 系列的其他指令集仿真器,还需要从零开始进行重复繁琐的 工作,但仔细观察所编写的指令集仿真器的代码可以发现,重复率非常高,也非常 有规律,完全可以通过改进方法来提高设计自动化的程度,在各个嵌入式开发公司, 如果没有自动生成工具,那么对于任何一款新型嵌入式c p u ,都必须为其纯手工编 写指令集仿真器,然后在仿真环境中进行嵌入式应用开发。因此实现i s s 结构的自 动生成将极大的提高嵌入式开发效率。这项研究在国外开展较早,国内很少。所以 本设计研究了i s s 结构自动生成方法,并选择以指令集描述语言为基础,自动生成 i s s 框架。这样不仅为本实验室的进一步研究打下基础,还可以进一步应用到实际 嵌入式开发中,i s s 自动生成技术不需要开发者对体系有太多深入了解,就可以快 速描述c p u ,并且通过改变模板文件,可以改变目标代码的生成,同时提供的解释 器在指令行为翻译过程中,出错率非常低,远低于传统的纯手工( 使用c + + c 语言) 模拟。这将大大减少工作量,缓和市场周期日益缩短的压力,提前以此为基础的软 件开发的起点时问,实现最大限度的软硬件同时面世【6 】。 一2 一 华北电力大学硕士学位论文 1 3 论文的研究方法及主要工作 首先通过对研究自动生成技术,确定采用指令集描述语言自动生成技术。通过 对指令集描述语言的仔细分析与研究,得到其文法规则,再深入学习编译原理,并 采用自顶向下( t o p - d o w n ) 和模块化的系统设计方法,对其逐层细化,完成自动 生成工具的设计。 1 自动生成工具整体设计。 确定自动生成工具总体结构,将其划分为词法分析,语法分析,中间代码生成, i s s 库生成4 部分。 2 词法分析和语法分析设计。 深入学习编译原理,研究指令集描述语言的文法规则。采用结构体表格的方式 收集描述信息。 3 指令集仿真器自动生成工具验证。 通过对a r m ,d s p 指令集仿真,验证其效率和正确性。 4 总结设计中的经验教训,提高设计水平。 一3 一 华北电力大学硕士学位论文 2 1i s s 简介 第二章自动生成技术研究 i s s 中文全称为指令集仿真器,是通过软件来模拟实际硬件c p u 7 1 。它描述处 理器结构,且可以包含部分微观结构,可以反映周期,但没有延迟信息。i s s 是运 行于宿主机之上的工具,模拟应用程序在目标机上运行的行为。可用于验证体系结 构的设计,编译器的设计以及在开发过程中评估体系结构的设计。因为嵌入式软件 的开发和调试一般都需要特定的硬件环境,比如嵌入式很多都使用a r m 处理器, 软件不能直接跑在一般p c 机器上。这在很大程度上阻碍了其自身发展,为了克服 这些困难,出现了i s s 虚拟机环境,使嵌入式软件开发和调试在p c 机器上直接完 成,完全脱离了对嵌入式硬件环境的要求。这种软件模拟硬件的方法极大促进了程 序员的开发效率,也降低了嵌入式开发成本,给嵌入式开发带来了很大的弹性。如 今,几乎所有的嵌入式开发都会在模拟平台或环境中进行。因此可以说,i s s 开发 在嵌入式开发中也成为一门独立的技术或学科【8 】。本论文要实现的是功能级i s s , 不包含微观结构。 2 2 指令模拟技术 i s s 从最早的解释型指令集模拟器,发展至编译型,其演化过程围绕性能提升 展开,随后为了结合解释型模拟器支持任意应用程序的特性以及传统编译型模拟器 的性能优势,体系结构研究者采用了许多其他的技术,如j u s t i n t i m ec a c h ec o m p i l e d s i m u l a t i o n( j i t c c s ) 即时缓存汇编模拟器,i n s t r u c t i o ns e tc o m p i l e ds i m u l a t i o n ( i s c s ) 指令集汇编模拟器等【9 1 。 2 2 1 解释型模拟器 解释型i s s 如s i m p l e s e a l a r ,长期以来被广泛使用。s i m p l e s c a l a r 在宿主机的 存储器中保存目标机的相应状态,对加载的代码进行解释并在宿主机上执行相应的 动作。传统的解释模拟过程如图2 1 所示,在运行时进行取指,译码并执行。这样 的工作流程使得解释型l s s 具有高度的仿真精确度,但是由于译码的复杂使其性能 低下【1 0 1 。 一4 一 华北电力大学硕士学位论文 2 2 2 编译型模拟器 图2 1 解释型i s s 工作流程 随着的可编程体系结构复杂度的增加给模拟器性能带来了负面的影响。为了改 进性能,研究者采用基于编译的技术改进了仿真过程中最耗时的过程,指令的译码。 译码即通过将每条目标指令转换为一系列的宿主机指令,这些指令完成对宿主机中 所仿真的目标机状态的操作。编译型模拟器依据译码过程处于编译或者运行时,划 分为静态编译仿真( s t a t i cc o m p i l e di s s ) 及动态编译仿真( d y n a m i cc o m p i l e di s s ) 【l l 】 o 由z h u 和g a j s k i 给出的s t a t i cc o m p i l e di s s 将对应用程序的译码移至编译时, 如图2 2 所示。目标应用程序的二进制码编译为d e c o d e dp r o g r a m ,之后经过优化生 成宿主机的二进制码,并最终运行于宿主机。 厂、 , 、 厂、 目标应 目标应 目标应 用程序用程序 用程序 二进制二进制二进制 码码 码 图2 - 2 静态编译型i s s 工作流程 该技术的主要的限制在于对静态程序代码的需求,这就局限了编译技术为一小 部分数字信号处理器使用。与典型的d s p 应用( 信号处理算法) 比较,微控制器体 一5 一 华北电力大学硕士学位论文 系结构通常运行的是操作系统,而操作系统的重要特点即程序代码在运行时是动态 的,这就局限了静态编译型模拟器的使用【1 2 】。 d y n a m i cc o m p i l e di s s 的典型代表为e m b r a 及s h a d e ,i s s 中的循环为将输入的 应用程序进行译码,并将译码的信息存储备于后用,之后遇到已译码的指令在运行 时发生了变化则将新的译码信息存储于c a c h e 中。该技术由于在运行时进行译码, 难于进行代码优化【1 3 】。 2 3 代码自动生成技术研究 不管什么体系结构,指令集无非是一些数据操作、内存操作、寄存器操作、i o 操作、异常操作,对于一条指令,它都会有o p c o d e 、条件位、操作数等组成,比 如m i p s 指令r 格式,如表2 1 。还有a r m 指令格式如表2 2 【1 4 1 。 表2 1m i p s 指令r 格式 o pr sr t r ds h a m tf u n c t 655556 表2 - 2a r m 指令格式 所以体系结构的各个部件和指令集合存在很多相似性和共性,通过对这些特点 的研究,发现和尝试了3 种改进方案。 2 3 1 方案一:利用c 语言自身优势 在手工编写指令集仿真器的时候,通常采用c 语言,根据c 语言常识,通过宏 和函数代替程序中重复出现的代码段可以有效地减少编码复杂程度和代码长度来 降低工作强度,加上指令集仿真器代码重复地方很多,因此可以通过它来有效降低 编写时间。例如在指令集仿真中,指令初始化是每条指令都要用到的。为此在书写 a r m 7 指令集仿真器的时候专门编写了初始化函数,如表2 3 。 一6 一 华北电力大学硕士学位论文 表2 - 3 指令初始化函数 ! q i 鱼堑堕! 堑望堕i 垒堕垒堡垒! ! ! 生! 塑堕 v o i d ( + i o i n i t x v o i d ) , c h a r s y n t a x _ i n s t , v o i d ( d e c o d e ) ( i n s u u c t i o n _ t ,c o d e r ) , v o i d ( c o m p u t e l e t e ) ( s t a t et + ,i n s t r u c f i o n t + ,c o m p l e t e _ t ) ) i n s t r - d e c o d e = d e c o d e ; i n s t r - c o m p u t e l e t c = c o m p u l e l e t c ; 撑 i f d e fi s s d i s a s m i n s t r - s y n t a x = s y n t a xi n s t ; i n s t r - i d e n t = - i d e n t ; ( i o _ i n i t ) 0 ; r e t u r l l ; 同样类似这样的函数和宏很多。在编写a r m 7 ,a r m 9 指令集仿真器的时候, 分别作了局部测试,发现时间分别缩短了1 2 和1 4 ,之所以效果差别这么大,是因 为这种方式的效果和编写者对c 语言和c p u 体系结构的精通程度有很大关系,因 此难以推广。而且方案一仅仅是提高了效率,但是编写过程仍然是纯手工,不能算 合格意义上的自动生成。 2 3 2 方案二:模块组合法 所谓模块组合法,是利用面向对象的方法,将指令集仿真器的各个部件做成构 件放在构件库中,在实际应用时通过组装技术有选择地将各个构件组装起来,从而 生成一个仿真器【”】。 为了验证本方法的效率,在编写a r m 7 和a r m 9 的r t l 级仿真器的时候,先把 a r m 7 用c + + 语言( 或v h d l ) 所表述的仿真器各个部件写成类( 模块) 以后,可以 放到元件库,当编写a r m 9 的时候,由于是一个系列的c p u ,把元件库中的很多类 直接对象化( 实例化) 以后就可以直接使用了。因此书写a r m 9 的时候非常的迅速, 只用了前者时间的1 0 就全部完成了。并且此种方法可进一步用原理图的形式表示, 以一个8 位r i s cc p u 为例【阚,如图2 3 。 一7 一 华北电力大学硕士学位论文 图2 38 位r i s cc p u 这样就会直观简单,使用者不需要了解模块内部结构,只要知道模块的作用和 接口,就可以使用。既简单又省时省力。但是在后来编写m i p s 4 kc o r e 的时候,由 于和a r m 不属于同系列,因此可以直接使用的元件库中的类很少,因此时间并没有 缩短太少,效果并不理想。 可以看出,采用这种方法生成仿真器并不是真正意义上的仿真器自动生成,而 是一种半自动生成技术,因为实际上其仿真器的各个部件代码都是手工编写的。该 方法的优点是当仿真的系统不包含新设计的部件时,可以比较容易地将构件库中的 构件组装,快速生成仿真器。但是其具有明显的缺点,就是仿真器的各个部件实际 仍然为手工开发,易于出错,难于修改。 2 3 3 方案三:指令集描述语言法 指令集描述语言法是透过专门描述语言对特定体系结构进行描述,然后根据描 述内容自动生成仿真器代码的方法。为了自动生成一个指令集仿真器,必须按照一 种事前规定好的模式来描述特定的指令集系统。具体说来,描述中要包括如下内容。 首先,必须对该系统的指令格式进行描述,该描述是生成译码器的基础。其次必须 对指令的语义进行描述,即定义该指令执行的操作。再次,需要对指令的语法进行 描述用以生成汇编器和反汇编器【1 7 】。最后,要描述系统的体系结构方面的特征,包 括寄存器、内存、高速缓存、流水线等信息。指令集描述和生成部件的关系如图2 4 所示。 一8 一 华北电力大学硕士学位论文 图2 4 指令集描述和生成部件关系 其中仿真器生成工具以描述结果为输入,生成仿真器中译码器、汇编器、反汇 编器、服务程序等部件的代码。该方法的优点是,仿真器的部件完全是自动生成, 不易出错,便于修改1 引。 可以看出该方法采用的技术是真正意义上的仿真器自动生成技术,也是本论文 接下来要讨论的核心内容。 一9 一 华北电力大学硕士学位论文 3 1 指令集描述语言 第三章i s d l 文法分析 8 0 年代出现了体系结构描述语言,专门描述不同体系的硬件,利用这些描述语 言可以绘画出一台硬件机器,并使用一系列工具包来自动生成虚拟机。同时伴随着 以硬件描述语言( h d l ) 为基础的a s i c 设计的兴起,这种以一门语言为基础的嵌 入式s o c 开发和设计方法自然增加很多好处,包括能够进行正规的准确性和一致性 检查,能够很容易修改目标体系结构和内存组织结构,和能够通过一个详细的规格 说明用工具包自动生成【l 引。 在仿真器模拟中c p u 模拟的工作量最大,大约占整个模拟过程的8 0 工作量, 而除了一些中断模拟外,指令集模拟几乎是c p u 模拟的全部工作量。指令集描述语 言( i s d l ) 正是从体系结构描述语言中剥离出来,专门针对不同体系或特定体系的 描述语言,用于描述指令集合和处理器状态,并通过工具链自动生成指令集仿真器 ( i s s ) ,虽然是从机器语言中剥离出来,但是严格上讲它也是一门体系结构描述语 言,属于机器语言的范畴【2 0 1 。 i s d l 指令集描述语言的概念,最早由麻省理工大学提出,它区别于一般的机 器或体系描述语言,它仅限于指令集或c p u 描述。由于针对性强,所以它在指令 集描述上,可以做到更加直观,更加简单,同样在自动产生代码上,也可以更加清 晰和更有扩展性。 3 2i s d l 文法 一个i s d l 描述文件就是一篇容易阅读的机器规格说明文本文件,每一种机器 的规格说明,都可以认为是由指令字格式部分i n s t r u c t i o nw o r df o r m a t ,全局定义 g l o b a ld e f i n i t i o n s ,存储资源定义s t o r a g er e s o u r c e s ,操作定义o p e r a t i o n s ,约束定 义c o n s t r a i n t s ,可选体系结构信息o p t i o n a la r c h i t e c t u r a li n f o r m a t i o n 六部分组成【2 1 1 。 1 i n s t r u c t i o nw o r df o r m a t 用来定义指令字的二进制表现。指令字被分成多个区域,每个区域还可以再继 续分成很多的小区域。这些区域的划分都是随意的,任何划分,甚至不划分都可以 定义相同的指令字,只要总字长一样,且位段的顺序一样。但好的划分使得其容易 理解、书写、和修改。 一1 0 华北电力大学硕士学位论文 2 g l o b a ld e f i n i t i o n s 主要定义两种类型,t o k e n s 和n o n t e m i n a l s 。t o k e n s 用于将相关的词法实体归 类,例如同一个寄存器文件里面的所有的寄存器的名字。n o n t e r m i n a l s 允许归类不 相关的词法实体,例如不同寄存器文件里面的寄存器名字。他们共同的目的都是减 少i s d l 描述的长度。因为他将多次出现的类型用一个名字代替。他们是i s d l 提取 的主要来源。 i s d l 表述一个体系的指令集,是通过描述指令集中的每个操作( 实际上就是指 令一部分) 以及他们的参数,经常这些参数都有很多的选择,而很多时候这些选择 都是相关的。如果将每一种可能都列出这显然是不可取的。 3 s t o r a g er e s o u r c e s 定义了所有存储单元。s t o r a g e 部分包括了一系列的s t o r a g e 和a l i a s 定义,前者 定义新的存储单元,后者给已经定义的存储单元重命名。s t o r a g e 定义包括以下部分, ( 1 ) 类型,表明我们定义的存储单元是什么类型。 ( 2 ) 存储单元的名字。 ( 3 ) 大小定义。单个的寄存器定义由一个整数构成,表示存储单元的大小, 其他的定义有2 个整数构成,前者表示个数,后者表示大小。m e m o r y 用来声明存 储器,其中专门用来存储指令的存储器在声明时必须用关键字i n s t r u c t i o n 来表明。 由于指令必须放在存储器中,因此存储器定义至少有一个。 4 a d r e s s i n g _ m o d ed e f i n i t i o n s 对规格说明中,指令用到的寻址方式的定义。包括3 部分。 ( 1 ) 名字定义,有两个目的,首先给操作o p e r a t i o n 命名,使得其可以在以后 使用和被识别。 ( 2 ) 位段分配,这是一个表达式,用来分配合适的二进制代码形式给指令字 的合适的区域,用来产生编译器和反编译器。 ( 3 ) 动作,用来说明寻址方式的返回值。 5 o p e r a t i o n si n s t r u c t i o ns e t 用来通过前面各段定义的信息,描述指令集中用到的所有操作,这部分是最复 杂,也是最长的。 一个o p e r a t i o n 操作定义定义了指令集中的一个单独操作包括6 部分。 ( 1 ) 名字定义,有两个目的,首先给操作o p e r a t i o n 命名,使得其可以在以后 使用和被识别。更重要的是它精确定义了汇编语法。 ( 2 ) 位段分配,这是一个表达式,用来分配合适的二进制代码形式给指令字 的合适的区域。用来产生编译器和反编译器。 ( 3 ) 动作,用来描述本操作对处理器的影响。 华北电力大学硕士学位论文 ( 4 ) 副影响动作,和上面一样用来描述该指令可能产生的副作用。 ( 5 ) 说明各种c o s t 。 ( 6 ) 周期描述。用来定义指令的各种周期参数。 6 c o n s t r a i n t s 为了使得鉴别不正确的指令和操作简化,i s d l 支持约束定义,从本质上讲,它 们就是一些应用在这些指令上的布尔条款。即使某条指令仅违背了一条约束,那么 这条指令也是不合法的,从约束中的信息可以知道哪条操作或者指令是错误的。从 而使得这条指令得以改正瞄】。 3 3i s d lb n f 范式归纳 根据上节的分析可以归纳出i s d l 为属性文法,把每个文法符号和一组属性相 关联,并把产生式附加上语义规则,属性和变量一样,可以进行计算和传递。属性 加工的过程即是语义处理的过程。对于属性文法的每一个产生式都配备了一组属性 的计算规则,称为语义规则,对产生式右边的继承属性和出现在产生式左边的综合 属性,都必须提供一个计算规则。据此归纳出i s d lb n f 范式,为能更清楚地认识 到看到i s d l 的文法结构2 3 1 。节选如下。 n a m e:= a - z a - z a - z a - z 0 - 9 】+ i n t:= 一? 【o 一9 】+ h e x := 0 x 0 9 a - f + io x o 一9 a f 】+ d i g i t:= 0 - 9 】 【 - 】 产s e c t i o n f o r m a t :=s e c t i o n g l o b a ld e f t n i t i o n s 一1 2 一 华北电力大学硕士学位论文 s e c t i o n s t o r a g e s e c t i o n i n s t r u c t i o ns e t s e c t i o n c o n s t r a i n t s s e c t i o n a d d r e s s i n g 一1 3 一 华北电力大学硕士学位论文 第四章i s s 自动生成工具设计 4 1 自动生成工具概述 准确的说,设计的是i s s 库自动生成工具,不是直接生成i s s 本身的自动生成 工具。按照本设计产生一个新指令集仿真器需要经过一下四个步骤。 1 书写指令集的i s d l 描述。 2 调用自动生成工具。 3 产生和编译i s s 库。 4 调用i s s 库的函数来编写和编译最终的仿真器。 自动生成工具命名为i s s a u t og e n e r a t o r ,是在l i n u x 下用c 编写的,然后通过 g c c 编译生成最终可执行文件。使用它最终生成的i s s 库命名为i s sl i b r a r y ,在l i n u x 环境中,直接进去i s s文件夹输入即可进行编译。 如图4 - 1 是 一_ l i b r a r y 源码的m 文a 件k e i s s a u t og e n e r a t o r 目录结构示意图。 图4 1i s s _ a u t o _ g e n e r a t o r 目录结构图 一1 4 一 华北电力大学硕士学位论文 s r c 分为里面有g c p ,i r g ,c o m m o n 3 个文件夹。g c p 里面存放g c p 用到的源文件。 i r g 存放i r g 需要用到的源文件。c o m m o n 存放着i r g 和g e p 公共的头文件。 在i s s _ a u t o g e n e r a t o r 里面还存放着i r g 和g e p 可执行文件,它们不属于源码, 是调用m a k e f i l e 生成的可执行文件,用于后来把i s d l 描述文件作为输入生成i s s 库。r e a d m e 里面存放基本使用信息。 如图4 2 能更清楚i s s 库自动生成工具的工作流程。 图铊i s s 库自动生成工具工作流程 如上图所示,自动生成工具通过中问格式的指令集描述,生成一系列的文件, 包括指令代码文件,译码文件,函数代码文件,m i s c 文件。这些文件加上一些外部 文件一起通过g c c 编译以后可以生成最终a 为后缀的静态库文件,是编译好的库文 件。这些文件放在l i b r a r y 目录下,里面包含编译底层的和公用的函数库,供其它程 序调用。同时也生成相应的头文件,这些头文件,必须被包括到编写的仿真器源文 件中,只有这样才能有权使用i s s 库中的函数。包括进去的方法很简单,就是直接 使用c 语言的i n c l u d e 。而且本设计已经把所有头文件都存放到文件i s se x t e m h 中。 因此在仿真器源文件中,只需要把i s se x t e r n h 这个文件包括进来就可以了。 上面是从工作流程来分析,如表4 1 是从文件的角度来分析指令集库生成过程。 表中显示了在生成一个指令集库的过程中,按顺序哪些文件被产生了。假如用i s d l 为a r m 编写一个规格说明文件,并为这个规格说明文件取名为a r m i s d l ,注意这里 后缀是固定的,可以让人明确文件的类型。那么首先,这个a r l n i s d l 通过i r g 中间表 现格式生成器生成a r m i r 中闻表现格式,然后a r m i r 通过g e pi s s 库生成器生成一 系列的i s s 库源文件,包括i s sc o d e c ,i s sc 等。最后通过下的c 编译器t y p e s l i n u x 一1 5 华北电力大学硕士学位论文 g c c 将i s s 库源文件编译生成最终的指令集仿真器库和头文件。并且统一命名为 s i m u l a 和s i m u l h 。 表4 1 指令集库生成过程中文件流程 文件程序说明 i s d l 描述文件 a r i d i s d l l r g 中间表示格式生成器 a r i i l i r中间表示格式( 一系列的表) g e pi s s 库生成器 i s sc o d e c i s s 库源文件 i s s _ t y p e s c g c cc 语言编译器 s i m u l a函数库和头文件 s i m u l h 从i s d l 描述文件,到最终的指令集仿真库,并不是一步实现的。之所以这样 是了使得整个自动生成工具的设计具有明显模块化的特点。模块化方法使程序的结 构简明清晰,可以提高系统的可靠性。加强了系统的可维护性。能够提高系统的可 重用性。因为编写自动生成工具是个非常复杂的过程,将实现过程分割成模块,可 以将复杂的问题分成若干个相对简单的问题,将每个问题一一解决,然后将每个问 题的解决过程粘合到一起,就成了总的问题的解决了。同时也使得程序的流程简明 清晰【2 4 1 。 当自动生成工具i s sa u t og e n e r a t o r 创建一个指令集仿真库的时候,也为这个 指令集仿真器库创建了目录,这个目录的名字是固定的,统一命名为i s s 。library 如图4 3 所示,在这个目录中,i s sa u t og e n e r a t o r 为它建立了3 个子目录, 分别是s r c ,l i b 和i n c l u d e 。分别存放着指令集仿真库源文件,由源文件编译而来的 函数库,和相应的头文件。为了容易的编译指令集仿真库,指令集仿真器自动生成 一1 6 华北电力大学硕士学位论文 工具还产生了一个m a k e f i l e 。所以真正生成的只有s r c 目录和m a k e f i l e 文件。l i b 和 i n c l u d e 目录是根据源文件s o u r c e 目录编译产生的。 图4 _ 3i s s _ l i b r a r y 目录 指令集仿真器自动生成工具生成的是i s s 库的源文件,经过编译后生成最终的 i s s 库,在编写仿真器源文件的时候,需要调用i s s 库的函数。i s s 库提供了以下几 个接口函数。 1 i s s i n i t 函数 用来初始化指令集仿真器的逻辑状态。包括各个寄存器,存储器,指令计数器。 2 i s s f e t c h 函数 本函数接受一个地址参数,并把存储在内存中相应地址的指令码提取出来,然 后把指令码传递给i s sd e c o d e 函数,进行解码。 3 i s s d e c o d e 函数 这个函数接受一个指令码,返回一条具体的指令。就是把二进制的指令码翻译 成为一条有明确含义的指令。这条返回的指令其实是一个结构体,类型为 i n s t r u c t i o n t ,这是事先定义好的类型,叫做指令表格i n s t r u c t i o nt a b l e 。里面包含了 一下几个区域,如表4 2 所示。 一1 7 华北电力大学硕士学位论文 表4 2i n s t r u c t i o nt 结构 区域名字类型作用 i d e n te n 眦枚举类型的指令标志 码 i n s t r i n p u t i it 指令输入信息 i n s t r o u t p u t i it 宰指令输出信息 对于不同类型的指令,i d c a t 区域的值是唯一的。它的值是枚举类型,是用指令 的名字加上i d 这个前缀构成的。例如对于a d d 指令,他的i d e n t i f i e r 就是i da d d 。 在s i m u l h 头文件中,给出了所有的指令的i d e n t i f i e r 列表。i n s t r i n p u t 和i n s t r o u t p u t 两个区域是指令的接口部分。它们是元素表,每个元素都是i it 类型,存储了每条 指令的输入和输出信息。i it 类型也是一个表格t a b l e ,它由如表4 3 几个区域组成。 表4 3i it 结构 名字类型作用 t y p e t y p e _ p a r a m _ t 输入输出的类型 v a lv a l u et值 t y p e 区域定义了输入输出的类型。t y p e _ _ p a r a m _ t 类型是一个枚举类型定义在 i s si n c l u d e h 文件。如果输入输出的类型为参数,那么它的值就是指令码中相应代 码段表示的数字,类型就是p a r a mt 。否则它就是类型就是寄存器的名字加上t , 例如g p rt 表示寄存器g p r 。v o i dt 代表表的结束。再来看v a l 区域,如果是个 参数,那么它的值在解码这条

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论