收藏 分销(赏)

硬件结构设计.doc

上传人:a199****6536 文档编号:2401211 上传时间:2024-05-29 格式:DOC 页数:17 大小:60.75KB 下载积分:8 金币
下载 相关 举报
硬件结构设计.doc_第1页
第1页 / 共17页
硬件结构设计.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
。 目录 摘要: 3 硬件结构设计原理: 4 原理图: 5 管脚图: 6 微程序控制操作方法: 9 微程序: 10 Romc改编代码 10 data_bus改编代码 12 摘要: 本次实验的功能是进行两个4位数的加法运算,并进行结果输出。在本次实验中,我们用到data_bus作为总线进行传输,reg_74373作为寄存器进行数据的存储,alu_74181进行加法运算。romc作为译码器进行初始状态的设定。通过这个加法器的设计,能够对硬件结构设计有了更好的了解,同时也加深了对计算机组成原理课程的理解。 硬件结构设计原理: 1.把模块romc改为九位输出oen,we1,we2,gwe1,oen_n1,gwe2, oen_n2,gwe3,oen_n3; 2.把模块reg_74244改为四位输入Din(3 0)和四位输出Qout(3 0);3.把模块data_bus改为四位输入data_in1(3 0),Data_in2(3 0),四位输出data_out1(3 0),data_out2(3 0),data_out3(3 0); 4.把模块reg_74373改为四位输入Din(3 0)和四位输出Qout(3 0);5.把模块alu_74181改为四位输入A(3 0),B(3 0),S(3 0),和四位输出F(3 0) 6.由romc向reg_74244中分别输入两个四位二进制的数,通过九位romc微程序控制器,在进入data_bus后,两个数分别被写入两个reg_74373中,再进入alu_74181进行加法运算,将运算结果输入data_bus,再由另外一个reg_74373读出。 原理图: 管脚图: ###------------CLOCK----------- NET "clk" LOC = "L15"; ###-------------Atlys led output------------------- #NET "atlys_led[0]" LOC = U18; #Atlys LD0 #NET "atlys_led[1]" LOC = M14; #Atlys LD1 #NET "atlys_led[2]" LOC = N14; #Atlys LD2 #NET "atlys_led[3]" LOC = L14; #Atlys LD3 #NET "atlys_led[4]" LOC = M13; #Atlys LD4 #NET "atlys_led[5]" LOC = D4; #Atlys LD5 #NET "atlys_led[6]" LOC = P16; #Atlys LD6 #NET "atlys_led[7]" LOC = N12; #Atlys LD7 ###-----------Atlys Switch input------------------- #NET "atlys_sw[0]" LOC = A10; # Atlys sw0 #NET "atlys_sw[1]" LOC = D14; # Atlys sw1 #NET "atlys_sw[2]" LOC = C14; # Atlys sw2 #NET "atlys_sw[3]" LOC = P15; # Atlys sw3 #NET "atlys_sw[4]" LOC = P12; # Atlys sw4 #NET "atlys_sw[5]" LOC = R5; # Atlys sw5 #NET "atlys_sw[6]" LOC = T5; # Atlys sw6 #NET "atlys_sw[7]" LOC = E4; # Atlys sw7 ###------------EES261 switch input---------- NET "din[0]" LOC = "U11"; #SW20 NET "din[1]" LOC = "R10"; #SW19 NET "din[2]" LOC = "U10"; #SW18 NET "din[3]" LOC = "R8"; #SW17 NET "S[0]" LOC = "M8"; #SW16 NET "S[1]" LOC = "U8"; #SW15 NET "S[2]" LOC = "U7"; #SW14 NET "S[3]" LOC = "N7"; #SW13 #NET "C_n" LOC = "T6"; #SW12 #NET "C_n_Plus" LOC = "R7"; #SW11 #NET "XLXN_9" LOC = "N6"; #SW10 #NET "swt[8]" LOC = "U5"; #SW9 #NET "swt[7]" LOC = "V5"; #SW8 #NET "swt[6]" LOC = "P7"; #SW7 #NET "swt[5]" LOC = "T7"; #SW6 #NET "swt[4]" LOC = "V6"; #SW5 NET "s0" LOC = "P8"; #SW4 NET "s1" LOC = "V7"; #SW3 NET "s2" LOC = "V8"; #SW2 NET "s3" LOC = "N8"; #SW1 ##----------EES261 leds output------------ NET "XLXN_21<0>" LOC = "U16"; #LED1 NET "XLXN_21<1>" LOC = "U15"; #LED2 NET "XLXN_21<2>" LOC = "U13"; #LED3 NET "XLXN_21<3>" LOC = "M11"; #LED4 NET "XLXN_9" LOC = "R11"; #LED5 #NET "led<5>" LOC = "T12"; #LED6 #NET "led<6>" LOC = "N10"; #LED7 #NET "led<7>" LOC = "M10"; #LED8 ###-------hex7seg------------------- # NET "an<0>" LOC = "V16"; # NET "an<1>" LOC = "V15"; # NET "an<2>" LOC = "V13"; # NET "an<3>" LOC = "N11"; # NET "a_to_g<0>" LOC = "T8"; #a # NET "a_to_g<1>" LOC = "V10"; #b # NET "a_to_g<2>" LOC = "T10"; #c # NET "a_to_g<3>" LOC = "V11"; #d # NET "a_to_g<4>" LOC = "N9"; #e # NET "a_to_g<5>" LOC = "P11"; #f # NET "a_to_g<6>" LOC = "V12"; #g # NET "dp" LOC = "T11"; #dp ###--------------END--------- 微程序控制操作方法: s0 s1 s2 s3 oen we1 we2 gwe1 oen_n1 gwe2 oen_n2 gwe3 oen_n3 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0 微程序: Romc改编代码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.all; entity romc is Port ( s0 : in STD_LOGIC; s1 : in STD_LOGIC; s2 : in STD_LOGIC; s3 : in STD_LOGIC; oen : out STD_LOGIC; we1 : out STD_LOGIC; we2 : out STD_LOGIC; gwe1 : out STD_LOGIC; oen_n1 : out STD_LOGIC; gwe2 : out STD_LOGIC; oen_n2: out STD_LOGIC; gwe3 : out STD_LOGIC; oen_n3 : out STD_LOGIC ); end romc; architecture Behavioral of romc is signal addr : std_logic_vector(1 downto 0); --input signal rdata : std_logic_vector(3 downto 0); --output begin addr <= s3 & s2 & s1 & s0 ; process(addr) begin case (addr) is when "0000" => rdata <= "100010101"; when "0001" => rdata <= "010010101"; when "0011" => rdata <= "010110101"; when "0010" => rdata <= "010011001"; when "0110" => rdata <= "010000001"; when "0100" => rdata <= "000010101"; when "0101" => rdata <= "001010101"; when "0111" => rdata <= "001010111"; when "1000" => rdata <= "001010110"; when others => rdata <= "000000000"; end case; end process; oen <= rdata(0); we1 <= rdata(1); we2 <= rdata(2); gwe1 <= rdata(3); oen_n1 <= rdata(4); gwe2 <= rdata(5); oen_n2 <= rdata(6); gwe3 <= rdata(7); oen_n3 <= rdata(8); end Behavioral; data_bus改编代码 ---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 16:56:32 03/08/2013 -- Design Name: -- Module Name: data_bus - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity data_bus is Port ( clk : in STD_LOGIC; data_in1 : in STD_LOGIC_VECTOR (3 downto 0); data_in2 : in STD_LOGIC_VECTOR (3 downto 0); data_in3 : in STD_LOGIC_VECTOR (3 downto 0); data_in4 : in STD_LOGIC_VECTOR (3 downto 0); data_out1 : out STD_LOGIC_VECTOR (3 downto 0); data_out2 : out STD_LOGIC_VECTOR (3 downto 0); data_out3 : out STD_LOGIC_VECTOR (3 downto 0); data_out4 : out STD_LOGIC_VECTOR (3 downto 0); data_io1 : inout STD_LOGIC_VECTOR (3 downto 0); data_io2 : inout STD_LOGIC_VECTOR (3 downto 0); we1 : in STD_LOGIC; we2 : in STD_LOGIC; we3 : in STD_LOGIC; we4 : in STD_LOGIC; we_io1: in STD_LOGIC; we_io2: in STD_LOGIC); end data_bus; architecture Behavioral of data_bus is signal bus_data_reg : STD_LOGIC_VECTOR (3downto 0); signal out_en : STD_LOGIC; begin out_en <= '0' when (we1='1' or we2='1' or we3='1' or we4='1' or we_io1 = '1' or we_io2 = '1') else '1'; data_io1 <= bus_data_reg when out_en = '1' else "ZZZZ"; data_io2 <= bus_data_reg when out_en = '1' else "ZZZZ"; data_out1 <= bus_data_reg; data_out2 <= bus_data_reg; data_out3 <= bus_data_reg; data_out4 <= bus_data_reg; process(clk) begin if clk'event and clk = '1' then if we1 = '1' then bus_data_reg <= data_in1; elsif we2 = '1' then bus_data_reg <= data_in2; elsif we3 = '1' then bus_data_reg <= data_in3; elsif we4 = '1' then bus_data_reg <= data_in4; elsif we_io1 = '1' then bus_data_reg <= data_io1; elsif we_io2 = '1' then bus_data_reg <= data_io2; end if; end if; end process; end Behavioral; THANKS !!! 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求 欢迎您的下载,资料仅供参考 -可编辑修改-
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服