信号与信息处理研究生实验4桶形移位器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
三、仿真结果
与期望值一致,结果正确。
左循环右循环
左逻辑右逻辑
左算术右算术