实 验 报 告 学 号: 实验名称: 运算器实验 实验日期: 姓 名: 总 分: 一、 实验设计方案
? 实验框图
? 实验原理
运算器能对计算机中的数据进行算术和逻辑运算,其基本部分为算术逻辑运算单元、通用寄存器组、输入数据选择电路、输出数据控制电路。
通过SW_BUS总线数据开关来控制数据的输入,复合运算的中间结果存至两片74374(三态输出八位寄存器),每次参与运算的两个数值通过总线传至DR1,DR2,即两片74273来传至运算器74181,再通过ALU_BUS显示运算结果,将结果传经数据总线传至通用寄存器。
? 功能表 算术运算M=0 S3S2S1S0 Cn=1无进位 0 0 0 0 F=DR1 Cn=0有进位 F=DR1加1 M=1 F=/DR1 逻辑运算
0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 F=DR1+DR2 F=DR1+/DR2 F=减1 F=DR1加DR1·/DR2 F=(DR1+DR2)加F=(DR1+DR2)加1 F=(DR1+/DR2)加1 F=0 F=DR1加DR1·/DR2加1 F=(DR1+DR2)+DR1·DR2+1 F=/(DR1+DR2) F=/DR1·DR2 F=0 F=/(DR1·DR2) F=/DR2 F=DR1⊕ DR2 F=DR1·/DR2 F=/DR1+DR2 F=/(DR1 ⊕DR2) F=DR2 F=DR1·DR2 F=1 DR1·/DR2 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 DR1·DR2 1 0 1 1 1 1 0 0 F=DR1·DR2减1 F=DR1+DR1 F=DR1·DR2 F=DR1加DR1加1 F=DR1减DR2减1 F=DR1·/DR2减1 F=DR1加DR2·DR1 F=DR1加DR2 F=(DR1+/DR2)加F=(DR1+/DR2)加DR1·DR2加1 F=DR1减DR2 F=DR1·/DR2 F=DR1加DR1·DR2加1 F=DR1加DR2加1 1 1 0 1 F=(DR1+DR2)加DR1 F=(DR1+DR2)加DR1加1 F=DR1+/DR2 1 1 1 0 1 1 1 1 F=(DR1+/DR2)加DR1 F=DR1减1 F=(DR1+/DR2)加DR1加1 F=DR1 F=DR1+DR2 F=DR1
? 运算器VHDL代码 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity exp_r_alu is port( clk :in std_logic; sw_bus,r4_bus,r5_bus,alu_bus :in std_logic; lddr1,lddr2,ldr4,ldr5:in std_logic; m,cn :in std_logic; s :in std_logic_vector(3 downto 0); k:in std_logic_vector(7 downto 0); d:inout std_logic_vector(7 downto 0)); end exp_r_alu;
architecture rtl of exp_r_alu is
signal dr1,dr2,r4,r5,aluout,bus_reg:std_logic_vector(7 downto 0); signal sel:std_logic_vector(5 downto 0); begin
ldreg:process(clk,lddr1,lddr2,ldr4,ldr5,bus_reg)
begin if clk'event and clk='1' then if lddr1='1' then dr1<=bus_reg; elsif lddr2='1' then dr2<=bus_reg; elsif ldr4='1' then r4<=bus_reg; elsif ldr5='1' then r5<=bus_reg; end if; end if; end process;
ALU:process(m,cn,s,dr1,dr2,sel,aluout) begin sel<= m & cn & s; case sel is when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \
when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others =>aluout<=x\ end case; end process;
bus_reg<=k when(sw_bus='0' and r4_bus='1' and r5_bus='1' and alu_bus='1')else r4 when(sw_bus='1' and r4_bus='0' and r5_bus='1' and alu_bus='1')else r5 when(sw_bus='1' and r4_bus='1' and r5_bus='0' and alu_bus='1')else aluout when(sw_bus='1' and r4_bus='1' and r5_bus='1' and alu_bus='0')else d;
d<=bus_reg when (sw_bus='0' or r4_bus='0' or r5_bus='0' or alu_bus='0')else (others=>'Z'); end rtl;
? 下载实验原理图
相关推荐: