当前位置:首页 > 模拟 > 模拟技术
[导读]移位寄存器有不同的版本,可用于各种各样的应用程序。本文将向您介绍移位寄存器并说明它们的工作原理。此外,它还将解释如何将它们用于将多条并行数据线转换为单个串行连接。

移位寄存器有不同的版本,可用于各种各样的应用程序。本文将向您介绍移位寄存器并说明它们的工作原理。此外,它还将解释如何将它们用于将多条并行数据线转换为单个串行连接。

什么是移位寄存器?

移位寄存器是存储单个数据字的同步器件,可以对这些位执行逻辑移位操作。逻辑移位将字的每个位向左或向右移动。空格通常用零填充:

上图显示了向左的逻辑移位。右移以类似的方式工作。

移位寄存器由几个单位锁存器组成它们以串行菊花链方式连接,以便一个锁存器的输出连接到下一个输入:

有些变速器允许您选择这些位将被移动。

移位寄存器的类型

通常,有四种不同类型的移位寄存器可用数据输入和输出设备的方式不同:

串行输入,串行输出

串行输入,并行输出

并行输入,串行输出

并行输入,并行输出

串行和并行类型通常同步运行,因此您需要时钟信号处理数据。

支持串行和并行输入的寄存器,如以及串行和并行输出,被称为通用移位寄存器。

基本操作

我们假设我们有以下理论4位移位寄存器同时具有串行输入和输出以及并行输出:

如您所见,每个位从右侧的串行输入加载到移位寄存器的D锁存器中。

第一个时钟周期将其加载到锁存器A中。然后锁存器的输出具有加载到寄存器中的值。 。下一个时钟周期设置第二个锁存器值并将一个新位加载到第一个锁存器中,从而将位从右向左移位。这与所有寄存器同时发生。最后一个锁存器输出是移位寄存器的串行输出。

因此,串行移位器可以用作缓冲器。上面的移位器也可用于将串行信号转换为四条并行数据线。

与串行转换并行

此技术可用于减少从并行总线读取值所需的输入数量。例如,您可以利用它将来自计算机键盘的信号转换为USB控制器可以理解的单个串行信号。在本例中,我使用DIP开关来模拟8位数据总线,并使用Arduino Uno上的单个GPIO引脚读取8个值:

请注意,橙色和黄色总线实际上可能无法连接成一条线。我决定以这种方式代表他们以使图像更容易理解:

Arduino控制移位寄存器,产生时钟信号,并读取8位。然后输出值:

结论

移位寄存器是一个由几个D锁存器组成的同步器件,它实现了数字电路中的逻辑移位功能。这些IC可用于各种应用。然而,它们通常用于将串行数据线转换为并行总线,反之亦然。使用它们时,您必须记住,有不同类型可用于不同目的。

移位寄存器(左移、右移、双向)的Verilog实现

移位寄存器的功能和电路形式较多,按移位方向分有左移、右移、和双向移位寄存器;按接收数据方式分为串行输入和并行输入;按输出方向分为串行输出和并行输出。

如果将若干个触发器级联成如下图所示电路,则构成基本的移位寄存器。图中是一个4位移位寄存器,串行二进制数据从输入端Dsi输入,左边触发器的输出作为右邻触发器的数据输入。若将串行数码D3D2D1D0从高位(D3)至低位(D0)按时钟脉冲间隔依次送到Dsi端,经过第一个时钟脉冲后,Q0=D3。由于跟随D3后面的是D2,因此经过第二个时钟脉冲后,触发器FF0的状态移入触发器FF1而FF0转变为新的状态,即Q1=D3,Q0=D2。以此类推,输入数码依次由左侧触发器移到右侧触发器。经过4个时钟脉冲后,4个触发器的输出状态Q3Q2Q1Q0与输入数码D3D2D1D0相对应。这样,就将串行输人数据转换为并行输出数据Dpo。

一般来说,N位移位寄存器要由N个触发器构成,需要N·Tcp来完成串行到并行的数据转换,同样也需要N・Tcp来实现并行到串行的数据输出。这里,Tcp为时钟周期。从上述操作可以看出,移位寄存器只能用脉冲边沿敏感的触发器,而不能用电平敏感的锁存器来构成,因为在时钟脉冲高电平期间,锁存器输出跟随输入变化的特性将使移位操作失去控制。显然,移位寄存器属于同步时序电路。

