(物理电子学专业论文)用硬件描述语言对微处理器的仿真.pdf_第1页
(物理电子学专业论文)用硬件描述语言对微处理器的仿真.pdf_第2页
(物理电子学专业论文)用硬件描述语言对微处理器的仿真.pdf_第3页
(物理电子学专业论文)用硬件描述语言对微处理器的仿真.pdf_第4页
(物理电子学专业论文)用硬件描述语言对微处理器的仿真.pdf_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

论文摘要 随着数字系统的复杂度和v l s i 集成度的日益提高,e d a 工具也得到了飞速发展。v h d l 的出现是e d a 发展的一个突破。 本论文采用了v h d l 正向设计,提出了一个微处理器的整体实现方案,对各个模块分 别进行了设计和测试,并给出了最终系统整体的测试仿真结果。 关键词:电子设计自动化硬件描述语言微处理器知识产权模块 a b s t r a c t w i t ht h ei n c r e a s eo fc o m p l e x i t yo fd i g i t a ls y s t e ma n di n t e g r a l i t yo fv l s i ,t h ee d at o o l sh a v e b e e ng e t t i n gar a p i dd e v e l o p m e n t i ti sar e v o l m i o nf o re d ab e c a u s eo f t h eo c c u r r e n c eo f v h d l t h i st h e s i sc a m eu pw i t has c h e m ao fas i m p l em i c r o p r o c e s s o r ,d e s i g n e da n dt e s t e de v e r y s e c t i o n ,a n ds i m u l a t e dt h ew h o l ed e s i g n e ds y s t e m k e y w o r d :v h d le d am i c r o p r o c e s s o ri pc o r e 第一章绪论 第一章绪论 随着电子技术的发展,当前数字系统的设计正朝着速度快、容量大、体积小、重量轻 的方向发展,而且当前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要 求,自上至下的逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件。上述设 计过程除了系统行为和功能描述以外,其余所有的设计过程几乎都可以用计算机来自动的 完成,做到了电子设计自动化( e d a ) 。这有利于缩短系统的设计周期,提高产品的竞争 力。 电子设计自动化( e d a ) 的关键技术之一是要求用形式化方法来描述数字系统的硬件 电路,即要用所谓硬件描述语言来描述硬件电路。 硬件描述语言的发展至今已有几十年的历史,并已成功的应用到系统的仿真、验证和 设计综合等方面。历史上曾出现过上百种的硬件描述语言,它们也曾对设计自动化起到过 促进和推动作用,但是,它们大多各自针对特定设计领域,没有统一的标准,从而是一般 用户难以使用。只有面向设计的多层次、多领域且得到一致认同的硬件描述语言才能使广 大用户接收。上世纪8 0 年代后期由美国国防部开发的v h d l 语言( v h s i ch a r d w a r e d e s c r i p t i o nl a n g u a g e ) 满足了上述的要求,并在1 9 8 7 年1 2 月由i e e e 标准化( 定为i e e es t d 1 0 7 6 1 9 8 7 标准,1 9 9 3 年进一步修订,被定为a n s i i e e es t d1 0 7 6 1 9 9 3 标准) 。它的出现 为电子设计自动化( e d a ) 的普及和推广奠定了坚实的基础。据统计,v h d l 业已被广大 设计者所接受,据称已有超过9 0 的设计者使用v h d l 来设计数字系统。使用v h d l 语 言来设计数字系统是电子设计技术的大势所趋。 1 1 现代数字系统设计的基本思想 1 1 1 传统的自下至 - ( b o t t o mu p ) 的设计方法及流程 在计算机辅助电子系统设计出现以前,人们一直采用传统的硬件电路设计方法来设计 系统的硬件,这种硬件设计方法被称为自下至上的设计方法。 自下至上的硬件电路设计方法的主要步骤是:根据系统对硬件的要求,详细编制技术瓶 格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能逆行纸 化,合理地划分功能模块,并画出系统的功能框图:接着就是进行各功能模块的细化和电 路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再运行系 统的调试,最后完成整个系统的硬件设计。 对b o t t o mu p 的设计方法而言,系统硬件的设计是从选择具体元、器件开始的。笋厍 这些元、器件进行逻辑电路设计,完成系统各独立功能模块设计,然后再将各功能框头连 接起来,完成整个系统的硬件设计。上述过程从最底层开始设计,然后逐罢向上,夏毛至 最高层设计完毕,故将这种设计方法称为自下至上的设计方法。 从上述可以看出,b o t t o mu p 设计方法有一个致命的缺点:在系统硬7 牛设计的后疑连 行仿真和调试,仿真和调试通常只能在后期完成系统硬件设计以后才能进7 i ,因为j 三行仿 真和调试的仪器一般为系统仿真器、逻辑分析仪和示波器等,因此只有在硬件系统e 经构 成以后才能使用。系统设计时存在的问题只有在后期才能较容易发现,这样,传统的磋件设 计方法对系统设计人员有较高的要求,一旦考虑不周系统设计存在较大缺舀,那么就有可能 要重新设计系统,使得设计周期也大大增加。 第一章缝论 1 1 2t o pd o w n 豹设计愚怨 所谓t o pd o w n ,也就是自上至下的设计方法,就是从系统总体要求出发,自上至下地 逐步烬设诗内容缨 ,最蜃竞残系统硬传数整体设计。丧利用v h d l 蕊璜佟设计方法孛, 设计者将自上至下分成3 个层次对系统硬件进行设计。 第一层次是抒兔掭述。掰谓抒为描述,实质土就是瓣整个系统静数学模型静描述。一 般来说,对系统进行行为描述的耳的是试图在系统设计的初始阶段,通过对系统行为描述 的仿真来发现设计中存在的阿题。在行为描述阶段,并不真正考虑其实际的操作和葬法用 幢么方法来实璎,考瘩更多瓣是系绫的续构及其工作过瑕是否瞧达到系绫设计援格蒜的要 求。 铡细要设计一块计簿祝的接西卡,w 戳先稍用v h d l 提供豹强大的行为级抽象靛力, 将输入信号和输出信号的时序关系进行确定,也就是说达到如下要求:奁输入时序的激励 下,系统内部各功能模块都能提供各自的某种相应时序信号,从而使整个系统的输出时序 达到设诗要求。当逶避行必缀鳇铸囊露,裁霹鞋说菠静这个设诗豹模型是正确匏。程越基 础上再改写该程序。使其语旬表达式易予用逻辑元件来实现。:i 衷是第= 层次所要做的正作 第二层次是r t l 方式籀述:遮一嫠次称为寄存器传输摇逮( 又称数据流描述) 。如前所 述。雕行为方式撼述的系统缨构醣程序,其抽象程度离,很难盛接映射到县体逻辑爨件结 构的硬件实现。要想得到硬件的具体实现。必须将行为方式描述的v h d l 语言程序改写为 r t l 方式撼述熬v h d l 语言程痔:_ | 叠就楚说,系统采瘸p t l 方式送行箍遴,考貔逶幸子逻辑 综合。 第三层次是邋辑综食。逻辑综含这一阶段是和掰逻辑综合工具,将r t l 方斌插述的程 序转换成用綦本逻辑元传表承的文l 牛( 门级网络表) 。此时,如暴露饕,可以将逻辑综合缝 粜以逻辑原理图方式输出。也就是说,逻辑综合的结果相当于在人工设计硬件电路时,根 攒系统要求疆出了系统静电凝理霞。就嚣对逻辑综合结栗在门电路缀上孬进行仿真,并检 鸯定时关系。如果一切都正常,那么系统的硬件设计就基本结束。如果在3 个层次的某个 艨次上发现有问磁,都应返回上一层,蒜我和修改相应的错误,然詹再向下继续未完咐工 作。 在用v h d l 语言设计系统硬件时,无论是设计一个局部电路。还魑设计由多块插件板组 成翡复杂系统,上述鑫上至下豹3 令屡次豹设计步骤是盛不可少静。乖j 瘸裔上至下设计系 统硬件的过程如下页图所示。由自上至下的设计过程可知,从总体行为设计开始到最终逻 辑综合形成湖络袭为止,每一步都簧进行仿真检查,这样有利于尽早发现系统设计中存在 的闽题,扶蠢可以大大缩短系统硬转的设每 周甥。这是雳v h d l 语富设诗系统硬转懿最突 出的优点之一。 2 第一章绪论 数字系统自动设计的流程 1 2 v h d l 简介 自从计算机诞生以来,数字系统设计历来存在两个分支,即系统硬件设计和系统软件设 计。同样,设计人员也因工作性质不同,被分成两群:硬件设计人员和软件设计人员。他们各 自从事各自的工作,很少涉足对方的领域。特别是软件设计人员更是如此。但是,随着计算机 技术的发展和硬件描述语言h d l ( h a r d w a r ed e s c r i p t i o nl a n g u a g e ) 的出现,这种界线己经被# 破。数字系统的硬件构成及其行为完全可以用h d l 语言来描述和仿真。这样,软件设计、 员也同样可以借助h d l 语言,设计出符合要求的硬件系统。不仅如此,利用v h d l 语言来设 计系统硬件与利用传统方法设计系统硬件相比,还带来了许多突出的优点。它是硬件设计领 域的一次变革,对系统的硬件设计将产生巨大的影响。 1 2 1 v h d l 程序结构 v h d l 把一个任意复杂度的电路模块的模型视作一个单元。一个单元又可分为接口( b 后称作设计实体,以关键字e n t i t ? 来标识) 部分和描述体( 以后称作结构体,以戋键字 a r c h i t e c t u r e 来标识) 部分。一个单元只有个设计实体,而结构体的个数不限。没计7 - 体车 提供该设计单元的公共信息( 例如接口信息) ,而结构体则用于定义该设计单元的内;操作 特性。一个设计实体和某一特定的结构体合起来共同定义一个元件模型。 下面以一个带允许端1 2 进制同步计数器为例说明v h d l 程序的基本形式。 l i b r a r yi e e e ;一前三行为库说明 u s ei e e es t d l o g i c _ 11 6 4 a l l ; u s ei e e e s t d l o g i c _ a r i t h a l l ; e n t i t yc o u n ti s 一实体c o u n t 的开始 一 第一章绪论 p o r t ( c l k ,c l r , e n :i ns t d _ l o g i c ;一定义芯片的对外接1 :2 引脚 q a , q b ,q c ,q d :o u ts t d _ l o g i c ) ; e n dc o u n t ;实体结束 a r c h i t e c t u r er t lo f c o u n ti s 一实体c o l m t 的结构体n 】的开始 s i g r u ae o u n t 4 :s t d _ l o g i c _ _ v e c t o r ( 3d o w n t oo ) ;- - 内部信号的定义 b e g i n q a = c o u n t 4 ( 0 ) ; q b = c o u n t 4 ( 1 ) ; q c = c o u n t 4 ( 2 ) ; q d = c o u n t 4 ( 3 ) ; p r o t c e s s ( c l k ,c l r ) 一进程开始,并以输入信号c l k ,c l r 为敏感量 b e g i n i f ( c l r = 1 、t h e n c o u n t 4 = ”0 0 0 0 ”:一若复位,则置0 e l s i f ( c l k e n e n ta n dc l k = 1 ) t h e n 一判断是否有时钟的上升沿 l f ( e n = 1 11t h e n 一判断是否允许计数 i f ( c o u n t 4 = 1 0 1l ) t h e n 一计数器是否计满 c o u n t 4 t e m p ;为了运算补码m d r := 0 n o tm d r t e m p _ r e s u l t := t e m p g r + t e m p _ m d r + j i n :一- j i n 已被赋为l w h e nc p l = t e m p:= 1 & 一为了运算补码m d r n o tm d r ; t e m p _ r e s u l t :- - t e m p _ g r + t e m p _ r n d r + j i n ;- - j i n 已被赋为i w h e n o r = t e m p _ r e s u l t :- - t e m p _ g ro rt e m pm d r ; w h e na n _ d = t e m p _ r e s u l t :- - t e m p _ _ g ro rt e m p _ m d r ; w h e ne o r = t e m pr e s u l t := t e m p _ g rx o r t e m p _ m d r ; w h e no t h e r s = t e m p _ r e s u l t :2 ”x x x x x x x x x x x x x x x x x : e n dc a s e ; 在以上程序中,j i n 代表运算加减运算中的进位,t e m p _ g r 代表扩展后的g r ,t e m p _ m d r 代表扩展后的m d r ,t e m p _ r e s u l t 代表1 7 位的i 艋时运算结果。 3 2 2 测试与仿真 为了能对a l u 模块进行测试,先用映射语句将a l u 模块映射到测试程序中。 a l uc o m p o n e n t :e n t i t yw o r k a l u ( r t l ) p o r tm a p ( a l u _ m o d e ,g r , m d r , f r , a l u _ r e s u l o ; 为了测试时能在“加”时产生进位,“减”时产生借位,采用了一个测试矢量, ( ”0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ”,”1 l l l l l l l l l l l l l l 0 ”) ,将它们分别施加到a l u 的两个操作数g r 、 m d r ,由于m c u 对a l u 的有效控制信号共有5 种,这样就能进行完整的测试:在每个 控制信号加到a l u 时,都会具有4 中g r 、m d r 的输入组合。具体的加载进程如下: p r o c e s s b e g i n f o r ii n o t o1 2l o o p f o r ji n o t o1l o o p g r = m y _ v e c t o r 0 ) 一。 堑主兰型盟丝一,:j f o r k i n o t o1l o o p m d r = m y _ v e c t o r ( k ) ; w a i t f o r 2 0 n s ; e n dl o o p ; e n dl o o p ; a l u _ m o d e = o p e r i g h t o f ( a l u _ m o d e ) ; e n dl o o p ; w a l t ; e n dp r o c e s s ; 这样就能对每种可能出现的情况进行了测试,保证了测试的完整性。在对测试程序进 行仿真时,可以得到如下输出结果,经过分析可以看到,仿真后的输出结果是完全理想的。 从而就完成了对a l u 模块的设计和仿真。 3 3 寄存器阵列( r f u ) 的设计 从第二章中我们知道,在本系统中由几个非常重要的片内寄存器,如:指令寄存器( i r ) , 程序计数器( p c ) ,通用寄存器( g r 0 g r 4 ) ,堆栈指针( s p ) ,它们都是在寄存器阵列 单元中定义,并根据m c u 的控制信息对其进行维护。因此,本单元的所应完成的功能即 是能在m c u 的控制下对以上各寄存器进行初始化和根据要求进行赋值。 3 3 1 模块的设计 由于s p 所使用的寄存器为g r 4 ,因此对s p 的控制与g r ( i ) 的控制是不可分离的: 相对而言,p c 及i r 的控制是彼此无关的,因此可以将本模块分为三个小块:p c 部分,i r 部分,g r s p 部分。 1 、对寄存器p c 的控制 本部分应根据m c u 对其的控制信号p c u _ m o d e 对p c 寄存器进行赋值。由于系统默认 6 第三章各模块的设计 程序的执行从地址0 0 0 0 h 开始执行,所以当接到初始化控制信号i n i t 时,应该将p c 赋值 为0 0 0 0 h ;当控制信号为m a r 2 p c 或m d r 2 p c 时,应将总线i n t e r n a l _ b u s 的值赋给p c ; 当m c u 控制为p c 加1 时,应将p c 值加l ,但应先对p c 值进行判断,当其当前值 为6 5 5 3 5 时,即p c 已经指向外存的最末,应将0 0 0 0 h 赋给p c ;其余的m c u 控制信号都 应被本部分忽略,即维持p c 现有值不变。 为了系统的综合,本部分在设计时采用了状态机模型:对p c 的赋值采用条件信号代 入语句,赋给一临时变量,在系统时钟为下降沿时( 在此之前的上升沿,m c u 给出控制信 号) ,将该临时变量赋给p c 。 2 、对指令寄存器i r 的控制 m c u 对i r 的控制只有两种:初始化i n i t 和在节拍p 3 时将m d r 中的数据送入i r 。在 i n i t 时,i r 控制部分应将i r 初始化为0 0 0 0 h ,即空操作n o p :当m c u 控制m d r 入i r 时,应将m i u 从外存读入到总线上的数据赋给服,以各译码;其余m c u 控制信号对本部 无效,都应被忽略。 同样,本部分采用状态机:对i r 的初始化及赋值采用条件信号代入,时钟下降沿时赋 给i r 。 3 、通用寄存器g r 及堆栈指针s p 的控制 通用寄存器共有5 个,g r ( o ) 到g r ( 4 ) ,g r ( 4 ) 作堆栈指示器用。但是决定某条 指令要对哪一个通用寄存器作用,是在指令码中体现的。m c u 通过译码,可以通过对g m a m e 型变量i n d e x 赋值,将目的通用寄存器g r ( i ) 体现出来。g r s p 控制模块可以从输入i n d e x 得知目的通用寄存器是哪一个。 在该模块中先定义了一个进程,目的是向下面的对寄存器赋值的块提供信号,以表明 将对哪一个通用寄存器进行何种操作。 在该进程中,定义了5 个标志变量( 从g r 0 到) ,以分别对应与(o)_mode g r 4m o d e g r 到g r ( 4 ) 5 个通用寄存器,根据这5 个标志变量的值的不同,下面的赋值部分才能对不 同的寄存器做出相应的赋值操作。具体对标志变量的操作如下: 曲当m c u 对寄存器阵列单元的控制信号g mm o d e 为初始化( i n i t ) 时,各个标志变 量g i ) m o d e 都被置位0 : b ) 当g r um o d e 为向g r 寄存器赋值的控制信号,如b s u 2 9 r , a l u 2 9 r , m a r 2 9 r , m d r 2 9 r 时, 则需要用一个c a s e 语句对i n d e x 进行判断,以便只对目标通用寄存器的相应标志变量赋 值为l : c 1 当g r u 为要求寄存器对其值进行保持时,即 。则各标志变量都被置为2 :m o d e h o l e d ) 对于s p ,m c u 具有专门的控制信号s p um o d e ,共有四种情况:i n i 卜一此时标志变 量g r 4m o d e 被置为0 :h o i d 一此时g r 4 被置为:i n c r 一此时被置为:_mode2 s p _ g r 4 _ m o d e 3 s pd e c r 一此时g r 4m o d e 被置为4 。注意后面两种情况是s p ,即g r 4 所专有,其余四个寄 存器都只有三种控制信息,而s p 具有五种。 对各个寄存器的对应标志变量进行了上述操作之后,接下来就可以对各寄存器进行赋 值了: 对于g r 0 到g r 3 的赋值语句是完全一样的以g r o 为例,先定义一暂时信号g r 0b u f : g r 0 _ b u f 0 ) w h e ng r 0 _ m o d e = 0e l s e i n t e r n a l b u sw h e ng r 0 _ m o d e = 1e l s e g r o ; 由此条件赋值语句可看出,当m c u 送出的控制信号g r um o d e 为i n i t 时g r ob u f 清0 ; 当为向g r 赋值时,将总线上的数据赋给g r 0 _ b u f i 其余情况( 包括g r u _ m o d e 为h o l d ) g r o _ b u f 保持不变。 1 7 苎兰主鱼壅墨塑垦堡一一 对于g r 4 ,由于又多了两种情况,所以其赋值语句如下所示: g r 4b u f = ”0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 ”w h e n g r 4 _ m o d e = oe l s e i n t e r n a lb u sw h e ng r 4m o d e = le l s e g r 4 w h e ng r 4 _ m o d e = 2e l s e g r 4 + 1 w h e ng r 4 _ m o d e = 3e l s e g r 4 - 1 : 注意到当g r 4m o d e = o 时g r 4 _ b u f 并不向g r 0 _ b u f 那样被赋为0 0 0 0 h ,而是为十进制的 6 3 ,这样做的目的是为了使堆栈在初始化后指向一个地址,以用作堆栈。当g r 4 _ m o d e = 3 、 g r 4m o d e = 4 分别对应于s p um o d e 为s p _ i n c r 、s p _ d e c r 的情况,上面的赋值语句中都采用了 对应的操作。 由于此部分采用状态机设计,在对g r 0 _ b u f 赋值后有一进程,检测到时钟c l k 的下降沿 时,将g r 0b u f 给g r o ,同样的赋值对其余通用寄存器亦适用。 对各个寄存器的操作完成之后,可以采用一个条件赋值语句,根据i n d e x 的值,将对 应的g r ( i ) 的值虹给r f u 端口的g r ,这是因为端口只能将一个寄存器的值输出,只有一 个1 6 位的输出掣。 本部分中的最后一个问题是对标志寄存器f r 进行赋值,该步操作比较简单,只需根据 最终赋给g r 的对应通用寄存器的值对f r 进行置位即可。 3 3 2 测试与仿真 为了对所设计的r f u 模块进行测试,在测试文件中对各输入信号加载不同的值,观察 输入与输出信号的值与相位关系,为了方便,在本测试中对g r 固定为g r l ;具体对本模 块的测试文件如下: b e g i n f l u _ c o m p o n e n t :e n t i t yw o r k r f u ( r t l ) p o r t m a p ( i n t e r n a l _ b u s ,i d u _ m o d e ,g r u _ m o d e , p c u _ m o d e ,s p u _ m o d e ,e l k , i n d e x ,f r , g r , i r , p c ,s p ) ; p r o c e s s - c h a ns h e n g ”c l k ” b e g i n f o r i i n1t o2 0 l o o p e l k = 1 ; w a i t f o r5n s ; e l k = 0 ; w a i t f o r5n s ; e n dl o o p ; w a i t ; e n dp r o c e s s ; i o t e m a lb u s = ”1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ”0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ”a f t e r3 0n s ; p c um o d e = i n i t , m d r 2 p c a f t e r1 0n s ,p c _ i n c ra f t e r2 0n s , r n a r 2 p ea f t e r3 0n s ,p c i n c ra f t e r4 0n s ,i n i ta f t e r5 0n s ; i d um o d e = i n i t ,m d r 2 i ra f t e r2 0a s ,i n i ta f t e r3 0n s ,m d r 2 i ra f t e r5 0n s ,i n i ta f t e r6 0n s ; s p u _ m o d e = i n i t ,s p _ _ i n c ra f t e r1 0n s ,s p _ i n e ra f t e r2 0i f l s ,s p _ d e c ra f t e r3 0n s ; 一- ,g r la f t e r2 0 0n s ,g r 2a f t e r2 6 0n s ,g r 3a f t e r3 0 0n s ; g r u _ m o d e = i n i t , b s u 2 9 ra f t e r1 0n s m d r 2 9 ra f t e r3 0n s ; 第三章备楼嶷砖谩计 i n d e x = g r l ; e n di n s t _ r f u ; 由于r f u 怒时序部件,需要有时钟c l k 的输入,所以在上面的源程序中,除了按时 阃对器输入信号赋之强,还窍一避程( p r o c e s s ) 用以产生月麓先l o 纳秒豹鞋镑信号。 通过该测试文件,所得到的仿真结果如下: 逶过对上图孛输入辕爨波形驰分据可敬毳出,对r f u 模块懿设计是会理静。 3 4 移位单元的设计 本模块被设计为组合逻辑,以便使不论每次移几位都可立即完成。 3 4 1 功能设计 移位单既模块的对雏接髓只有四个1 6 位矢量:一是来自于m c u 的控制信号b s um o d e , 以表明要进行何种移位操作;二是分别来自于r f u 和m i u 的操作数铲和m d r ,其中铲中 熬数蕊佟鸯移位搽侔的对象,瑟m d r 中救豹 挈为移位往数;爵裁是对移位结果送行输寤。 移位操作共有四种,分别为逻辑左移( 1 1 ) ,逻辑右移( r 1 ) ,算术左移( 1 a ) ,算术右移 ( r a ) 。其中n 与l a 的馘剐主要在于对予符号住的静理:h 只是将操作数左移,低位嗣0 补 足,势且符号位不如区分,被视为簧逶擞作位,恧l a 操镗则嚣搀最藏垃横为符母位,移使 过程中保持不变,其它同l l ;至于r l 与r a 同样,只是对r a 而言如果高位是l ,则需在右 移最,莲位翔1 是。 3 4 2 设计的实现 该模块的整体结构是一个c a s e 语句。各种不同操作则以相应的函数形式实现,根据 9 第三章各模块的饿计 输入m c bm o d e 的不同调用相应的黼数操作,并将函数返回值赋给b s u 的输出即可。 算术右移函数貔安壤热下 f u n c t i o nr _ a ( d :r e g t y p e ;s h i i f tw i d t h :i n t e g e r ) r e f u r f l 抟搿辫i s v a r i a b l er e s u l t :r e g t y p e ; b e g h b i f s h i r _ w i d t h = ot h e n r e s u l t :- 刊l ; e l s i f ( o s h i r _ w i d t h ) a n d ( s h i f tw i d t h w o r d _ w i d t h ) t h e n t o o p l :f o ri i n0t ow o r d _ w i d t h s h i r _ w i d t h w ll o o p r e s u l t ( i + s h i f tw i d t h ) := d ( i ) ; e n dl o o p ; l o o p 2 :f o rii n0t o , s h i f t _ w i d t h - 1l o o p r e s u l t ( i ) := d ( o ) ; e n dl o o p ; e n d i f ; r e t u r nr e s u l e n dr i g h ta r i t h ; 3 4 3 测试与仿真 为了能对各种情况进行说明,被移位的操作数分g u 选了0 0 0 1 h ,2 0 0 0 h ,8 0 0 0 h ,移位 位数匿定为2 ,并使b s u _ m o d e 循环鞠种运簿,可得仿真结果如下图掰示: 对仿襄结果避行分析可知,对b s u 的设计实琥了预定的功能。 3 5 总线选择的设计 该模块的设计亦为缀台逻辑电路,结构较简单,实质为一多路选择器:根据控制信号 第三章各模块的设计 b c um o d e 的不同而选择将相应的数据放到数据总线上去,数据来源共有六种:a l u 与b s u 的运算结果,来自于r f u 的p c 、f ,来自m d r 的m a r 、m d r 。 设计的实现较简单,用一个c a s e 语句对输入信号进行选择即可实现( 选择项可以由 仿真结果中看出) 。仿真时,分别将各输入信号置为不同的值,通过改变b c u _ m o d e ,观察 输出信号即可判断出设计是否合理。仿真结果如下: 3 6 外存的设计 外了验证整个系统设计的合理性,需要有r a m 来存储程序和数据,并与存储器接口部 件进行数据交流。该模块需要有两部分组成,即锁存器a l e 和存储器r a m ,结构图如下: p a d r d w r 3 6 1r a m 的设计 由于该系统设计为1 6 位地址,因此寻址空间可达2 ”,但为了减少仿真时间,在本设 计中的r a n l 部分只有6 位地址线,即2 6 个1 6 位存储单元只要在映射时,把从锁存器出 来的1 6 位地址线的低6 位相连即可,不会影响系统的仿真结果。 2 1 第三章各模块的设计 另外,当r d 为低电平时,应将地址a d d r 处数据放到数据线d a t a ;而在w r 为上升沿时 将d a t a 上的数据写入a d d r 所指明的地址中。 该部分实现的部分代码如下: p r o c e s s ( w r b ) b e g i n i 坟w r e v e n ta n dw r = 1 ) t h e n i f ( c s = l a n dw r = 1 1t h e n r a m ( a d d r i n ) := p a d ; e n d i f ; e n d i f e n dp r o c e s s ; p r o c e s s ( r d ,c s ) b e g i n i f ( r d = 。0 a n dc s = 1 ) t h e n p a d = r a m ( a d d r i n ) ; e l s e p a d = ”z z z z z z z z z z z z z z z z ” e n d i f e n dp r o c e s s ; 3 6 2 锁存器a l e 的设计 a l e 的设计较简单,只要用一进程来实现a l e 为下降沿时,将输入脚数据锁到输出即 可。 b e g i n i f ( a l e e v e n ta n da l e = 0 ) t h e n - x i a j i a n gy a h p a d _ _ b u f f e 唧a d ; e n d i f ; e n dp r o c e s s ; 这样,将二者用映射语句组合起来,就实现了外存的设计。 该部分所得仿真结果如下: 第= 章各模块的设计 由上图可见,向地址0 0 0 0 h 写入了一个数据1 0 2 0 h ,再从0 0 0 0 h 处读出,数据保持不 变。表示能对r a m 进行读写。 3 7 外存接口单元的设计 在本设计中,系统与外存的所有数据交换都必须通过寄存器接口单元进行,可见该模 块的设计是非常重要的。 3 7 1 功能描述 接口单元所要完成的主要功能是:从外部存储器中读取由m a r 或s p 指出的外存地址 的数据,并送入m d r ;将m d r 的数据写到由m a r 或s p 所指出的外部存储单元;完成 对寄存器m a r 、m d r 的赋值操作,即将总线上的数据写入到二者之一。以上的各种操作 是由m c u 送来的控制信息m i u _ m o d e 决定的。 3 7 2 设计的具体实现 该部分的设计采用时序逻辑,与时钟c l k 的下降沿同步( 因为m e u 被设计为在上升沿 送出各种控制信息) ,整个设计被分为几个部分: 1 、对m a r 、m d r 的赋值操作 该部分的操作采用状态机可以非常容易的实现。 根据m c u 对本模块的控制信息m i um o d e ,可以完成对二者的赋值。当控制信号为要 求将总线上的数据送入m a r 类信号时,则采用条件赋值语句将总线数据送入m a r 的缓冲量 m a r _ b u f , 否则保持不变;同样,当控制信号要求将总线数据送入m d r 时,则将总线数据送 入m d r 的缓冲量m d rb u 否则,则需判断当前是否处于读操作t 3 子态( 在该子状态读入数 据) ,若是,则将引脚( p a d ) 数据赋给m d rb u 否则保持不变。 然后,在时钟c l k 的下降沿到来时分别将m a rb u km d rb u f 赋给m a r 及m d r 。 2 、产生予状态的状态机 为了能与外存进行数据交换,m i u 模块必然要求具有产生子状态( t l ,t 2 ,t 3 ,t 4 ) 的 结构。在本设计中,四个状态的产生是由一个状态机来完成的。当前所处子状态用信号s t m e 表征,下一子状态用s 雠en e x t 表征。除了读写外存以外,所有指令执行是s t a t e 都应被预 先设定为t 4 ,这样作既不对整个程序的运行产生影响,又能在读写控制信息到来时立即进 入t l 态。 对下一子状态的确定是按照下述原则进行的: 当s t a l e 为t l 时。如果m i um o d e 为读写外存,则s t a t en e x t = t 2 ,否则s t a t en e x t - - - - t 4 ,进 入准备状态; 当s t a t e 为t 2 时,如果m i um o d e 为读写外存,则s t a t en e x t - - - t 3 ,否则s t m en e x t = t 4 , 进入准备状态; 当s t a t e 为t 3 时,s t a t en e x t - - - t 4 ; 当s t a t e 为t 4 时,如果m i um o d e 为读写外存,则s t a t en e x t - = t 1 ( 实为开始进入读写状态) , 否则s t a t en e x t - = t 4 ,继续停留在准备状态。 上述过程用一个c a s e 同步选择语句即可实现。 然后在检测到时钟上升沿到来时,将s t a t en e x t 赋给s t a t e 即可。 第三章各模块的设计 3 、对外接口( 引脚) 的控制 由于对外接口p a d 为双向e l ,因此需要作为一个双向缓冲器对待,它由一个控制信号 ( c n t l ) 控制,当e n t l 为l 时,将数据p a d _ _ b u f ( p a d 的数据缓冲) 送入p a d ,否则p a d 应处 于高阻态。 该部分实现的源代码如下: p a d _ _ b u f = m a r _ b u fw h e n ( m i u _ m o d e = r dm e mm a r o rm i u _ m o d e - t rm e mm a r ) a n ds t a t e - - t ie l s e s pw h e n ( m i u _ m o d e 2 r d _ m e m _ s po rm i u _ m o d e - 一a r _ m e m _ s p ) a n ds t a t e = t 1e l s e m d rb u rw h e n ( m i u _ m o d e = w r m e m m a ro rm i u _ m o d e - - - v v r _ m e m _ s p ) a n d ( s t a t e - - t 2o rs t a t e - r e 3 ) e l s e ”z z z z z z z z z z z z z z z z ; c n t l = 0 w h e n ( m i u m o d e = r d _ m e m _ m a ro rm i u _ m o d e w d _ m e m _ s p ) a n d ( s t a t e - = t 3o r s t a t e - - t 4 ) e l s e 1 ; p r o c e s s ( c n t l ,p a dc n t l ) b e g i n i f ( e n t l = l ) t h e n p a d = p a d _ _ b u f ; e l s e p a d _ ”z z z z z z z z z z z z z z z z ”; e n d i f ; e n dp r o c e s s ; 由于在该模块中m a r ,m d r 都被设置为输出口,在该模块内部利用该信号时,分别利 用了其缓冲。 由上面的源码可以看出,当对外存进行读、写时,作为地址的m a r 、s p 在子状态t l 时, 首先被送

温馨提示

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

评论

0/150

提交评论