alu.vhd
来自「4位MCU AM2901的完整VHDL程序」· VHDL 代码 · 共 62 行
VHD
62 行
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library basic;
use basic.mnemonics.all;
entity alu is port(
r,s:in unsigned(3 downto 0);
c_n:in std_logic;--carry or borrow
alu_ctl:in std_logic_vector(2 downto 0);
f:buffer unsigned(3 downto 0);
g_bar,p_bar:buffer std_logic;
c_n4:buffer std_logic;
ovr:buffer std_logic);
end alu;
architecture archalu of alu is
signal r1,s1,f1:unsigned(4 downto 0);
begin
r1<=('0',r(3),r(2),r(1),r(0));
s1<=('0',s(3),s(2),s(1),s(0));
alu:process(r1,s1,c_n,alu_ctl)
begin
case alu_ctl is
when add=>
if c_n='0' then
f1<=r1+s1;
else
f1<=r1+s1+1;
end if;
when subs=>
if c_n='0' then
f1<=r1+not(s1);
else
f1<=r1+not(s1)+1;
end if;
when subr=>
if c_n='0' then
f1<=s1+not(r1);
else
f1<=s1+not(r1)+1;
end if;
when orrs=> f1<=r1 or s1;
when andrs=> f1<=r1 and s1;
when notrs=> f1<=not r1 and s1;
when exor=> f1<=r1 xor s1;
when exnor=> f1<=not(r1 xor s1);
when others=> f1<="-----";
end case;
end process;
f<=f1(3 downto 0);
c_n4<=f1(4);
g_bar<=not(
(r(3) and s(3)) or
((r(3) or s(3)) and (r(2) and s(2))) or
((r(3) or s(3)) and (r(2) or s(2)) and (r(1) and s(1))) or
((r(3) or s(3)) and (r(2) or s(2)) and (r(1) or s(1)) and
(r(0) and s(0))));
p_bar<=not(
(r(3) or s(3)) and (r(2) or s(2)) and (r(1) and s(1)) and (r(0) and s(0)));
ovr<='1' when (f1(4)/=f1(3)) else '0';
end archalu;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?