移位寄存器(shift_reg)
在数字电路中,移位寄存器是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。分为左移寄存器、右移寄存器和双向移位寄存器三种。根据移位数据的输入-输出方式,又可将它分为串行输入-串行输出、串行输入-并行输出、并行输入-串行输出和并行输入-并行输出四种电路结构。
移位寄存器具有两个特征:
(1)移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个寄存单元的输出与其相邻的下一个寄存单元的输入之间的连接方式也不同。
(2)所有寄存单元共用一个时钟。在公共时钟的作用下,各个寄存单元的工作是同步的。每输入一个时钟脉冲,寄存器的就顺序向左或向右移动一位。通常可按传输方式的不同对CMOS移位寄存器进行分类。移位寄存器的输入方式有串行输入和并行输入之分。串行输入就是在时钟脉冲作用下,把要输入的从一个输入端依次一位一位地送入寄存器;并行输入就是把输入的从几个输入端同时送入寄存器。
使用串行输入-串行输出:
首先说明一种错误的写法:尽管改变了data_in的值,但是data_reg[word_size-1:1]这三位由于是按照之前排列,所以data_in的值并不能通过寄存器传递至data_out,所以在vcs中data_out一直为0。
module shift#(parameter word_size=4)(
input clk,
input resetn,
input data_in,
output data_out);
reg [word_size-1:0] data