当前位置:文档之家› 8位双向移位寄存器电路设计

8位双向移位寄存器电路设计

目录摘要 (1)1 多功能双向移位寄存器 (2)1.1 基本工作原理 (2)1.2 基本实现方案 (2)2 电路图设计 (4)2.1 电路结构 (4)2.2 真值表 (4)3 Verilog描述8位双向移位寄存器 (6)4 程序仿真 (8)5 总结 (10)参考文献 (11)摘要移位寄存器是基本的同步时序电路,基本的移位寄存器可以实现数据的串行/并行或并行/串行的转换、数值运算以及其他数据处理功能。

在本设计中,使用硬件描述语言Verilog,在EDA工具QuartussII中,设计8位双向移位寄存器硬件电路,根据设计语言进行功能时序仿真,验证设计的正确性与可行性。

关键字:Verilog QuartusII 移位寄存器8位双向移位寄存器电路设计1 多功能双向移位寄存器1.1 基本工作原理移位寄存器是基本的同步时序电路,基本的移位寄存器可以实现数据的串行/并行或并行/串行的转换、数值运算以及其他数据处理功能。

在本设计中定义移位寄存器中的数据从低位触发器移向高位为右移,移向低位为左移。

为了扩展逻辑功能和增加使用的灵活性,某些双向移位寄存器集成电路产品又附加了并行输入、并行输出等功能。

如图1所示是上述几种工作模式的简化示意图。

