8位双向移位寄存器电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要 (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 n
m m
Q D Q +==,使触发器保持状态不变;当100,1S S ==时,触发器1m FF -的输出1m Q -被选中,故CP 脉冲上升沿到来时,m FF 存入1m FF -此前的逻辑值,即
1m 1n n m Q Q +-=,而1m +1n n
m Q Q +=,
从而实现右移功能;类似地,当101,0S S ==时,m MUX 选择1m Q +,实现左移功能;而当101S S ==时,则选中并行输入数据m DI ,其次
态1
n 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 register
module shift (S1,S0,D,Dsl,Dsr,Q,CP,CR);
input S1,S0; //Select inputs
input Dsl,Dsr; //serial data input
input CP,CR; //Clock and Reset
input [7:0]D; //Parallel Data input
output [7:0]Q; //Register ouput
reg[7:0]Q;
always @(posedge CP or negedge CR)
if(~CR) Q <= 8'b00000000 ;
else
case ({S1,S0})
2'b00:Q<=Q; //No change
2'b01:Q<={Q[6:0],Dsr}; //Shift right
2'b10:Q<={Dsl,Q[7:1]}; //Shift left
2'b11:Q<=D; //Patallel load input
endcase
endmodule
在程序中定义了一个模块(module)shift,在QuartusII中新建工程文件时,定义的顶层模块名需要与工程名保持一致,否则在编译时会出现错误。模块前端为基本输入输出口的设置。