资源描述
长沙理工大学计算机组成原理课程设计报告移位寄存器的设计与实现 欧阳大炯学 院 计算机与通信工程 专 业 计算机科学与技术 班 级 085010502 学 号 200550080231 学生姓名 欧阳大炯 指导教师 肖晓丽 课程成绩 完成日期 2008年1月18日 课程设计任务书计算机与通信工程学院 计算机科学与技术专业 课程名称计算机组成原理课程设计时间20072008学年第一学期1920周学生姓名欧阳大炯指导老师肖晓丽题 目移位寄存器的设计与实现主要内容:本设计根据计算机组成原理中移位寄存器的相关知识,利用VHDL语言设计了三种不同的寄存器:双向移位寄存器、串入串出(SISO)移位寄存器、串入并出(SIPO)移位寄存器。要求:(1)通过对相应文献的收集、分析以及总结,给出相应课题的背景、意义及现状研究分析。(2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。(3)学生按要求编写课程设计报告书,能正确阐述设计和实验结果。(4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。应当提交的文件:(1)课程设计报告。(2)课程设计附件(主要是源程序)。课程设计成绩评定学 院 计算机通信工程 专 业 计算机科学与技术 班 级 计05-02 班 学 号 200550080231 学生姓名 欧阳大炯 指导教师 肖晓丽 课程成绩 完成日期 2008年1月18日 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 年 月 日移位寄存器的设计与实现学生:欧阳大炯 指导老师:肖晓丽摘要:系统使用EDA技术设计了具有移位功能的寄存器,采用硬件描述语言VHDL进行设计,然后进行编程,时序仿真等。软件基于VHDL语言实现了本设计的控制功能。本设计根据移位寄存器的功能设计了三种不同的寄存器:双向移位寄存器、串入串出(SISO)移位寄存器、串入并出(SIPO)移位寄存器。整个设计过程简单,使用方便。功能齐全,精度高,具有一定的开发价值。关键词:EDA;VHDL;移位寄存器目录1 引 言11.1课程设计的目的11.2 课程设计的内容12 EDA、VHDL简介22.1 EDA简介22.2VHDL22.2.3 VHDL的设计流程33 移位寄存器设计过程43.1设计规划43.2 各模块工作原理及设计43.2.1移位寄存器的工作原理43.2.2双向移位寄存器的设计43.2.3串入串出(SISO)移位寄存器的设计53.2.3串入并出(SIPO)移位寄存器的设计74 系统仿真84.1双向移位寄存器仿真图分析84.2串入串出(SISO)移位寄存器仿真图分析84.3串入并出(SIPO)移位寄存器仿真图分析8结束语10致 谢11参考文献12 欧阳大炯 移位寄存器的设计和实现 第12页 共12页 1 引 言随着社会的发展,科学技术也在不断的进步。特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对移位寄存器进行编程实现。近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:(1)电子器件及其技术的发展将更多地趋向于为EDA服务;(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言HDL的运用;(4)数字系统的芯片化实现手段已成主流。因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。1.1课程设计的目的在计算机中常要求寄存器有移位功能。如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。因此,移位寄存器的设计是必要的。本次设计的目的就是利用计算机组成原理中移位寄存器的相关知识,通过课程设计更加深入的了解移位寄存器的功能。了解EDA技术,并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。通过对移位寄存器的设计,巩固和综合运用所学知识,提高对计算机组成原理的理解。1.2 课程设计的内容本课程设计是关于移位寄存器的设计,它不仅具有存储代码的功能,而且还有左移、右移、并行输入及保持等功能。本设计根据功能的不同,设计了三种移位寄存器。 ( 1 ) 双向移位寄存器。 ( 2 ) 串入串出(SISO)移位寄存器。( 3 ) 串入并出(SIPO)移位寄存器。2 EDA、VHDL简介2.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可*性,减轻了设计者的劳动强度。2.2VHDL2.2.1 VHDL的简介 VHDL(Very-High-Speed Integrated Circuit HardwareDescription Language),翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。诞生于1982年。自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.2.2 VHDL语言的特点(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。2.2.3 VHDL的设计流程1.设计规范的定义明确设计的目的,进行设计的总体规划。分析设计要求,以及自己要达到的设计目的和目标。2. 采用VHDL进行设计描述这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计。3. VHDL程序仿真对于某些人而言,仿真这一步似乎是可有可无的。但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。4. 综合、优化和布局布线综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。5仿真这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。3 移位寄存器设计过程3.1设计规划本设计是基于VHDL语言设计的移位寄存器,由于移位寄存器是计算机中非常重要的部件,所以本设计采用了不同的方法来实现寄存器的移位功能,具体设计的移位寄存器有:双向移位寄存器、串入串出(SISO)移位寄存器、串入并出(SIPO)移位寄存器。由于涉及内容比较基础,所以设计比较简单。3.2 各模块工作原理及设计3.2.1移位寄存器的工作原理用VHDL语言描述任意分频数的分频器,并实现占空比任意设置.每当系统时钟上升沿到来时,计数器就加计数一位(可任意设置为N位),当计数值到达预定值时就对分频时钟翻转.这样就会得到一个连续的时钟脉冲.当移位信号到来时,移位寄存器就对存储的二进制进行移位操作.移位寄存方式可自行设置(可左移,右移,一位移,多位移位寄存)。3.2.2双向移位寄存器的设计电路符号:双向移位寄存器工作原理框图。如图3.1所示。 TDIRREGCLK OPLDIN OPRDIR 图3.1 双向移位寄存器原理框图双向移位寄存器由VHDL程序实现,下面是其中的一段VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tdirreg is port (clk: in std_logic; din: in std_logic; dir : in std_logic; op_l: out std_logic; op_r: out std_logic);end tdirreg;architecture a of tdirreg is signal q: std_logic_vector(7 downto 0);begin process(clk) begin if clkevent and clk= 1then if dir = 0 then q(0) = din; for i in 1 to 7 loop q(i) = q(i-1); end loop ; else q(7) = din; for i in 7 downto 1 loop q(i-1) =q(i); end loop ; end if; end if; end process ; op_l = q(7); op_r = q(0);end a;3.2.3串入串出(SISO)移位寄存器的设计电路符号:串入串出(SISO)移位寄存器工作原理框图。如图3.2所示。 SISODATA_IN DATA_OUTCLK 图3.2 串入串出(SISO)移位寄存器图元符号串入串出(SISO)移位寄存器由VHDL程序实现。下面是其中的部分代码:library ieee;use ieee.std_logic_1164.all;entity siso is port(data_in : in std_logic; clk : in std_logic; data_out : out std_logic);end siso;architecture a of siso is signal q : std_logic_vector(3 downto 0);begin process(clk) begin if clk event and clk = 1 then q(0)=data_in; for i in 1 to 3 loop q(i)=q(i-1); end loop; end if; end process; data_out=q(3);end a;3.2.3串入并出(SIPO)移位寄存器的设计电路符号:串入并出(SIPO)移位寄存器工作原理框图。如图3.3所示。 SIPOD_IN D_OUT30CLK 图3.3 串入并出(SIPO)移位寄存器工作框图串入并出(SIPO)移位寄存器由VHDL程序实现。下面是其中的部分代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sipo is port(d_in : in std_logic; clk : in std_logic; d_out : out std_logic_vector(3 downto 0);end sipo;architecture a of sipo is signal q : std_logic_vector(3 downto 0);begin process(clk) begin if clk event and clk = 1 then q(0)=d_in; for i in 1 to 3 loop q(i)=q(i-1); end loop; end if; end process; d_out=q;end a;4 系统仿真4.1双向移位寄存器仿真图分析双向移位寄存器的仿真图,如图4.1所示。图 4.1 双向移位寄存器仿真图对其仿真图进行仿真分析:dir为一个控制信号,clk为时钟控制信号,din为输入信号,表示要存入的数据,op_r表示右移(从高位到低位)后得到的结果,op_l表示左移(从低位到高位)后得到的结果。如图所示:当dir为0时,op_r输出的是右移的结果,遇到一个clk的下降沿时,输入数据右移一位。op_l输出的是左移的结果,遇到一个clk的下降沿时,输入数据左移一位。当dir为1时,op_r与op_l与上述相反。4.2串入串出(SISO)移位寄存器仿真图分析串入串出(SISO)移位寄存器的仿真图,如图4.2所示。图4.2串入串出(SISO)移位寄存器的仿真图对其仿真图进行仿真分析:clk为时钟控制信号,data_in为输入信号,表示要存入的数据。data_out为输出信号,表示输出的数据。如图所示:当data_in串行输入数据时,遇到一个时钟信号clk,输入数据向右移位,并串行输出数据。4.3串入并出(SIPO)移位寄存器仿真图分析串入并出(SIPO)移位寄存器的仿真图,如图4.3所示。图4.3 串入并出(SIPO)移位寄存器仿真图对其仿真图进行仿真分析:clk为时钟控制信号,d_in为串行输入信号,d_out为四位并行输出信号,串行输入信号四位为一组,该信号一位一位的按顺序存入寄存器。如图所示:当串行输入四位数据时,输出一次性并行输出。结束语经过了两周的学习和工作,我终于完成了移位寄存器的设计和实现及相关论文。从开始接到课程设计题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的一项比较大的项目。在这段时间里,我学到了很多知识也有很多感受,从课程设计,EDA,VHDL等相关知识很不了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。 虽然我的论文作品不是很成熟,还有很多不足之处,但我可以自豪的说,这里面的每一段代码,都有我的劳动。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。 这次做论文的经历也会使我受益匪浅,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后学习中激励我继续进步。致 谢本设计在肖晓丽老师的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计和调试,无不凝聚着肖老师的心血和汗水,由于肖老师是我们操作系统的老师,大家都认识,所以在课程设计过程中始终感受着阳老师的精心指导和无私的关怀,我受益匪浅。在此向肖晓丽老师表示深深的感谢和崇高的敬意。 不积跬步何以至千里,本设计能够顺利的完成,也归功于肖老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了她的悉心帮助和支持,才使我的课程设计工作顺利完成。参考文献 1潘松.VHDL实用教程M.成都:电子科技大学出版社,20002 侯伯亨,顾新.VHDL硬件描述语言及数字逻辑电路设计.西安:西安电子科技大出版社,20033 甘登岱.EDA培训教程.北京:机械工业出版社,2005 4 Jayaram.Bhaker.VHDL教程.北京:机械工业出版社,2006附录程序名:tdirreg.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tdirreg is port (clk: in std_logic; din: in std_logic; dir : in std_logic; op_l: out std_logic; op_r: out std_logic);end tdirreg;architecture a of tdirreg is signal q: std_logic_vector(7 downto 0);begin process(clk) begin if clkevent and clk= 1then if dir = 0 then q(0) = din; for i in 1 to 7 loop q(i) = q(i-1); end loop ; else q(7) = din; for i in 7 downto 1 loop q(i-1) =q(i); end loop ; end if; end if; end process ; op_l = q(7); op_r = q(0);end a;程序名:siso.vhdlibrary ieee;use ieee.std_logic_1164.all;entity siso is port(data_in : in std_logic; clk : in std_logic; data_out : out std_logic);end siso;architecture a of siso is signal q : std_logic_vector(3 downto 0);begin process(clk) begin if clk event and clk = 1 then q(0)=data_in; for i in 1 to 3 loop q(i)=q(i-1); end loop; end if; end process; data_out=q(3);end a;程序名:siso.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sipo is port(d_in : in std_logic; clk : in std_logic; d_out : out std_logic_vector(3 downto 0);end sipo;architecture a of sipo is signal q : std_logic_vector(3 downto 0);begin process(clk) begin if clk event and clk = 1 then q(0)=d_in; for i in 1 to 3 loop q(i)=q(i-1); end loop; end if; end process; d_out=q;end a;
展开阅读全文