您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 8位移位寄存器的设计
数字电路与逻辑设计实验报告第1页共7页实验七8位移位寄存器的设计班级信息安全2班姓名张亮学号20110806228一、实验目的熟悉QuartusⅡ仿真软件的基本操作,并用VHDL语言设计8位移位寄存器。并且掌握组合逻辑电路的功能测试和时序仿真;学会运用逻辑图设计电路。二、实验内容用VHDL语言设计由边沿触发式D触发器构成的8位串入并出移位寄存器,并进行仿真与分析;(查找相应资料)三、实验原理逻辑电路的原理8位移位寄存器的设计在数字电路中,用来存放二进制数据或代码的电路称为寄存器。寄存器是由具有存储功能的触发器组合起来构成的。一个触发器可以存储一位二进制代码,存放N位二进制代码的寄存器,需用n个触发器来构成。按功能可分为:基本寄存器和移位寄存器。移位寄存器中的数据可以在移位脉冲作用下一次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。目前常用的集成移位寄存器种类很多,如74164、74165、74166、74595均为八位单向移位寄存器,74195为四位单向移存器,74194为四位双向移存器,74198为八位双向移存器。逻辑图如图所示:逻辑功能表Inputs输入Outputs输出CLRCLKABQAQB...QHLXXXLLLHLXXQA0QB0QH0H↑HHHQAnQGnH↑LXLQAnQGnH↑XLLQAnQGn通过实验实现逻辑的原理8位移位寄存器的设计在CMOS移位寄存器中,有的品种只具有串行或并行中的一种输入方式,但也有些品种同时兼有串行和并行两种输入方式。串行输入的数据加到第一个寄存单元的D端,在时钟脉冲的作用下输入,数据传送速度较慢;并行输入的数据一般由寄存单元的R、S端送入,传送速度较快。移位数字电路与逻辑设计实验报告第2页共7页寄存器的移位方向有右移和左移之分。右移是指数据由左边最低位输入,依次由右边的最高位输出;左移时,右边的第一位为最低位,最左边的则为最高位,数据由低位的右边输入,由高位的左边输出。四、实验方法与步骤实验方法:采用基于FPGA进行数字逻辑电路设计的方法。采用的软件工具是QuartusII软件仿真平台。实验步骤:1、编写源代码。打开QuartusII软件平台,点击File中得New建立一个文件。编写的文件名与实体名一致,点击File/Saveas以“.vhd”为扩展名存盘文件。2、编译与调试。确定源代码文件为当前工程文件,点击Complier进行文件编译。编译结果有错误或警告,则将要调试修改直至文件编译成功。3、波形仿真及验证。在编译成功后,点击Waveform开始设计波形。点击“insertthenode”,按照程序所述插入节点(具体节点根据不同实验的变量而定)。任意设置输入节点的输入波形…点击保存按钮保存。五、实验结果与分析A.编译过程8位移位寄存器的设计a)源代码(VHDL设计)LIBRARYieee;USEieee.std_logic_1164.all;ENTITYshifterISPORT(data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);--输入的数据n:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位的数量dir:INSTD_LOGIC;--移动的方向0:左1:右kind:INSTD_LOGIC_VECTOR(1DOWNTO0);--移动类型00:算术移01:逻辑移10:循环移clock:INBIT;--手动时钟PULSEdata_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0)--移位的结果);ENDshifter;ARCHITECTUREbehavofshifterISBEGINPROCESS(data_in,n,dir,kind)VARIABLEx,y:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEctrl0,ctrl1,ctrl2:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIF(clock'EVENTANDclock='1')THEN--产生控制向量ctrlctrl0:=n(0)&dir&kind(1)&kind(0);ctrl1:=n(1)&dir&kind(1)&kind(0);ctrl2:=n(2)&dir&kind(1)&kind(0);CASEctrl0ISWHEN0000|0001|0010|0100|0101|0110=x:=data_in;--n=0时不移动WHEN1000=x:=data_in(6DOWNTO0)&data_in(0);--算术左移1位WHEN1001=x:=data_in(6DOWNTO0)&'0';--逻辑左移1位WHEN1010=x:=data_in(6DOWNTO0)&data_in(7);--循环左移1位数字电路与逻辑设计实验报告第3页共7页WHEN1100=x:=data_in(7)&data_in(7DOWNTO1);--算术右移1位WHEN1101=x:='0'&data_in(7DOWNTO1);--逻辑右移1位WHEN1110=x:=data_in(0)&data_in(7DOWNTO1);--循环右移1位WHENothers=null;ENDCASE;CASEctrl1ISWHEN0000|0001|0010|0100|0101|0110=y:=x;--n=0时不移动WHEN1000=y:=x(5DOWNTO0)&x(0)&x(0);--算术左移2位WHEN1001=y:=x(5DOWNTO0)&00;--逻辑左移2位WHEN1010=y:=x(5DOWNTO0)&x(7DOWNTO6);--循环左移2位WHEN1100=y:=x(7)&x(7)&x(7DOWNTO2);--算术右移2位WHEN1101=y:=00&x(7DOWNTO2);--逻辑右移2位WHEN1110=y:=x(1DOWNTO0)&x(7DOWNTO2);--循环右移2位WHENothers=null;ENDCASE;CASEctrl2ISWHEN0000|0001|0010|0100|0101|0110=data_out=y;--n=0时不移动WHEN1000=data_out=y(3DOWNTO0)&y(0)&y(0)&y(0)&y(0);--算术左移4位WHEN1001=data_out=y(3DOWNTO0)&0000;--逻辑左移4位WHEN1010|1110=data_out=y(3DOWNTO0)&y(7DOWNTO4);--循环左(右)移4位WHEN1100=data_out=y(7)&y(7)&y(7)&y(7)&y(7DOWNTO4);--算术右移4位WHEN1101=data_out=0000&y(7DOWNTO4);--逻辑右移4位WHENothers=null;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;逻辑图(部分):数字电路与逻辑设计实验报告第4页共7页b)编译、调试过程c)结果分析及结论数字电路与逻辑设计实验报告第5页共7页B.波形仿真a)波形仿真过程首先新建波形文件,然后点击保存,再导入引脚,单击noderfind,选择引脚,将引脚插入波形文件中去,最后画出波形,最后找到processing中的simulationTools,将其中的mode改为function,点击generate后,编译即可。如图所示:数字电路与逻辑设计实验报告第6页共7页当进行功能仿真和时序仿真的切换时,需要按上图中的Generate。b)波形仿真波形图如图所示为8位移位寄存器的设计的波形仿真结果,没有任何延迟:六、实验结论本次实验我收获到了很多移位寄存器的相关知识,虽然期间我遇到了很多无法解决的问题,但最终都通过查阅资料,询问同学,一一得到了解决。实验中我们完成了1个器件的编写:我使用了VHDL代码的方法。通过资料我知道了74HC164是8位移位寄存器,当其中一个(或二个)选通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时钟脉冲来后复位到低电平时,门控串行输入端(A和B)可完全控制输入数据。一个高电平输入后就使另一个输入端赋能,这个输入就决定了第一个触发器的状态。虽然不管时钟处于高电平或低电平时,串行输入端的数据都可以被改变,但只有满足建立条件的信息才能被输入。时钟控制发生在时钟输入由低电平到高电平的跃变上。为了减小传输线效应,所有输入端均采用二极管钳位。。每组实验我们都编写了他们的源代码,并且通过时序仿真和功能仿真不同的仿真方式让我对加法器这个逻辑学电子元件有了更深层次的了解。很多问题最终在老师同学和自己的不懈努力中得以解决。其中我遇到了一些代码上的书写错误问题,编译无法运行问题,以及时序仿真时出现的问题。不过最后在查阅相关资料后明白了自己是少了一些过程。数字电路与逻辑设计实验报告第7页共7页本次实验我收获了很多关于VHDL语言以及QuartusII9.0的基本知识,也掌握了编写代码过程中需要严格注意的问题。相信我在以后的实验过程中,会更加努力。
本文标题:8位移位寄存器的设计
链接地址:https://www.777doc.com/doc-2898120 .html