1.基本移位

首先说明“由于国家标准规定,逻辑图中最低有效位(LSB)到最高有效位(MSB)的电路排列顺序应从上到下,从左到右。因此定义移位寄存器中的数据从低位触发器移向高位为右移,反之则为左移。这一点与通常计算机程序中规定相反,后者从自然二进制数的排列考虑,将数据移向高位定义为左移,反之为右移。”此内容摘自《电子技术基础-数字部分》康华光主编教材。

module shifter( din, clk, rst, dout,done);

input din, clk, rst;

output [7:0] dout;

output reg done; //完成移位

reg [7:0] dout;

reg [3:0] cnt;

always @(posedge clk)

begin

if(rst) //清零

dout <= 8’b0;

else if(cnt<=4’d7)

begin

dout<=dout>>1; //左移

dout[7]<=din;

/*dout <= dout<<1;

dout[0] <= din; */ //右移

end

else

dout<=dout;

end

always@(posedge clk)

begin

if(rst)

begin

cnt<=4'd0;

done<=1'b0;

end

else if(cnt==4'd7)

begin

cnt<=4'd0;

done<=1'b1;

end

else begin

cnt<=cnt+1'b1;

done<=1'b0;

end

end

endmodule

2.双向移位

双向移位实现数据保持、右移、左移、并行置数、并行输出。

module two_way(

input clk,

input rst,

input s0,s1, //选择输入端口

input din1,din2, //串行数据输入

input [3:0] d, //并行数据输入

output reg [3:0] q //输出端口

);

always@(posedge clk or negedge rst)

begin

if(!rst)

q<=4'd0;

else begin

case({s1,s0})

2'b00: q<=q; //输出保持不变

2'b01: q<={q[2:0],din1}; //右移

2'b10: q<={din2,q[3:1]}; //左移

2'b11: q<=d; //并行置数

endcase

end

end

endmodule

在数字电路中,移位寄存器(Shift Register)是时钟的脉冲(上升沿)触发之下工作的一种以触发器为基础的电路器件,在每个时钟上升沿的触发之下,数据会依次向左或右移动一个比特(Bit),最后在输出端进行输出,这里,数据可以以并行或者以串行的方式输入到该移位寄存器的电路器件中。

移位寄存器也是类似一种存储器,可以存储数据,而存在里边的数据可以从低位向高位移动或从高位向低位移动。例如一个4位的移位寄存器,存在其中的数据为“1100”,如果向左(即高位MSB)移动一次,就变成“100X”,原来的最高位的“1”移出,最低位的“X”可以是新移入的数据,也可以是0(我们本次设计用的是随机数据,即随机输入“0”或者是“1”)。

就是因为移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或者依次逐位左移,而数据既可以并行输入、并行输出、串行输入以及串行输出,也可以并行输入、串行输出、串行输入以及并行输出,因此,正是因为移位寄存器如此灵活,才使得它用途广泛,可以应用于许许多多的数字电路设计模块之中,从而实现多种多样的功能。

那么,现在先来我们的代码,下面是主程序和测试程序(TestBench):

当时钟信号上升沿到来的时候(前提是复位信号无效的时候),输出的8位数据先移位后输出,低位赋值一个随机数,依次移位。

clk:时钟信号

rst_n:复位信号,在这里也称为置零信号,它使得输出数据为零,后缀“_n”表示低电平的时候有效;

data_out:数据输出,这里为8位数据输出,然后先是数据进行移位,从低位让高位移动,比如仿真中的“11110110”(f6),在下一个时钟触发信号到来之后,就进行左移,由原先的“11110110”往左移一位,变为“1110110X”,然后X随机带入,这里代入的是“1”,所以下一个输出为“11101101”(ed),依次类推。

该程序实现的移位寄存器功能一目了然。

对于移位寄存器,这里我们比较常见的芯片有74194芯片(考试也最常考的),它是一种四位双向移位存器。我们根据移位方向,常把它分成左移寄存器、右移寄存器和双向移位寄存器三种。根据移位数据的输入和输出方式,又可将它分为串行输入-串行输出、串行输入-并行输出、并行输入-串行输出和并行输入-并行输出四种电路结构。大家如果感兴趣的话可以去百度搜索这款移位寄存器的芯片手册阅读一下,对于自己的学习还是非常有帮助的!

声明:该篇文章为本站原创,未经授权不予转载,侵权必究。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