library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity yw is
port(
data:in std_logic_vector(3 downto 0);--待置数
clk:in std_logic;
Sa :in std_logic;
Sb :in std_logic;
shift_Bit: in std_logic; --要移入的数据
qout :buffer std_logic_vector(3 downto 0));
end yw;
architecture behave of yw is
signed mode : std_logic_vector(1 downto 0);
begin
mode <= Sa & Sb;
process(clk)
begin
if(clk'event and clk='1')then
case mode is
when"10"=>qout<="0000"; --清零
when"11"=>qout<=data; --置数
when"00"=>qout<=shift_Bit & qout(3 downto 1); --右移
when"01"=>qout<=qout(2 downto 0) &shift_Bit ;--左移
when others=>null;
end case;
else
qout<=qout
end if;
end process;
end behave;
你应该你读懂这个时序图,要是能懂。
应该很好理解的。
74LS194并行输入,在清除=H,模式 S0=H,S1=H 时,时钟脉冲上升沿就将输入数据 A,B,C,D 置到输出.输出后,你可再调整 S0,S1的电平状态,可进行左或右移.
同楼上,但是目前在verilog上面看到adler32算法是由右移寄存器电路来实现的,有些不解?
8路彩灯分为两级,每4个一组,用两个74LS194来实现,两种花型分别为从中间到两边对称性依次亮,全亮后仍由中间向两边依次灭。
或者都从右往左依次亮再依次灭,通过对花型的分析可知其中一个双向移位寄存器 74LS194 的功能是先左移后右移即先是 S1=1,S0=0,后变成 S1=0,S0=1.而另外一个功能则始终是右移即S1=0,S0=1。
Serial Left 接 QD 显示左移流水,Serial Right 接 QA 显示右移流水。
输入 A B C D 接电源或地,表示流水灯的初态。
输出 QA QB QC QD 接4盏彩灯。
Clock 接时钟。
启动时 Clear 置高电平,S1S0 先置为高电平,读取初态。然后根据左移或右移,设置其中之一(S0或S1),为低电平。可以直接这么接是因为它的实现可以看作一个四个触发器串联的时序电路,必须要在驱动函数计算完成后,才进行状态函数的计算。
扩展资料:
根据移位方向,常把它分成左移寄存器、右移寄存器和双向移位寄存器三种;
根据移位数据的输入-输出方式,又可将它分为串行输入-串行输出、串行输入-并行输出、并行输入-串行输出和并行输入-并行输出四种电路结构。
此外,有些移位寄存器还具有预置数功能,可以把数据并行地置入寄存器中。
利用移位寄存器能进行数据运算、数据处理,实现数据的串行—并行互相转换,还可接成各种移位寄存器式计数器,如环形计数器、扭环形计数器等。
参考资料来源:百度百科-移位寄存器存储器