信号与信息处理研究生实验4桶形移位器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

桶形移位器

一、题目要求:实现8位二进制数左循环、右循环、左逻辑、右逻辑、左算术、右算术这六种功能。

二、分析与实现:利用:Y(i+n)=X(i) (i+n<16)来实现移位(左)。逻辑和算术,则对没移位的位的补0(或1);循环(左),则再利用公式Y(i+n-16)=X(i),即可把没移位的位进行桶形移位。

按以上分析,其VHDL代码如下:

entity barral_shift_16 is

port(x:in std_logic_vector(15 downto 0); --输入数据

l_cycle,l_logic,l_arithmetic:in std_logic; --分别为左循环,左移位,左算术

r_cycle,r_logic,r_arithmetic:in std_logic; --分别为右循环,右移位,右算术

n:in std_logic_vector(3 downto 0); --移的位数

y:out std_logic_vector(15 downto 0)); --结果

end barral_shift_16;

architecture Behavioral of barral_shift_16 is

begin

process(x,l_cycle,l_logic,l_arithmetic,r_cycle,r_logic,r_arithmetic,n)

variable temp_y:std_logic_vector(15 downto 0);

variable m:integer;

begin

m:=conv_integer(n);

-------------------------左循环--------------------------------------

if(l_cycle='1')then

for i in 0 to 15 loop

if(i+m<=15)then

temp_y(i+m):=x(i);

else

temp_y(i+m-16):=x(i);

end if;

end loop;

-------------------------左逻辑--------------------------------------

elsif(l_logic='1')then

for i in 0 to 15 loop

if(i+m<=15)then

temp_y(i+m):=x(i);

end if;

end loop;

temp_y(m-1 downto 0):=(others=>'0');

-------------------------左算术--------------------------------------

elsif(l_arithmetic='1')then

for i in 0 to 15 loop

if(i+m<=15)then

temp_y(i+m):=x(i);

end if;

end loop;

temp_y(m-1 downto 0):=(others=>x(0));

-------------------------右循环--------------------------------------

elsif(r_cycle='1')then

for i in 15 downto 0 loop

if(i-m>=0)then

temp_y(i-m):=x(i);

else

temp_y(16+i-m):=x(i);

end if;

end loop;

-------------------------右逻辑--------------------------------------

elsif(r_logic='1')then

for i in 15 downto 0 loop

if(i-m>=0)then

temp_y(i-m):=x(i);

end if;

end loop;

temp_y(15 downto 16-m):=(others=>'0');

-------------------------右算术--------------------------------------

elsif(r_arithmetic='1')then

for i in 15 downto 0 loop

if(i-m>=0)then

temp_y(i-m):=x(i);

end if;

end loop;

temp_y(15 downto 16-m):=(others=>x(15)); ---------------------------------------------------------------------

end if;

y<=temp_y;

end process;

end Behavioral;

三、仿真结果

与期望值一致,结果正确。

左循环右循环

左逻辑右逻辑

左算术右算术

相关文档
最新文档