欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

课程设计采用EDA技术设计简单微处理器

  • 资源ID:32464566       资源大小:1.60MB        全文页数:30页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

课程设计采用EDA技术设计简单微处理器

长沙理工大学计算机组成原理课程设计报告简单微处理器的设计 李江江学 院 计算机与通信工程 专 业 计算机科学与技术 班 级 085010502 学 号 200550080225 学生姓名 李江江 指导教师 肖晓丽 课程成绩 完成日期 2008年1月18日 课程设计任务书计算机与通信工程学院 计算机科学与技术专业 课程名称计算机组成原理课程设计时间20072008学年第一学期1920周学生姓名李江江指导老师肖晓丽题 目简单微处理器的设计主要内容:本课程设计要求采用EDA技术设计简单微处理器。系统设计要求采用自顶向下的设计方法。它要求完成数的输入,数的比较,数的交换和结果输出四部分。系统实现采用硬件描述语言VHDL把系统电路按模块化方式进行设计,然后进行编程、时序仿真并分析。要求:(1)通过对相应文献的收集、分析以及总结,给出相应课题的背景、意义及现状研究分析。(2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。(3)学按要求编写课程设计报告书,能正确阐述设计和实验结果。(4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。应当提交的文件:(1)课程设计报告。(2)课程设计附件(主要是源程序)。课程设计成绩评定学 院 计算机通信工程 专 业 计算机科学与技术 班 级 计算机05-02 班 学 号 200550080225 学生姓名 李江江 指导教师 肖晓丽 课程成绩 完成日期 2008年1月18日 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 年 月 日简单微处理器的设计学生:李江江 指导老师:肖晓丽摘要:本课程设计采用EDA技术设计简单微处理器。系统设计采用自顶向下的设计方法。它由数的输入,数的比较,数的交换和结果输出四部分组成。系统实现采用硬件描述语言VHDL把系统电路按模块化方式进行设计,然后进行编程、时序仿真并分析。系统结构简单,使用方便,功能齐全,精度高,具有一定的应用价值。关键词:处理器;输入;比较;交换目录1 引 言11.1课题设计的背景、目的11.2 课程设计的内容12 EDA、VHDL简介32.1 EDA简介32.2 VHDL简介3VHDL语言的特点3VHDL的设计流程43 简单微处理器的设计过程53.1设计规划53.2 各模块设计及相应程序54 系统仿真91.数的输入.92 数的比较。93 交换两个数。104 结果输出(从小到大).10结束语11致 谢12参考文献13附 录14 李江江 简单微处理器的设计 第25页 共25页 1 引 言随着社会的发展,科学技术也在不断的进步。特别是计算机产业,可以说是日新月异,而处理器,作为计算机中的一个重要部分,其性能从很大程度上决定了计算机的性能。本设计介绍的简单微处理器,要求具有以下验证程序所要求的功能:输入包含10个整数(无符号数)的数组M,按从小到大的顺序输出这10个数。1.1课题设计的背景、目的微处理器技术的发展是与微电子技术即大规模集成电路技术的发展分不开的。微电子技术以每18个月集成度提高一倍的速度迅速发展。20世纪80年代初,主要是16位微处理器8086/8088。1985年推出了80386微处理器,完成了16位体系结构向32位体系结构的转变。1989年80486出现了。80486的设计目标是提高指令执行速度和支持多处理器系统。80486在芯片内部增加一个8KB的高速缓冲存储器(cache),还增加了相当于80387的浮点部件(FPU),在基本指令的实现上,采用硬布线逻辑而不是微程序技术。1993年3月,Intel公司推出了第一代“奔腾”微处理器(Pentium),微处理器技术发展进入了一个新的阶段。到目前为止,“奔腾”已有四代产品。“奔腾”的设计思想是把如何提高微处理器内部指令执行的并行性作为主导。指令执行的并行性越好,微处理器的性能就越高。本次设计的目的就是了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。通过对实用电子称的设计,巩固和综合运用所学课程,理论联系实际,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标。1.2 课程设计的内容本设计主要介绍的设计一台简单微处理器,要求具有以下验证程序所要求的功能:输入包含10个整数(无符号数)的数组M,按从小到大的顺序输出这10个数。( 1 )程序开始及输入10个数据。( 2 )数的比较。( 3 )交换两个数。( 4 )结果输出(从小到大)。2 EDA、VHDL简介2.1 EDA简介EDA是Electronic Design Automation(电子设计自动化)的缩写,EDA技术是20世纪90年代初以来迅速发展起来的现代电子工程领域的一门新技术。它可以编程逻辑器件(PLD)为载体,以计算机为工作平台,以EDA工具软件为开发环境,以硬件描述语言(HDL)作为电子系统功能描述方式,以电子系统设计为应用方向的电子产品自动化设计过程。2.2VHDL简介VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。2.3VHDL语言的特点VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。2.4VHDL的设计流程它主要包括以下几个步骤:1.设计规范的定义这个有点象系统的设计的总体规划,就是要明确这个系统有哪些设计要求,和你要想到达的目标。2.采用VHDL进行设计描述这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。最重要还是模块划分,这个和设计者的设计水平有很大关系。 完成规划设计后,就可以编写个模块的VHDL程序了,最后将各模块的VHDL程序综合起来就完成了整个设计的VHDL描述.3.VHDL程序仿真 这个过程和其他软件语言没什么区别。4.综合、优化和布局布线综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。5.后仿真。这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。6.器件编程3 简单微处理器的设计过程3.1设计规划 计算器通过简单的数字键盘输入操作数,其中所键入的数据将被暂存在移位寄存器中,然后根据运算符执行产生不同的操作结果,所获得的运算结果再通过译码电路转移到七段显示器输出。整个微处理器的工作原理图如图3.11所示。图3.1 微处理器的工作原理图3.2 各模块设计及相应程序本系统设计了10条指令:IN1(输入到目的寄存器),MOV(将一个数送入目的寄存器),MOV1(将源寄存器中的数据存储到目的寄存器所指向的地址单元),MOV2(将源寄存器所指向的地址单元中的数送入目的寄存器), OUT1(输出),CMP(将目的寄存器和源寄存器所指向的地址单元中的数据进行比较),DEC(将目的寄存器中的数据自减一),INC(将目的寄存器中的数据自加一),JMP(无条件跳转),JB(小于跳转),下表列出了每条指令的格式、汇编符号和指令功能。表3.2 指令系统格式表助记符号指令格式功 能IN1 Rd 1000Rd (SW)->RdMOV im Rd 1001Rdim(im)>RdMOV1 Rs Rd1010Rs Rd(Rs)->RdMOV2 Rs Rd 1011 Rs Rd(Rs)>RdOUT1 Rd 1100Rs (Rs)>LEDCMP Rs Rd 1101 RsRd(Rs)-(Rd),锁存CY和ZIDEC Rd1110Rd(Rd)-1>RdINC Rd 1111 Rd(Rd)+1>RdJMP addr0110addraddr->PCJB addr0111addr若小于,则addr->PC关键程序数的选择模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX5 ISPORT( R0_B,R1_B,R2_B,R3_B,ALU_B:IN STD_LOGIC; R0_IN,R1_IN,R2_IN,R3_IN,ALU_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MUX5OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END MUX5;ARCHITECTURE A OF MUX5 ISBEGIN PROCESS(ALU_B,R3_B,R2_B,R1_B,R0_B) BEGIN IF(ALU_B=1 AND R3_B=1 AND R2_B=1 AND R1_B=1 AND R0_B=0) THEN MUX5OUT<=R0_IN; ELSIF(ALU_B=1 AND R3_B=1 AND R2_B=1 AND R1_B=0 AND R0_B=1) THEN MUX5OUT<=R1_IN; ELSIF(ALU_B=1 AND R3_B=1 AND R2_B=0 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=R2_IN; ELSIF(ALU_B=1 AND R3_B=0 AND R2_B=1 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=R3_IN; ELSIF(ALU_B=0 AND R3_B=1 AND R2_B=1 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=ALU_IN; ELSE MUX5OUT<=ALU_IN; END IF; END PROCESS;END A;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FEN2 ISPORT( MUX5_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LED_B,WR: IN STD_LOGIC; OUT_MUX3,OUT_PUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END FEN2;ARCHITECTURE A OF FEN2 ISBEGIN PROCESS(LED_B) BEGIN IF(LED_B=0 AND WR=0) THEN OUT_PUT<=MUX5_IN; OUT_MUX3<="00000000" ELSE OUT_MUX3<=MUX5_IN; END IF; END PROCESS;END A;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX3 ISPORT( SW_B,CS:IN STD_LOGIC; FEN2_IN,MUX2_2IN,SW_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MUX3OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END MUX3;ARCHITECTURE A OF MUX3 ISBEGINPROCESS(SW_B,CS) BEGIN IF(SW_B=0 AND CS=1) THEN MUX3OUT<=SW_IN; ELSIF(SW_B=1 AND CS=0) THEN MUX3OUT<=MUX2_2IN; ELSIF(SW_B=0 AND CS=0) THEN MUX3OUT<=FEN2_IN; ELSE MUX3OUT<="11101110" END IF; END PROCESS;END A;4 系统仿真4.1数的输入以下仿真波形图的测试输入为(34,15,25,92,17,06,83,68,72,87)。程序开始及输入10个数据. 图4.1中的R0控制循环, R1与用自增, R2用于保存输入的数并送到与R1对应地址的RAM中.图4.1 程序开始及输入4.2数的比较如图4.2所示,R0存放外循环的比较次数,R1存放内循环的指针。R2存放每次比较的大数, 3存放与R2比较的下一个数。如果R3>R2则跳转到交换,否则顺序执行。图4.2 数的比较4.3交换两个数。如图4.3,由于R3种的数25大于R2中的数15,则进行交换。使R2每次存入最大的值后,R3继续读入R1地址的值继续进行比较。图4.3 交换两个数4.4 结果输出图4.4中的R0控制循环, R1与用自增, R2用于输出寄存器.结果从QD输出。图中刚好从最小的数06开始输出。图4.4 结果输出结束语我在老师的细心指导和同学们的耐心帮助之下成功完成了本次实验,并能得到预期的实验结果。在这段时间内,我努力学习了计算机系统结构,VHDL等相关的各项知识,也查阅不少资料,并能够将课堂上所学的知识运用于实际的设计中,能够很好的进行理论联系实际进行开发。通过解决这次设计和设计中遇到的问题,也积累了一定的经验。对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。致 谢 本课程设计在选题和设计过程中得到了肖晓丽老师的悉心指导,肖老师多次询问课程设计进程,并多次指导我对课程设计进行修改,帮助我完善了该课程设计。在此对肖老师表示衷心的感谢。 还要感谢寝室的同学们,谢谢你们对我技术和精神上的帮助,谢谢你们。参考文献1 黄仁欣.EDA技术实用教程.北京:清华大学出版社,20062黄志鹏,付丽琴.可编程逻辑器件开发技术MAX+pius.北京:国防工业出版社,20053潘松.VHDL实用教程M.成都:电子科技大学出版社,20004 谭会生.EDA技术基础.长沙:湖南大学出版社,20045 杨刚,龙海燕.现代电子技术VHDL与数字系统设计.北京.电子工业出版社,2004 附 录程序清单:1 ALU子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALU ISPORT( AC, DR: IN STD_LOGIC_VECTOR(7 DOWNTO 0); S1, S0: IN STD_LOGIC; BCDOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CY,ZI: OUT STD_LOGIC );END ALU;ARCHITECTURE A OF ALU ISSIGNAL AA,BB,TEMP: STD_LOGIC_VECTOR(8 DOWNTO 0);BEGIN PROCESS(S1,S0) BEGIN IF(S1=0 AND S0=0) THEN BCDOUT <= AC + DR; AA<=0&AC; BB<=0&DR; TEMP <= AA + BB; CY<=TEMP(8); IF( TEMP ="100000000") THEN ZI <= 1; ELSE ZI <= 0; END IF; ELSIF(S1=0 AND S0=1) THEN BCDOUT <= AC - DR; AA<=0&AC; BB<=0&DR; TEMP <= AA - BB; CY<=TEMP(8); IF( TEMP ="000000000") THEN ZI <= 1; ELSE ZI <= 0; END IF; ELSIF(S1=1 AND S0=0) THEN AA<=0&AC; TEMP<=AA+1; BCDOUT<=TEMP(7 DOWNTO 0); CY<=TEMP(8); IF( TEMP ="100000000") THEN ZI <= 1; ELSE ZI <= 0; END IF; ELSIF(S1=1 AND S0=1) THEN AA<=0&AC; TEMP<=AA-1; BCDOUT<=TEMP(7 DOWNTO 0); CY<=TEMP(8); IF( TEMP ="000000000") THEN ZI <= 1; ELSE ZI <= 0; END IF; ELSE BCDOUT <= "00000000" CY <= 0; ZI <= 0; END IF; END PROCESS;END A;2状态条件寄存器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS74 ISPORT( LDFR:IN STD_LOGIC; CY,ZI:IN STD_LOGIC; FC,FZ:OUT STD_LOGIC );END LS74;ARCHITECTURE A OF LS74 ISBEGIN PROCESS(LDFR) BEGIN IF(LDFREVENT AND LDFR=1) THEN FC<=CY; FZ<=ZI; END IF; END PROCESS;END A;3 时序产生器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER ISPORT( Q,CLR:IN STD_LOGIC; T2,T3,T4:OUT STD_LOGIC );END COUNTER;ARCHITECTURE A OF COUNTER ISSIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN PROCESS(Q,CLR) BEGIN IF(CLR=0) THEN T2<=0; T3<=0; T4<=0; X<="00" ELSIF(QEVENT AND Q=1) THEN X<=X+1; T2<=(NOT X(1) AND X(0); T3<=X(1) AND (NOT X(0); T4<=X(1) AND X(0); END IF; END PROCESS;END A;4.程序计数器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PC ISPORT( LOAD,LDPC,CLR:IN STD_LOGIC; BUS_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); PCOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END PC;ARCHITECTURE A OF PC ISSIGNAL QOUT: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(LDPC,CLR,LOAD) BEGIN IF (CLR=0) THEN QOUT<= "00000000" ELSIF (LDPCEVENT AND LDPC=1) THEN IF (LOAD=0) THEN QOUT<=BUS_IN; -BUS->PC ELSE QOUT<= QOUT+1; -PC+1 END IF; END IF; END PROCESS; PCOUT<= QOUT;END A;5 ROM子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM16 ISPORT( ROMOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); RE,CS_I: IN STD_LOGIC);END ROM16;ARCHITECTURE A OF ROM16 ISBEGIN PROCESS(RE,CS_I) BEGIN IF (RE=0 AND CS_I=0) THEN CASE ADDR IS WHEN "00000000" => ROMOUT <= "10010000" -MOV 0AH R0 WHEN "00000001" => ROMOUT <= "00001010" WHEN "00000010" => ROMOUT <= "10010001" -MOV 00H R1 WHEN "00000011" => ROMOUT <= "00000000" WHEN "00000100" => ROMOUT <= "10000010" -L1: IN1 R2 WHEN "00000101" => ROMOUT <= "10101001" -MOV1 R2 R1 WHEN "00000110" => ROMOUT <= "11110001" -INC R1 WHEN "00000111" => ROMOUT <= "11010100" -CMP R1 RO WHEN "00001000" => ROMOUT <= "01110000" -JB L1 WHEN "00001001" => ROMOUT <= "00000100" WHEN "00001010" => ROMOUT <= "10010000" -MOV 09H R0 WHEN "00001011" => ROMOUT <= "00001001" WHEN "00001100" => ROMOUT <= "10010001" -MOV 00H R1 WHEN "00001101" => ROMOUT <= "00000000" WHEN "00001110" => ROMOUT <= "10110110" -L2: MOV2 R1 R2 WHEN "00001111" => ROMOUT <= "11110001" -INC R1 WHEN "00010000" => ROMOUT <= "11010001" -CMP R0 R1 WHEN "00010001" => ROMOUT <= "01110000" -JB L4 WHEN "00010010" => ROMOUT <= "00011111" WHEN "00010011" => ROMOUT <= "10110111" -MOV2 R1 R3 WHEN "00010100" => ROMOUT <= "11011110" -CMP R3 R2 WHEN "00010101" => ROMOUT <= "01110000" -JB L3 WHEN "00010110" => ROMOUT <= "00011001" WHEN "00010111" => ROMOUT <= "01100000" -JMP L2 WHEN "00011000" => ROMOUT <= "00001110" WHEN "00011001" => ROMOUT <= "10101001" -L3: MOV1 R2 R1 WHEN "00011010" => ROMOUT <= "11100001" -DEC R1 WHEN "00011011" => ROMOUT <= "10101101" -MOV1 R3 R1 WHEN "00011100" => ROMOUT <= "11110001" -INC R1 WHEN "00011101" => ROMOUT <= "01100000" -JMP L2 WHEN "00011110" => ROMOUT <= "00001110" WHEN "00011111" => ROMOUT <= "11100000" -L4: DEC R0 WHEN "00100000" => ROMOUT <= "10010001" -MOV 00H R1 WHEN "00100001" => ROMOUT <= "00000000" WHEN "00100010" => ROMOUT <= "11010100" -CMP R1 R0 WHEN "00100011" => ROMOUT <= "01110000" -JB L2 WHEN "00100100" => ROMOUT <= "00001110" WHEN "00100101" => ROMOUT <= "10010000" -MOV 0AH R0 WHEN "00100110" => ROMOUT <= "00001010" WHEN "00100111" => ROMOUT <= "10010001" -MOV 00H R1 WHEN "00101000" => ROMOUT <= "00000000" WHEN "00101001" => ROMOUT <= "10110110" -L5: MOV2 R1 R2 WHEN "00101010" => ROMOUT <= "11110001" -INC R1 WHEN "00101011" => ROMOUT <= "11001000" -OUT1 R2 WHEN "00101100" => ROMOUT <= "11010100" -CMP R1 R0 WHEN "00101101" => ROMOUT <= "01110000" -JB L5 WHEN "00101110" => ROMOUT <= "00101001" WHEN "00101111" => ROMOUT <= "11001000" -L6: OUT1 R2 WHEN "00110000" => ROMOUT <= "01100000" -JMP L6 WHEN "00110001" => ROMOUT <= "00101111" WHEN OTHERS => NULL; END CASE; END IF; END PROCESS;END A;6.RAM子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY RAM IS PORT( WR,CS:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0) );END RAMARCHITECTURE A OF RAM ISTYPE MEMORY IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(CS,WR) VARIABLE MEM: MEMORY; BEGIN IF (CS=0) THEN IF (WR=0) THEN MEM(CONV_INTEGER(ADDR(4 DOWNTO 0):=DIN; ELSIF(WR=1) THEN DOUT <= MEM(CONV_INTEGER(ADDR(4 DOWNTO 0); END IF; END IF; END PROCESS;END A;7选择对ROM或者RAM进行操作的二选一选择器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX2_2 ISPORT( R_R:IN STD_LOGIC; ROM_IN,RAM_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MUX2_2OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END MUX2_2;ARCHITECTURE A OF MUX2_2 ISBEGIN PROCESS(R_R,ROM_IN,RAM_IN) BEGIN IF(R_R=0)THEN MUX2_2OUT<=ROM_IN; ELSE MUX2_2OUT<=RAM_IN; END IF; END PROCESS;END A;8.五选一选择器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX5 ISPORT( R0_B,R1_B,R2_B,R3_B,ALU_B:IN STD_LOGIC; R0_IN,R1_IN,R2_IN,R3_IN,ALU_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MUX5OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END MUX5;ARCHITECTURE A OF MUX5 ISBEGIN PROCESS(ALU_B,R3_B,R2_B,R1_B,R0_B) BEGIN IF(ALU_B=1 AND R3_B=1 AND R2_B=1 AND R1_B=1 AND R0_B=0) THEN MUX5OUT<=R0_IN; ELSIF(ALU_B=1 AND R3_B=1 AND R2_B=1 AND R1_B=0 AND R0_B=1) THEN MUX5OUT<=R1_IN; ELSIF(ALU_B=1 AND R3_B=1 AND R2_B=0 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=R2_IN; ELSIF(ALU_B=1 AND R3_B=0 AND R2_B=1 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=R3_IN; ELSIF(ALU_B=0 AND R3_B=1 AND R2_B=1 AND R1_B=1 AND R0_B=1) THEN MUX5OUT<=ALU_IN; ELSE MUX5OUT<=ALU_IN; END IF; END PROCESS;END A;9.一分二分配器子模块源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FEN2 ISPORT( MUX5_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LED_B,WR: IN STD_LOGIC; OUT_MUX3,OUT_PUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END FEN2;ARCHITECTURE A OF FEN2 ISBEGIN PROCESS(LED_B) BEGIN IF(LED_B=0 AND WR=0) THEN OUT_PUT<=MUX5_IN; OUT_MUX3<="00000000" ELSE OUT_MUX3<=MUX5_IN; END IF; END PROCESS;END A;10.三选一选择器子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX3 ISPORT( SW_B,CS:IN STD_LOGIC; FEN2_IN,MUX2_2IN,SW_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MUX3OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END MUX3;ARCHITECTURE A OF MUX3 ISBEGINPROCESS(SW_B,CS) BEGIN IF(SW_B=0 AND CS=1) THEN MUX3OUT<=SW_IN; ELSIF(SW_B=1 AND CS=0) THEN MUX3OUT<=MUX2_2IN; ELSIF(SW_B=0 AND CS=0) THEN MUX3OUT<=FEN2_IN; ELSE MUX3OUT<="11101110" END IF; END PROCESS;END A;-25-

注意事项

本文(课程设计采用EDA技术设计简单微处理器)为本站会员(仙***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!