河南科技学院新科学院EDA课程设计报告题目:32位移位寄存器设计专业班级:电气工程及其自动化106姓名:程琦指导教师:付广春完成日期:2013年01月01日132位双向移位寄存器设计设计要求:完成以下功能特性的双向32位移位寄存器。同时要求有使能端,用1602显示。摘要:移位寄存器的功能即是对每一个上升沿到来时,并且寄存器使能是0时,对输入按照移位模式控制信号的要求实现输出的左移和右移。32位移位寄存器可有4个八位的移位寄存器的逻辑关系来实现关键词:寄存器,上升沿,使能端1引言移位寄存器使我们学习生活包括开发研究道路上不可或缺的一部分。随着社会的发展,社会主义市场经济不断繁荣,各种装饰用的流水灯、广告彩灯、宣传画越来越多的出现在人民的生活当中,在大型晚会的现场,更是用的淋漓尽致,这些装饰控制设备多数要用移位寄存器来实现,因此,移位寄存器的研究和设计就变的至关重要。2总体设计方案因移位寄存器由多种不同的描述和设计方案,我们可以依据要求设列出最好最简单的设计方案。首先,要完成双向的32位移位寄存器,就首先必须要实现8位移位寄存器作为基础。其次,在4个8个移位寄存器的基础上达到32位移位寄存器的功能。第一要有模式控制输入,来控制移位寄存器的移位方向;第二,有使能端,即在什么情况下移位寄存器才可以正常工作,才可以实现模位控制,是左移还是右移,这就要求使能是模式控制输入的前提;然后是脉冲控制信号,由题意可知,移位寄存器是在上升沿触发的,即在每一次上升沿到来时,移位寄存器使输入按照模位控制的要求向左或向右移一位;最后输入和输出,都要用到32并行输入和输出。2.1设计思路①8位移位寄存器由设计要求可知,要实现8位的双向移位寄存器,并且还有使能端。我们可令CLK为移位时钟信号,D为8位并行预置数据端口,LOAD为并行数据预置使能信号,QB为串行输出端口,LEFT_RIGHT为移位模式控制数。此移位寄存器的工作方式是:当CLK得上升沿到来时,过程被启动,如果这时预置使能端LOAD为低电平,且移位模式控制数LEFT_RIGHT为1时,则最高位被移入寄存器中,其他7位依次左移一位同步并行置入移位寄存器中;如果移位模式控制数LEFT_RIGHT为0时,则最低位被移入寄存器中,其他7位依次左移一位同步并行置入移位寄存器中。但如果这时预置使能端LOAD为高电平时,则移位寄存器将输入数据并行依次送往输出,最后在8位的基础上来实现32位的更高功能。②32位移位寄存器在8位的基础上,运用元件例化,引入一种逻辑关系,将预先设计好的8位移位寄存器模块定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中指定端口相连接,从而为32位移位寄存器的设计实体引进一个新的、低一级的设计层次。3设计原理分析23.1分布设计①8位移位寄存器的设计当使能端使能,即LOAD=0,且脉冲信号上升沿到来时,可根据移位模式控制数LEFT_RIGHT来确定移位的方向,若移位模式控制数LEFT_RIGHT=0,则实现循环向右移,这时可先将输入的最低位放入输出的最高位寄存器中,输出的其他位依次向右移一位,放入输出的低7个寄存器中,可用以下语句实现:REG[7]=d[0];REG[6:0]=d[6:1];若移位模式控制数LEFT_RIGHT=1,则实现循环向左移,这时可先将输入的最高位放入输出的最低位寄存器中,输出的其他位依次向左移一位,放入输出的高7个寄存器中,可用以下语句实现:REG[7]=c0;REG[6:0]=REG[7:1];cy=REG[0];当使能端LOAD=1,即寄存器不工作时,不论脉冲信号是否有上升沿,且移位模式控制数LEFT_RIGHT的值为何知,输入和输出都不会有任何差异,即不会产生移位。可用语句REG[0]=c0;REG[7:1]=REG[6:0];cy=REG[7];实现。其中记8位移位寄存器的模块名位shft2。编程时,由于case语句中的种种遗漏,会导致时序模块的引入,会是综合所得的RTL图中输出口含反馈线路,即含锁存器线路,因此当case语句条件句中未能“历数”所有条件时,一定要用default语句将case语句中未出现的赋值语句指明其操作。图18位移位寄存器②32位移位寄存器的设计用8位移位寄存器实现32位移位寄存器的功能,要用到元件例化。元件例化是使Verilog设计模块构成自上而下层次化设计的一种重要途径。元件例化是可以多层次的,一个调用了较低层次元件的顶层设计实体模块本身也可以被更高层次设计实体所调用,成为该设计实体模块中的一个元件。任何一个被例化语句声明并调用的底层模3块可以以不同的形式出现,它可以是一个设计画的Verilog文件夹(即一个设计模块),也可以是来自FPGA元件库中的元件或是FPGA器件中的嵌入式元件功能块等,例化语句的一般结构如下:模块元件名例化元件名(.例化元件端口(例化元件外接端口名),....);32位移位寄存器,一块电路板上要用到4片8位移位寄存器的元件,分别标注名称为U1,U2,U3,U4。shft2u1(.load(load1),.left_right(left_right1),.clk(clk1),d(d1),.qb(qb1),.cn(e),.c0(c01));其功能是描述一元件与外部连线及其他元件连接的情况,sft2是是待调用的元件名,即原八位移位寄存器的元件名,u1为用户在此特定情况下调用元件shft2而取的名字,为元件的例化名。括号中的.load(load)表示第一个八位移位寄存器的load端与输入端口load1相连,.cn(e)表示八位移位寄存器的cn端与外部连线e相连,其他同理。3.2整体设计首先,当脉冲上升沿到来,LOAD=0使能时,执行语句case(left_right),即确定移位模式控制数,若left_right=0,则执行beginREG[7]=c0;REG[6:0]=REG[7:1];cy=REG[0];此语句表明:一个时钟周期后将上一时钟周期移位寄存器中的最低位放入寄存器的最高位,且高7位二进制数,即以当前值REG[7:1]更新至此寄存器的低7位d[6:0]。但它并不会自我覆盖,则其串行移空的最高位始终由后放入的最高位补充,随着CLK脉冲的连续到来就完成了将并行预置输入的数据逐位向右串行输出的功能,即将寄存器的最低位首先输出;若left_right=0,则执行REG[0]=c0;REG[7:1]=REG[6:0];cy=REG[7];表明:一个时钟周期将上一时钟周期移位寄存器中的最高位放入寄存器的最低位,且低7位二进制数,即以当前值REG[6:0]更新至此寄存器的高7位d[7:1],并执行后面的assignqb=REG;assigncn=cy;实现最终的输出,8位移位寄存器的完整程序见附录1.综合后的RTL电路如图2。打包后如图3。4图28位移位寄存器的RTL图其次,由四个八位移位寄存器组成32位移位寄存器,每一个低一级的八位移位寄存器的输出cn都与其高一级的c0相连,且四个把位移位寄存器都有相同的时钟脉冲clk1,相同的使能端load1,图3打包后的图5相同的移位模式控制数left_light1,最低级的c0端与输入端c01相连,其完整程序见附录2,原理图见图4。图432位移位寄存器原理图4总结与体会:虽然实训仅仅进行了一个星期就匆匆的结束了,但在这一个星期中收获还是很多的。实训的目的是要把学过的东西拿出来用这一个星期的实训中不仅用了而且对于muxplus2和quartus2软件的使用也更加的得心应手,这次实训提高了我们的动手能力、理论联系实际的能力、发现问题分析问题解决问题的能力。实训只要你认真做了都是对自己能力一次很大的提高。实训的第一天我们组三个人就开始对电子密码锁的各部分源程序进行调试,由于刚开始对于quartus2软件用的不是很熟练,所以在第一天几乎上没有啥大的进展,一直都在改程序中的错误。在不停的重复的编译、改错。拿着资料书检查出错的地方,一边又一遍的校对分析其中的错误。在检查错误的过程中发现其实学好英语也是很重要的。同时也感叹要是这软件是中国人做的我们还用的着这么麻烦的看英语吗!6在试训中我们遇到了很多的问题。为了解决这些问题我和他们两个都在的想办法通过各种渠道寻找解决问题的方法。上网查资料、问同学、图书馆查资料、问老师、自己想办法,其实最有效的方法还是自己去想那样学到的东西才会更加的深刻记得时间也是最长的,他人的帮助当然是很好的,但只是暂时的要想真正的学到东西还是要靠自己去想办法。不能一有问题就希望要他人帮忙,一定自己先好好想想实在解决不了的再去问老师找同学。参考文献[1]叶挺秀.应用电子学[M].杭州:浙江大学出版社,1994[2]阎石.数字电子技术基础(第三版)[M].北京:高等教育出版社,1989[3]李旭东,宗光华,毕树生,等.生物工程微操作机器人视觉系统的研究[J].北京航空航天大学学报,2002,28(3):249~2527附录1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcyregISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);LD:INSTD_LOGIC;LR:INSTD_LOGIC;CP:INSTD_LOGIC;DOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDcyreg;ARCHITECTUREsampleOFcyregISBEGINP1:PROCESS(CP,LD)BEGINifLD='0'thenDOUT=D;elsifCP'EVENTANDCP='0'thenifLR='1'thenDOUT=DOUT(6DOWNTO0)&DOUT(7);elsifLR='0'thenDOUT=DOUT(0)&DOUT(7DOWNTO1);endif;endif;ENDPROCESSP1;ENDsample;8附录2moduleywjcq(load1,left_right1,clk1,d1,,d2,d3,d4,qb1,qb2,qb3,qb4,cn1,c01);outputcn1;inputload1,left_right1,clk1,c01;input[7:0]d1,[7:0]d2,[7:0]d3,[7:0]d4;output[7:0]qb1,[7:0]qb2,[7:0]qb3,[7:0]qb4;wiree,d,f;shft2u1(.load(load1),.left_right(left_right1),.clk(clk1),d(d1),.qb(qb1),.cn(e),.c0(c01));shft2u2(.load(load1),.left_right(left_right1),.clk(clk1),d(d2),.qb(qb2),.cn(d),.c0(e));shft2u3(.load(load1),.left_right(left_right1),.clk(clk1),d(d3),.qb(qb3),.cn(f),.c0(d));shft2u4(.load(load1),.left_right(left_right1),.clk(clk1),d(d4),.qb(qb4),.cn(cn1),.c0(f));endmodule