并行输入并行输出右移串行输入(D IR 左移串行输出(D OL 右移串行输出(D OR ) D IL )0123图1 多功能移位寄存器工作模式简图1.2 基本实现方案图2所示是实现数据保持、右移、左移、并行置入和并行输出的一种电路方案。

图中的D 触发器m FF 是N 为移位寄存器中的第m 位触发器,在其数据输入端插入了一个4选1数据选择器m MUX ,用2位编码输入10S S 、控制m MUX ,来选择触发器输入信号m D 的来源。

当100S S ==时,选择该触发器本身输出的m Q ,次态为1m n nm mQ D Q +==,使触发器保持状态不变;当100,1S S ==时,触发器1m FF -的输出1m Q -被选中,故CP 脉冲上升沿到来时,m FF 存入1m FF -此前的逻辑值,即1m 1n n m Q Q +-=,而1m +1n nm Q Q +=,从而实现右移功能;类似地,当101,0S S ==时,m MUX 选择1m Q +,实现左移功能;而当101S S ==时,则选中并行输入数据m DI ,其次态1n m m Q DI +=,从而完成并行数据的置入功能。

上述四种操作概述于表1,此外,在各触发器的输入端10~N Q Q ,可以得到N 位并行数据的输出。

图2 实现多功能双向移位寄存器的一种方案如表1所示,为图2多功能双向移位寄存器的功能表:表1 图2的功能表武汉理工大学《能力拓展训练》说明书2 电路图设计2.1 电路结构根据上一节的移位寄存器的一种基本实现方案,可以设计出8位双向移位寄存器,完整电路图如图3所示。

此电路由8个4选1数据选择器、8个带异步清零的D触发器组成。

所有的S S分别对应地接在一起,同时选择D触发器的信号数据来数据选择器编码端10源。

D触发器时钟端CP接一起,清零端CR也同样接在一起,这样可以保证级联D触发器的同步,和并行输出数据的清零。

另,每个D触发器的输出对应一位并行输入。

Dsr是右移串行数据输入端,Dsl是左移串行数据输入端,分别接最低有效位对应的数据选择器和最高有效位对应的数据选择器。

图3 8位双向移位寄存器2.2 真值表分析电路图,可得此8位双向移位寄存器的真值表,如表2所示:表2 8位双向移位寄存器真值表3 Verilog描述8位双向移位寄存器本设计通过行为级描述语句always描述了一个8位双向移位寄存器,它有两个选择输入端、两个串行数据输入端、8个并行数据输入端和8个并行数据输出端,完成的功能与图3的电路相同。

它有5种功能:异步置零、同步置数、左移、右移和保持状态不变。

当清零信号CR跳变到低电平时,寄存器的输出被异步置零;否则,当CR=1时,与时钟信号有关的4种功能由case语句中的两个选择输入信号S1和S0决定(在case后面S1、S0被拼接成2位矢量)。

设计程序如下://Behavioral description of Universal shift registermodule shift (S1,S0,D,Dsl,Dsr,Q,CP,CR);input S1,S0; //Select inputsinput Dsl,Dsr; //serial data inputinput CP,CR; //Clock and Resetinput [7:0]D; //Parallel Data inputoutput [7:0]Q; //Register ouputreg[7:0]Q;always @(posedge CP or negedge CR)if(~CR) Q <= 8'b00000000 ;elsecase ({S1,S0})2'b00:Q<=Q; //No change2'b01:Q<={Q[6:0],Dsr}; //Shift right2'b10:Q<={Dsl,Q[7:1]}; //Shift left2'b11:Q<=D; //Patallel load inputendcaseendmodule在程序中定义了一个模块(module)shift,在QuartusII中新建工程文件时,定义的顶层模块名需要与工程名保持一致,否则在编译时会出现错误。

模块前端为基本输入输出口的设置。

使用了行为级描述语言always,后跟if……else……判断语句,在循环执行过程中来根据输入信号判断做出相应的动作。

其中if(~CR) Q<=8’b00000000 ;表示当CR信号为低电平时,(~CR)则为1,此时将8为二进制数b00000000赋给Q,即实现移位寄存器的异步清零。

Case语句类似于C语言中的case语句,同样根据判断条件来选择要执行的分支语句。

在case中将S1和S0拼接为2位矢量,来共同决定判断结果。

同样,移位由串行输入和7个触发器的输入拼接起来进行描述,如Q<={Dsl,Q[7:1]};说明了左移操作,即在时钟信号CP上升沿作用下,将左移输入端Dsl的数据直接传给输出Q[7],而触发器输出端的数据左移一位,Q[7:1]传给Q[6:0](即Q[7]->Q[6],Q[6]->Q[5],……,Q[1]->Q[0]),于是,完成将数据左移一位的操作。

但是需要注意,上述程序中所注释的右移和左移方向与图3一致,而与Verilog描述语句中的排列和移动方向正好相反。

后者与一般技术机程序一致(即高位在左,低位在右)。

4 程序仿真在QuartuaII中建立shift工程,添加Verilog文件,编写源代码后,进行全编译。

编译成功后,即可对定义的模块进行功能仿真。

仿真步骤查看相关QuartusII书籍。

本设计中,将所有定义的引脚添加入仿真环境中,对输入数据进行强制设定,运行后观察输出波形及其时序图。

根据8位双向移位寄存器的真值表,仿真时,首先考察此移位寄存器的左移、右移、保持和并行输入的基本功能,然后再在串行输入端加入信号,观察移位寄存器的书序波形。

图4 基本功能时序图根据图4,观察S1和S0信号,每个基本功能的仿真之前都先强制S1=S0=1,即实现并行输入功能,给输入D[7:0]设置初值,然后再下一个周期对S1、S0进行改变,观察输出Q的变化。

程序中,语句always @(posedge CP or negedge CR)表示当有CP的上升沿或CR的下降沿时触发,因此可以从仿真时序图验证,D和Q的数据改变都发生在CP信号的上升沿。

在第一个CP周期上升沿之前,设定的D初值为128,上升沿到来,D是数据移入Q,Q值为128,Q的各位同并行输入D相同。

第二个CP 周期中,S1=S0=0,移位寄存器功能为保持,从时序图中验证知,Q的初值保持到第三个CP周期上升沿时刻。

在第三个CP周期初,设定并行输入D为15,第四个周期为保持,第五个周期,设定S1S0=01,则寄存器实现右移,换算到计算机运算中即为左移一位,数值增大1倍。

观察第五个周期CP上升沿之后,Q数值由15增大为30,Q的各位数值与D的各位数值比较,可以看出Q的D移位后的结果,此时串行输入的值为0,仿真验证正确。

第六个周期保持数据,第七个周期并行移入数据18,保持一个周期,在第九个周期中,S1S0=10,寄存器功能为左移,换算到计算机运算为右移,及数据变为原来的一半。

从仿真时序图知道,第九个CP上升沿到来后,Q数值变为9,功能仿真正确。

完成基本功能的仿真后,设置串行输入Dsl和Dsr,继续仿真然后观察时序图。

图5 加入串行输入时的仿真结果主要观察第五个周期,Q初值为15,寄存器功能设定为右移,右移串行输入为1,CP上升沿到来后,Q值增大为31,即增大到2倍后右在低位移入1。

同样在第九个周期中,寄存器设定功能为左移,CP上升沿到来后,原有的值18变为9,但是左移串行输入为1,从高位引入1,即为128+9=137,功能仿真结果正确。

5 总结通过此次的能力拓展训练,我初步掌握了Verilog硬件描述语言,学会了在QuartusII中设计一些简单的硬件电路,受益匪浅。

首先,通过查阅相关的资料,我初步地学会了使用Verilog语言编写基本的程序,熟悉了各寄存器的使用方法和数据传送与处理,根据Verilog来对这些基本的硬件进行行为级的描述。

在Verilog程序编写中,我还体会到了它强大的实序仿真功能,进而根据仿真结果来来辅助程序设计,直到达到预期的功能。

这个方法对以后进行Verilog程序的编写和硬件开发将起到很大的帮助。

其次,在本次能力拓展训练中,初次接触到QuartusII软件,在查阅相关资料后,对其功能及使用方法有了一定的掌握。

此外,在本次设计中,通过结合Verilog语言和QuartusII来定制所需要的硬件模块,具有针对性高的特点。

最后,通过本次能力拓展训练,再次加强了自身的硬件、软件相结合的动手设计能力,加强了自身通过查阅资料,自学设计的能力,极大地提高了专业能力,为以后毕业设计及走上社会岗位打下了坚实的基础。

如今,在电子产品设计中,EDA已经是越来越受欢迎的手段和方法了,掌握一种和多种EDA工具,入QuartusII和Altium Designer等,是当代大学生尤其是自动化专业学生必需的任务。

只有掌握足够的工具,才能在更深入的学习中,或将来的工作中熟练地运用这些工具进行相关设计研发。

参考文献[1]康华光.电子技术基础数字部分[M].北京:高等教育出版社, 2006[2]赵艳华,曹丙霞,张睿.基于Quartus II的FPGA/CPLD设计与应用[M].北京:电子工业出版社, 2009[3]周润景,苏良碧.基于Quartus II的数字系统Verilog HDL设计实例详解[M].北京:电子工业出版社,2010[4]乔庐峰,王志功.Verilog HDL数字系统设计与验证[M].北京:电子工业出版社,2009[5]何宾.EDA原理及Verilog实现[M].北京:清华大学出版社,2010。

相关主题