移位寄存器的设计及实现.docx
《移位寄存器的设计及实现.docx》由会员分享,可在线阅读,更多相关《移位寄存器的设计及实现.docx(15页珍藏版)》请在冰点文库上搜索。
移位寄存器的设计及实现
《计算机组成原理》课程设计报告
移位寄存器的设计与实现
移位寄存器的设计与实现
摘要:
系统使用EDA技术设计了具有移位功能的寄存器,采用硬件描述语言VHDL进行设计,然后进行编程,时序仿真等。
软件基于VHDL语言实现了本设计的控制功能。
本设计根据移位寄存器的功能设计了三种不同的寄存器:
双向移位寄存器、串入串出(SISO)移位寄存器、串入并出(SIPO)移位寄存器。
整个设计过程简单,使用方便。
功能齐全,精度高,具有一定的开发价值。
关键词:
EDA;VHDL;移位寄存器
1引言
随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。
移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对移位寄存器进行编程实现。
近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:
(1)电子器件及其技术的发展将更多地趋向于为EDA服务;
(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规X的EDA工具和硬件描述语言HDL的运用;(4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
1.1课程设计的目的
在计算机中常要求寄存器有移位功能。
如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。
因此,移位寄存器的设计是必要的。
本次设计的目的就是利用计算机组成原理中移位寄存器的相关知识,通过课程设计更加深入的了解移位寄存器的功能。
了解EDA技术,并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。
通过对移位寄存器的设计,巩固和综合运用所学知识,提高对计算机组成原理的理解。
1.2课程设计的内容
本课程设计是关于移位寄存器的设计,它不仅具有存储代码的功能,而且还有左移、右移、并行输入及保持等功能。
本设计根据功能的不同,设计了三种移位寄存器。
(1)双向移位寄存器。
(2)串入串出(SISO)移位寄存器。
(3)串入并出(SIPO)移位寄存器。
2EDA、VHDL简介
2.1EDA简介
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可*性,减轻了设计者的劳动强度。
2.2VHDL
2.2.1VHDL的简介
VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage),翻译成中文就是超高速集成电路硬件描述语言。
因此它的应用主要是应用在数字电路的设计中。
诞生于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.2VHDL语言的特点
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
2.2.3VHDL的设计流程
1.设计规X的定义
明确设计的目的,进行设计的总体规划。
分析设计要求,以及自己要达到的设计目的和目标。
2.采用VHDL进行设计描述
这部分包括设计规划和程序的编写。
设计规划主要包括设计方式的选择及是否进行模块划分。
设计方式一般包括直接设计,自顶向下和自底向下设计。
3.VHDL程序仿真
对于某些人而言,仿真这一步似乎是可有可无的。
但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。
另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。
4.综合、优化和布局布线
综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
5.仿真
这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。
3移位寄存器设计过程
3.1设计规划
本设计是基于VHDL语言设计的移位寄存器,由于移位寄存器是计算机中非常重要的部件,所以本设计采用了不同的方法来实现寄存器的移位功能,具体设计的移位寄存器有:
双向移位寄存器、串入串出(SISO)移位寄存器、串入并出(SIPO)移位寄存器。
由于涉及内容比较基础,所以设计比较简单。
3.2各模块工作原理及设计
3.2.1移位寄存器的工作原理
用VHDL语言描述任意分频数的分频器,并实现占空比任意设置.每当系统时钟上升沿到来时,计数器就加计数一位(可任意设置为N位),当计数值到达预定值时就对分频时钟翻转.这样就会得到一个连续的时钟脉冲.
当移位信号到来时,移位寄存器就对存储的二进制进行移位操作.移位寄存方式可自行设置(可左移,右移,一位移,多位移位寄存)。
3.2.2双向移位寄存器的设计
电路符号:
双向移位寄存器工作原理框图。
如图3.1所示。
TDIRREG
CLKOP—L
DINOP—R
DIR
图3.1双向移位寄存器原理框图
双向移位寄存器由VHDL程序实现,下面是其中的一段VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitytdirregis
port(clk:
instd_logic;
din:
instd_logic;
dir:
instd_logic;
op_l:
outstd_logic;
op_r:
outstd_logic);
endtdirreg;
architectureaoftdirregis
signalq:
std_logic_vector(7downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifdir='0'then
q(0)<=din;
foriin1to7loop
q(i)<=q(i-1);
endloop;
else
q(7)<=din;
foriin7downto1loop
q(i-1)<=q(i);
endloop;
endif;
endif;
endprocess;
op_l<=q(7);
op_r<=q(0);
enda;
3.2.3串入串出(SISO)移位寄存器的设计
电路符号:
串入串出(SISO)移位寄存器工作原理框图。
如图3.2所示。
SISO
DATA_INDATA_OUT
CLK
图3.2串入串出(SISO)移位寄存器图元符号
串入串出(SISO)移位寄存器由VHDL程序实现。
下面是其中的部分代码:
libraryieee;
useieee.std_logic_1164.all;
entitysisois
port(data_in:
instd_logic;
clk:
instd_logic;
data_out:
outstd_logic);
endsiso;
architectureaofsisois
signalq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q(0)<=data_in;
foriin1to3loop
q(i)<=q(i-1);
endloop;
endif;
endprocess;
data_out<=q(3);
enda;
3.2.3串入并出(SIPO)移位寄存器的设计
电路符号:
串入并出(SIPO)移位寄存器工作原理框图。
如图3.3所示。
SIPO
D_IND_OUT[3…0]
CLK
图3.3串入并出(SIPO)移位寄存器工作框图
串入并出(SIPO)移位寄存器由VHDL程序实现。
下面是其中的部分代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysipois
port(d_in:
instd_logic;
clk:
instd_logic;
d_out:
outstd_logic_vector(3downto0));
endsipo;
architectureaofsipois
signalq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q(0)<=d_in;
foriin1to3loop
q(i)<=q(i-1);
endloop;
endif;
endprocess;
d_out<=q;
enda;
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].XX:
电子科技大学,2000
[2]侯伯亨,顾新.VHDL硬件描述语言及数字逻辑电路设计.XX:
XX电子科技大
2003
[3]甘登岱.EDA培训教程.:
机械工业,2005
[4]Jayaram.Bhaker.VHDL教程.:
机械工业,2006
附录
程序名:
tdirreg.vhd
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitytdirregis
port(clk:
instd_logic;
din:
instd_logic;
dir:
instd_logic;
op_l:
outstd_logic;
op_r:
outstd_logic);
endtdirreg;
architectureaoftdirregis
signalq:
std_logic_vector(7downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifdir='0'then
q(0)<=din;
foriin1to7loop
q(i)<=q(i-1);
endloop;
else
q(7)<=din;
foriin7downto1loop
q(i-1)<=q(i);
endloop;
endif;
endif;
endprocess;
op_l<=q(7);
op_r<=q(0);
enda;
程序名:
siso.vhd
libraryieee;
useieee.std_logic_1164.all;
entitysisois
port(data_in:
instd_logic;
clk:
instd_logic;
data_out:
outstd_logic);
endsiso;
architectureaofsisois
signalq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q(0)<=data_in;
foriin1to3loop
q(i)<=q(i-1);
endloop;
endif;
endprocess;
data_out<=q(3);
enda;
程序名:
siso.vhd
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysipois
port(d_in:
instd_logic;
clk:
instd_logic;
d_out:
outstd_logic_vector(3downto0));
endsipo;
architectureaofsipois
signalq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q(0)<=d_in;
foriin1to3loop
q(i)<=q(i-1);
endloop;
endif;
endprocess;
d_out<=q;
enda;
●