摘要:系统使用EDA技术设计了具有移位功能的寄存器,采用硬件描述语言VHDL进行设计,然后进行编程,时序仿真。软件基于Verilog语言实现了双向32位移位寄存器的控制功能。通过本设计熟悉QuartusII环境下的硬件描述操作流程,掌握基本的Verilog语法与编写风格。 关键字:EDA;Verilog;32位双向移位寄存器
1.引言
随着社会的发展,科学技术也在不断的进步。特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:
(1)电子器件及其技术的发展将更多地趋向于为EDA服务; (2)硬件电路与软件设计过程已高度渗透;
(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言HDL的运用; (4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对32位双向移位寄存器进行编程实现。
2.课程设计的目的
在计算机中常要求寄存器有移位功能。如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。因此,移位寄存器的设计是必要的。
本次设计的目的就是利用计算机组成原理中移位寄存器的相关知识,通过课程设计更加深入的了解移位寄存器的功能。了解EDA技术,并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。通过对移位寄存器的设计,巩固和综合运用所学知识,提高对计算机组成原理的理解。
3.课程设计的内容
本课程设计是带有32位双向移位寄存器。CLK是移位时钟信号,load是并行数据预置使能信号,QB是串行输出端口。此移位寄存器的工作方式是:当CLK的上升沿到来时过程被启动,如果这时预置使能load为低电平,LEFT_RIGHT为低电平,循环右移;如果预置使能load为低电平,LEFT_RIGHT为高电平,循环左移。
4 Verilog HDL介绍
4.1Verilog语言的特点
1
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
4.2 .Verilog HDL的设计流程 4.2.1设计规范的定义
明确设计的目的,进行设计的总体规划。分析设计要求,以及自己要达到的设计目的和目标。
4.2.2 采用Verilog HDL进行设计描述
这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计。
4.2.3 Verilog HDL程序仿真
对于某些人而言,仿真这一步似乎是可有可无的。但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。
4.2.4 综合优化和布局布线
综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
4.2.5 仿真
这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。
5.总体设计方案
5.1移位寄存器的工作原理
2
用VHDL语言描述任意分频数的分频器,并实现占空比任意设置.每当系统时钟上升沿到来时,计数器就加计数一位(可任意设置为N位),当计数值到达预定值时就对分频时钟翻转.这样就会得到一个连续的时钟脉冲.
当移位信号到来时,移位寄存器就对存储的二进制进行移位操作.移位寄存方式可自行设置(可左移,右移,一位移,多位移位寄存)。移位寄存器需要将寄存器中的各位数据在移位控制信号的作用下,依次向高位或是低位移动移位。
移位寄存器中的数据可以在移位脉冲作用下一次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。
5.2基本设计思路
在EDA课程学习过程中,我们学习了移位寄存器的设计,从而实现但方向的数据移动;也学习模式可控制的移位寄存器的设计。
该设计是设计一个双向的32位的移位寄存器。要求,该寄存器有一个异步清零端,低电平有效。还有一个load装载数据的信号输入,用于预置数据,还有一个控制左移或是右移的信号输入
LEFT_RIGHT。因此,我们可以通过所学知识,设置CLK为移位时钟信号,LOAD为数据预置使能信号,QB是串行输出信号。三十二位双向移位寄存器工作原理框图如表一。
表一 双向 32位移位寄存器功能表
6.32双向移位寄存器的设计
6.1 双向移位寄存器的设计
双向移位寄存器可以在移位寄存器的基础之上添加移位模式控制数来控制。通过移位模式控制数的工作时序来控制其移位方向。本设计中预置的移位模式控制数为LEFT_RIGHT,若上升沿到来时,LEFT_RIGHT送入的是低电平,则循环右移;LEFT_RIGHT送入的是高电平,则循环左移。这样通过控制端LOAD的的控制,以及移位模式控制数LEFT_RIGHT的时序显示,即可实现双向移位寄存器的功能。如图一所示为双向移位寄存器工作模式简图
D1 D2 D3 D4 D5 … D31 D32
3
LEFT_RIGHT=0 右移输入
LEFT_RIGHT=1 左移输出
图一 双向移位寄存器工作模式简图
. 输出
输入
6.2 32位双向移位寄存器的设计
根据设计要求以及功能表可做如下设计:
当移位时钟信号CLK的上升沿到来时过程被启动,如果这时预置使能LOAD为高电平,LEFT_RIGHT为低电平,则输入端口处的32位二进制数被同步置入移位寄存器中,用作循环右移输出的初始值;如果这时预置使能LOAD为高电平,LEFT_RIGHT为高电平,则输入端口处的32位二进制数被同步置入移位寄存器中,用作循环左移的初始值;如果预置使能LOAD为低电平,则执行以下语句:
REG[30:0]<=REG[31:1];
此语句表明:一个时钟周期后将上一时钟周期移位寄存器中的高32位二进制数,即以当前值REG[7:1]更新此寄存器的低七位REG[30:0]。他们并不会自我覆盖,且其串行移空的最高位始终由最初预置数的最高位填补。将上一时钟周期移位寄存器中的最低位,即当前值REG[0]向QB输出。随着CLK脉冲的连续到来,就完成了将预置输入的数据逐位向左或向右串行输出的功能,即将寄存器中的最低位首先输出。所编程序见附录一。
由功能表可知设计需满足:当使能端LOAD为高电平时,寄存器内数不移动,即输出Q为输入D的预置数,也就是说使能端LOAD为低电平有效。当CLK有上升沿来到时,使能信号LOAD为低电平,LEFT_RIGHT为低电平时,系统循环右移;当LEFT_RIGHT为高电平时,系统循环左移。
图二所示为其综合RTL图打包后的原理图
4
wangleiCLKLOADC0LEFT_RIGHTD[31..0]inst
图二 32位双向移位寄存器
QB[31..0]CN由原理图可得,双向32位移位寄存器输入、输出引脚分别为 CLK:移位时钟输入信号 LOAD:预置是能信号 C0:进位输入
D:待加载移位数据输入
LEFT_RIGHT:移位模式控制字 D[31..0]:数据输入总线端口 QB[31..0]:数据输出总线端口 CN:进位输出
由程序生成的内部RTL电路图如下图3所示:
5
Decoder0LEFT_RIGHTIN[0]OUT[1..0]REG~[31..0]SELD[31..0]C0DECODERDATAAOUT0DATABREG[31..0]PREDQ01ENACLRDCYPREQCNCY~0ENACLRMUX21CLKLOADQB[31..0] 图3 三十二位双向移位寄存器RTL电路图
7.系统仿真
在QuartuaII中建立shift工程,添加Verilog文件,编写源代码后,进行全编译。编译成功后,即可对定义的模块进行功能仿真。仿真步骤查看相关QuartusII书籍。本设计中,将所有定义的引脚添加入仿真环境中,对输入数据进行强制设定,运行后观察输出波形及其时序图见图4。
图4 仿真波形时序图
对其仿真图进行仿真分析:这里我们通过考察其带进位循环左移操作的工作模式来了解此次双向移位寄存器的设计。Case语句中的两个语句,尽管属于并行执行的顺序语句,但它们的赋值不会发生原数据的覆盖情况。例如,当顺序执行REG[0]<=C0和REG[31:0]<=REG[30:0]后,并不会发生REG[1]=C0的情况,因为他们是同时被更新的。对于其仿真波形,在CLK的第一个上升沿处,
6
LEFT_RIGHT=101,此边沿将D的数据加载于寄存器中;在此后的三个上升沿,LEFT_RIGHT都等于001,即执行带进位循环左移操作。在第二个上升沿后,将进位输入的C0的1移入寄存器最低位,其余左
移一位,最高位被移出,进入CN。另需注意最后一个上升沿后执行的是自循环右移,即将此前寄存器中的数据右移一位,期间将移出的最低位补入右移结果的最高位。
8.总结与体会
经过一学期的学习以及在课下对相关知识的查阅,我终于完成了32位双向移位寄存器的设计和实现及相关论文。从开始接到课程设计题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的一项比较大的项目。在这段时间里,我学到了很多知识也有很多感受,从课程设计,EDA,VHDL等相关知识很不了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。 虽然我的论文作品不是很成熟,还有很多不足之处,但我可以自豪的说,这里面的每一段代码,都有我的劳动。为了编写程序,我把课本读了好多遍,当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
这次做论文的经历也会使我受益匪浅,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后学习中激励我继续进步。
通过这次EDA作业的设计,真心感觉自己的能力与知识量大大不足,刚开始为难的真是无从下手,但我并没有放弃,在网上,去图书馆以及对所学课本的再阅读,终于还是有了思路,再加上在遇到不会时虚心向同学请教,最终完成了本次的论文。
参考文献
[1]康华光.电子技术基础数字部分[M].北京:高等教育出版社, 2006 [2]赵艳华,曹丙霞,张睿.基于Quartus II的FPGA/CPLD设计与应用[M].北京:电子工业出版社, 2009 [3] 庄严. EDA技术与数字系统设计.北京:电子工业出版社.2009
7
附录1
32位双向移位寄存器程序
module wanglei(CLK,LOAD,C0,LEFT_RIGHT,D,QB,CN); output CN;output [31:0] QB; input CLK,LOAD,C0,LEFT_RIGHT; input [31:0] D; reg[31:0] REG; reg CY;
always @(posedge CLK)begin if(LOAD==0) case(LEFT_RIGHT)
0:begin REG[0]<=C0;REG[31:1]<=REG[30:0];CY<=REG[31];end 1:begin REG[7]<=C0;REG[30:0]<=REG[31:1];CY<=REG[0];end default:begin REG<=REG;CY<=CY;end endcase
else begin REG<=REG;CY<=CY;end end
assign QB=REG;assign CN=CY; endmodule
8
因篇幅问题不能全部显示,请点此查看更多更全内容