为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告

2017-09-17 35页 doc 501KB 108阅读

用户头像

is_037433

暂无简介

举报
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告 VHDL实验报告 班级:电子 学号: 姓名: 2014/5/23 Experiment 1 两位二进制数的大小比较器 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。 (2)学习VHDL的基本语法及编程设计。 二、实验内容: 数值比较器设计 三、实验要求: (1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; 2)设计输入使用插入语言模板(Insert ...
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU实验 VHDL实验报告 班级:电子 学号: 姓名: 2014/5/23 Experiment 1 两位二进制数的大小比较器 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发。 (2)学习VHDL的基本语法及编程设计。 二、实验内容: 数值比较器设计 三、实验要求: (1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; 2)设计输入使用插入语言模板(Insert Template); ( (3)在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证。 四、实验原理: 根据两位二进制数的大小得到对应的比较结果,其电路示意图及电路特性为: 比较器特性表 A B In_s In_l In_e 比较器电路示意图 YsYe YlY A > B × × × 0 0 1 A[3:0] Yl Number B[3:0] A < B × × × 1 0 0 Ye A = B 0 1 0 0 0 1 In_s Ys Comparer In_l A = B 1 0 0 1 0 0 In_e A = B 0 0 1 0 1 0 A = B 0 0 0 × × × A = B × 1 1 × × × A = B 1 × 1 × × × A = B 1 1 × × × × 五、程序编写、调试及仿真 (芯片型号:MAX?系列EPM1270T144C5) (1)程序编写: library ieee; use ieee.std_logic_1164.all; 2 entity Vhdl1 is port(a,b:in std_logic_vector(3 downto 0); ins,inl,ine: in std_logic; ys,ye,yl: out std_logic ); end Vhdl1; architecture one of Vhdl1 is signal temps,tempe:std_logic; begin ys<=temps; ye<=tempe; yl<=temps nor tempe; process(a,b,ine) begin if (a=b and ine='1')then tempe<='1'; else tempe<='0'; end if; end process; process(a,b,ins) begin if(a分析
本实验实现了两位二进制数的比较。当两位二进制数的高位不相等时,不在进行低位的比较,直接判断出结果;当两位二进制数的高位相等时,则借助判断二进制数的低位是否相等来进行两位二进制数的大小判断。 七、实验注意事项 实体(entity)名称与文件名称一致; 时序仿真时,波形编辑后先保存波形文件再进行时序仿真; 分配管脚后,需要重现编译,然后才能下载。 设计流程:新建项目,新建源文件,输入语言,编译,仿真,分配管脚,编译,下载 仿真流程:新建波形文件,导入管脚信号并编辑输入信号,仿真 下载的时候选择硬件为:USB-Blaster[USB-0]。 4 Experiment 2 Designing 8 to1-Multiplxer 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。 (2)学习VHDL的基本语法及编程设计。 二、实验内容: 八选一数据选择器设计 三、实验要求: (1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; 2)设计输入使用插入语言模板(Insert Template); ( (3)在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证。 四、实验原理: 电路功能表及其电路外部符号如下: 电路功能表 Sb Mux8-1 Sb A2 A1 A0 Y D0 1 × × × D1 D2 D0 0 0 0 0 D3 D4 D1 0 0 0 1 D5 D2 0 0 1 0 D6 D7 D3 0 0 1 1 A2 D4 0 1 0 0 A1 D5 0 1 0 1 A0 D6 0 1 1 0 D7 0 1 1 1 五、程序编写、调试及仿真 (芯片型号:MAX?系列EPM1270T144C5) (1)程序编写: library ieee; use ieee.std_logic_1164.all; 5 ENTITY mux8_1 IS PORT(d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); sel: IN STD_LOGIC_VECTOR(2 DOWNTO 0); sb : IN STD_LOGIC; y : OUT STD_LOGIC); END mux8_1; ARCHITECTURE rtl OF mux8_1 IS BEGIN PROCESS (d, sel,sb) BEGIN If(sb='0') then case(sel) is When "000" => y<=d(0); When "001" => y<=d(1); When "010" => y<=d(2); When "011" => y<=d(3); When "100" => y<=d(4); When "101" => y<=d(5); When "110" => y<=d(6); When "111" => y<=d(7); When others => y<='X'; end case; else y<='0'; end if; END PROCESS; END rtl; (2)功能仿真和芯片时序仿真: (3)芯片引脚设定: 6 (4)适配下载结果 六、实验结论 本实验实现了8选1数据选择器的设计,通过选择信号sel的变化来选择8位数据d[7:0]的哪一位。关于sel的选择信号和d[7:0]每一位的对应关系自己可以自行设计。 七、实验注意事项 实体(entity)名称与文件名称一致; 时序仿真时,波形编辑后先保存波形文件再进行时序仿真; 分配管脚后,需要重现编译,然后才能下载。 设计流程:新建项目,新建源文件,输入语言,编译,仿真,分配管脚,编译,下载 仿真流程:新建波形文件,导入管脚信号并编辑输入信号,仿真 下载的时候选择硬件为:USB-Blaster[USB-0]。 7 Experiment 3 Designing module _60 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。 (2)学习数字系统中层次化设计技巧、结构化设计的VHDL程序设计 (3)学习显示译码电路 分频电路、计数电路的VHDL程序设计 二、实验内容: 基于数码管显示的60进制计数器设计 三、实验要求: (1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; (2) 将50MHz信号分频为1Hz信号,以1Hz为60进制计数器使能信号,实现60进制计数功能; (3) 计数进位持续时间1s用LED显示,计数结果用两位数码管显示; (4) 设计位同步时序电路, 在QuartusII开发环境下对设计程序进行时序仿真; (5) 将生成的配置文件下载到实验板,进行最终的实物测试验证; 四、实验原理: 先对50MHz时钟信号分频得到1Hz,然后调用两个10进制计数器,计数到59时回到初始0的计数状态,每个10进制计数的技术结果通过显示译码送到两位数码管上显示,结构框图如下: 8 五、程序编写、调试及仿真 (芯片型号:MAX?系列EPM1270T144C5) (1)程序编写: ?、60进制计数器顶层程序: library ieee; use ieee.std_logic_1164.all; entity count_60 is port(clk,rst:in std_logic; count_data10,count_data1: out std_logic_vector(6 downto 0); en_out :out std_logic ); end count_60; architecture rtl of count_60 is component sec_out port(clk,rst:in std_logic; en_out :out std_logic ); end component; component count_10 port(clk,rst,en_in,ld:in std_logic; data_in:in std_logic_vector(3 downto 0); data_out:out std_logic_vector(3 downto 0); en_out :out std_logic ); end component; component dis_decode port(data_in:in std_logic_vector(3 downto 0); dis_num :out std_logic_vector(6 downto 0) ); end component; signal cont_tmp10,cont_tmp1,data_in:std_logic_vector(3 downto 0); signal ld,sec_en,sec_en10,min_out:std_logic; begin ld<=sec_en10 and cont_tmp10(2) and cont_tmp10(0); data_in<="0000"; en_out<=cont_tmp10(2) and cont_tmp10(0) and cont_tmp1(3) and cont_tmp1(0); U0:sec_out port map(clk,rst,sec_en); U1:count_10 port map(clk,rst,sec_en,ld,data_in,cont_tmp1,sec_en10); U2:count_10 port map(clk,rst,sec_en10,ld,data_in,cont_tmp10,min_out); U3:dis_decode port map(cont_tmp1,count_data1); 9 U4:dis_decode port map(cont_tmp10,count_data10); end rtl; ?、10进制计数器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity count_10 is port(clk,rst,en_in,ld : in std_logic; data_in : in std_logic_vector(3 downto 0); data_ou t: out std_logic_vector(3 downto 0); en_out :out std_logic ); end count_10; architecture rtl of count_10 is signal cont_tmp:std_logic_vector(3 downto 0); begin en_out<=en_in and cont_tmp(3) and cont_tmp(0); data_out<=cont_tmp; process(clk,rst) begin if(rst='0')then cont_tmp<="0000"; elsif(clk'event and clk='1')then if(ld='1')then cont_tmp<=data_in; elsif(en_in='1')then if(cont_tmp="1001")then cont_tmp<="0000"; else cont_tmp<=cont_tmp+'1'; end if; end if; end if; end process; end rtl; ?、LED译码器 10 library ieee; use ieee.std_logic_1164.all; entity dis_decode is port(data_in:in std_logic_vector(3 downto 0); dis_num :out std_logic_vector(6 downto 0) ); end dis_decode; architecture rtl of dis_decode is begin with data_in select dis_num<="0111111" WHEN "0000", "0000110" WHEN "0001", "1011011" WHEN "0010", "1001111" WHEN "0011", "1100110" WHEN "0100", "1101101" WHEN "0101", "1111101" WHEN "0110", "0000111" WHEN "0111", "1111111" WHEN "1000", "1101111" WHEN "1001", "0000000" WHEN others; end rtl; ?、50M分频器 library ieee; use ieee.std_logic_1164.all; entity sec_out is port(clk,rst:in std_logic; en_out :out std_logic ); end sec_out; architecture rtl of sec_out is component divide_5 port(clk,rst,en_in:in std_logic; en_out :out std_logic ); end component; component divide_10 port(clk,rst,en_in:in std_logic; en_out :out std_logic ); end component; signal en0,en1,en2,en3,en4,en5,en6,en7:std_logic; 11 begin en_out<=en7; U0:divide_5 port map(clk,rst,'1',en0); U1:divide_10 port map(clk,rst,en0,en1); U2:divide_10 port map(clk,rst,en1,en2); U3:divide_10 port map(clk,rst,en2,en3); U4:divide_10 port map(clk,rst,en3,en4); U5:divide_10 port map(clk,rst,en4,en5); U6:divide_10 port map(clk,rst,en5,en6); U7:divide_10 port map(clk,rst,en6,en7); end rtl; ?、5分频 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity divide_5 is port(clk,rst,en_in : in std_logic; en_out : out std_logic ); end divide_5; architecture rtl of divide_5 is signal cont_tmp:std_logic_vector(2 downto 0); begin en_out<=en_in and cont_tmp(2); process(clk,rst) begin if(rst='0')then cont_tmp<="000"; elsif(clk'event and clk='1')then if(en_in='1')then if(cont_tmp="100")then cont_tmp<="000"; else cont_tmp<=cont_tmp+'1'; end if; end if; end if; end process; end rtl; 12 ?、10分频 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity divide_10 is port(clk,rst,en_in:in std_logic; en_out :out std_logic ); end divide_10; architecture rtl of divide_10 is signal cont_tmp:std_logic_vector(3 downto 0); begin en_out<=en_in and cont_tmp(3) and cont_tmp(0); process(clk,rst) begin if(rst='0')then cont_tmp<="0000"; elsif(clk'event and clk='1')then if(en_in='1')then if(cont_tmp="1001")then cont_tmp<="0000"; else cont_tmp<=cont_tmp+'1'; end if; end if; end if; end process; end rtl; (2)功能仿真和芯片时序仿真: ?、5分频仿真波形 13 ?、50分频仿真波形 950*603*10M,因为要有个大数据量,仿真不容易进行,所以在此我们改编仿真50分频的波形。 ?、10进制计数器仿真波形 ?、LED译码器 ?、60进制计数器仿真波形 14 (3)芯片引脚设定: (4)适配下载结果 六、实验总结 本实验实现了60进制计数器的功能设计,该实验涉及到了分频器、译码器、10进制计数器的设计以及从元件例化,然后到调用的层次化、结构化系统设计的方法,整个程序层次清晰,易于理解和实现。 15 Experiment 4 Designing shift_register 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程以及VHDL的基本语法。 (2)学习数字系统中移位寄存器设计及其VHDL编程 二、实验内容: 移位寄存器设计 三、实验要求: (1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; (2) 设计位同步时序电路, 在QuartusII开发环境下对设计程序进行时序仿真; (3) 将生成的配置文件下载到实验板,进行最终的实物测试验证; 四、实验原理: 根据控制位key_in、ld、ctr、clr来控制移位寄存器的状态,其电路示意图及电路特性表为: 比较器特性表 比较器电路示意图 clr clk load key_in ctr 0 × × × × data_in [3:0] 复位 data_q [3:0]) clk 1 0 × × 置数 clr 1 1 0 × 保持 Shift_register load 1 1 0 × 保持 ctr 1 1 1 0 右移 key_in 1 1 1 1 左移 sr sl 五、程序编写、调试及仿真 (1)程序编写: (芯片型号:MAX?系列EPM1270T144C5) library ieee; use ieee.std_logic_1164.all; ENTITY shift IS 16 PORT(clr,clk,ld,ctr,key_in,sr,sl : IN STD_LOGIC; data_in : IN STD_LOGIC_VECTOR(3 downto 0); data_q : OUT STD_LOGIC_VECTOR(3 downto 0) ); END shift; ARCHITECTURE arc OF shift IS signal data_tmp : STD_LOGIC_VECTOR(3 downto 0); signal key_en: std_logic; BEGIN data_q <= data_tmp; PROCESS(clr,clk) BEGIN IF (clr='0') THEN data_tmp <="0000"; ELSIF (clk'EVENT AND clk='1') THEN IF ld='0' THEN data_tmp <= data_in; ELSIF (key_in ='1' AND ctr='0') THEN data_tmp <=sr & data_tmp(3 downto 1); --youyi ELSIF (key_in ='1' AND ctr='1') THEN data_tmp <=data_tmp(2 downto 0) & sl ; --zuoyi END IF; END IF; END PROCESS; END arc; (2)功能仿真和芯片时序仿真: (3)芯片引脚设定: 17 (4)适配下载结果 六、实验结论 本实验实现了4位简单移位寄存器的设计,通过clr='0'来使寄存器清零。 当时钟上升沿到来的时候:ld='0'时,实现将data_in[3:0]送到输出端data_out[3:0],实现置数功能; key_in ='1' 并且 ctr='1'时,将sl数据送到到次态data_tmp[0], 而现态data_tmp[2:0]则转变为次态data_tmp[3:1],从而实现左移功能; key_in ='1' 并且 ctr='0'时,将sr数据送到到次态data_tmp[3], 而现态data_tmp[3:1]则转变为次态data_tmp[2:0],从而实现右移功能。 18 Experiment 5 Designing basic ALU 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程以及VHDL的基本语法。 (2)学习逻辑功能模块的VHDL设计 二、实验内容: 4 bit基本ALU单元的设计 三、实验要求: (1) 要求设计的ALU单元具有4bit加、减加算术运算和逻辑与、或运算; (2) 将生成的配置文件下载到实验板,进行最终的实物测试验证; 四、实验原理: 算术运算和逻辑运算通过功能选择信号的不同取值实现,对应的电路示意图和功能表如下: 功能选择 输出 执行动作 S1 S0 加法 0 0 F=A+B 减法 0 1 F=A-B F=A?B 逻辑与 1 0 F=A?B 逻辑或 1 1 五、程序编写、调试及仿真 (1)程序编写: LIBRARY ieee; USE ieee.std_logic_1164.all; 19 USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; ENTITY alu_4bit IS PORT(A,B : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Cin : IN STD_LOGIC; S : IN STD_LOGIC_VECTOR(1 DOWNTO 0); BCDout : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Cout : OUT STD_LOGIC ); END alu_4bit; ARCHITECTURE arch OF alu_4bit IS SIGNAL c1,c2,Y1,Y2,Y3,Y4 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN BCDout<= Y1 when s="00" else Y2 when s="01" else Y3 when s="10" else Y4 when s="11" else "XXXX"; cout<= c1(3) when s="00" else c2(3) when s="01" else '0' ; add:PROCESS(A,B,Cin,c1) BEGIN Y1(0) <= A(0) XOR B(0) XOR Cin; c1(0) <= (A(0) AND B(0)) OR (cin AND (A(0) OR B(0))); GEN1: FOR I IN 1 TO 3 LOOP Y1(I) <= A(I) XOR B(I) XOR C1(I-1); c1(I) <= (c1(I-1) AND A(I)) OR (c1(I-1) AND B(I)) OR (A(I) AND B(I)); END LOOP; END PROCESS add; sub:PROCESS(A,B,Cin,c2) BEGIN Y2(0) <= A(0) XOR B(0) XOR Cin ; c2(0) <=((NOT A(0)) AND B(0)) OR (Cin AND B(0)) OR ((NOT A(0)) AND cin); GEN2:FOR I IN 1 TO 3 LOOP Y2(I) <= A(I) XOR B(I) XOR C2(I-1); c2(I) <= (c2(I-1) AND NOT A(I)) OR (c2(I-1) AND B(I)) OR (NOT A(I) AND B(I)); END LOOP; END PROCESS sub; 20 logic_and:PROCESS(A,B) BEGIN Y3(3) <= A(3) and B(3); Y3(2) <= A(2) and B(2); Y3(1) <= A(1) and B(1); Y3(0) <= A(0) and B(0); END PROCESS logic_and; logic_or:PROCESS(A,B) BEGIN Y4(3) <= A(3) or B(3); Y4(2) <= A(2) or B(2); Y4(1) <= A(1) or B(1); Y4(0) <= A(0) or B(0); END PROCESS logic_or; END arch; (2)功能仿真和芯片时序仿真: (3)芯片引脚设定: 21 (4)适配下载结果 六、实验总结 本实验实现了考虑带有进位、借位和4位加、减算术运算和4位逻辑与、逻辑或的基本运算,利用两位控制信号来决定程序做何种运算。在加减运算中处理非最低位是采用了FOR I IN 1 TO 3 LOOP…. END LOOP;的循序,缩短了程序。在逻辑与或运算中进、借位端无效,使用了并行赋值语句来完成。 22 Experiment 6 Designing Complex ALU 一、实验目的: (1)熟悉QuartusII的开发环境、熟练掌握编程开发流程以及VHDL的基本语法。 (2)学习逻辑功能模块的VHDL设计 二、实验内容: 复杂ALU单元的设计 三、实验要求: (1) 熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程; 设计的ALU单元具有4bit加、减加算术运算和逻辑与、或运算; (2) (3) 在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证; 四、实验原理: 算术运算和逻辑运算通过功能选择信号的不同取值实现,对应的电路示意图和功能表如下: 功能选择 输出 执行动作 Cin S2 S1 S0 0 加法 0 0 0 F=A+B 1 带进位加法 0 0 0 F=A+B+1 23 0 减法 0 0 1 F=A-B 1 带借位减法 0 0 1 F=A-B-1 0 传递(无进位) 0 1 0 F=A 1 A加1 0 1 0 F=A+1 0 传递(无借位) 0 1 1 F=A 1 A减1 0 1 1 F=A-1 F=A?B 逻辑与 1 0 0 X F=A?B 逻辑或 1 0 1 X F=A?B 异或 1 1 0 X 逻辑反 1 1 1 X F=~A 五、程序编写、调试及仿真 (芯片型号:MAX?系列EPM1270T144C5) (1)程序编写: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; ENTITY C_alu_4bit IS -- 4 bits ALU PORT(A,B : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Cin,C0: IN STD_LOGIC; S : IN STD_LOGIC_VECTOR(2 DOWNTO 0); BCDout : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Cout : OUT STD_LOGIC ); END C_alu_4bit; ARCHITECTURE arch OF C_alu_4bit IS SIGNAL c1,c2,c3,c4,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,Y10,Y11,Y12 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN BCDout<= Y1 when (s="000" and Cin='0') else --jia Y2 when (s="000" and Cin='1') else --c_jia Y3 when (s="001" and Cin='0') else --jian Y4 when (s="001" and Cin='1') else --c_jain Y5 when (s="010" and Cin='0') else --传递(无进位) Y6 when (s="010" and Cin='1') else --A加1 Y7 when (s="011" and Cin='0') else --传递(无借位) Y8 when (s="011" and Cin='1') else --A减1 Y9 when (s="100") else --and Y10 when (s="101") else --or 24 Y11 when (s="110") else --xor Y12 when (s="111") else --not "XXXX"; cout<= c1(3) when (s="000" and Cin='1') else c2(3) when (s="001" and Cin='1') else c3(3) when (s="010" and Cin='1') else c4(3) when (s="011" and Cin='1') else '0' ; --arithmetic operator add:PROCESS(A,B) BEGIN GEN1: FOR I IN 0 TO 3 LOOP Y1(I) <= A(I) XOR B(I); END LOOP; END PROCESS add; c_add:PROCESS(A,B,C0,c1) BEGIN Y2(0) <= A(0) XOR B(0) XOR C0; c1(0) <= (A(0) AND B(0)) OR (C0 AND (A(0) OR B(0))); GEN1: FOR I IN 1 TO 3 LOOP Y2(I) <= A(I) XOR B(I) XOR C1(I-1); c1(I) <= (c1(I-1) AND A(I)) OR (c1(I-1) AND B(I)) OR (A(I) AND B(I)); END LOOP; END PROCESS c_add; sub:PROCESS(A,B,Y1) BEGIN Y3<=Y1; END PROCESS sub; c_sub:PROCESS(A,B,C0,c2) BEGIN Y4(0) <= A(0) XOR B(0) XOR C0 ; c2(0) <=((NOT A(0)) AND B(0)) OR (C0 AND B(0)) OR ((NOT A(0)) AND C0); GEN2:FOR I IN 1 TO 3 LOOP Y4(I) <= A(I) XOR B(I) XOR c2(I-1); c2(I) <= (c2(I-1) AND NOT A(I)) OR (c2(I-1) AND B(I)) OR (NOT A(I) AND B(I)); END LOOP; END PROCESS c_sub; trans:PROCESS(A) BEGIN Y5<=A; 25 END PROCESS trans; plus1:PROCESS(A,c3) BEGIN Y6(0)<=A(0) xor '1'; c3(0)<=A(0); GEN3:FOR I IN 1 TO 3 LOOP Y6(I) <= A(I) XOR c3(I-1); c3(I) <= (A(I) AND c3(I-1)); END LOOP; END PROCESS plus1; trans_jie:PROCESS(A) BEGIN Y7<=A; END PROCESS trans_jie; subtract1:PROCESS(A,c4) BEGIN Y8(0)<=A(0) xor '1'; c4(0)<=NOT A(0); GEN4:FOR I IN 1 TO 3 LOOP Y8(I)<=A(I) XOR c4(I-1); c4(I)<=((NOT A(I)) AND c4(I-1)); END LOOP; END PROCESS subtract1; logic_and:PROCESS(A,B) BEGIN Y9(3) <= A(3) and B(3); Y9(2) <= A(2) and B(2); Y9(1) <= A(1) and B(1); Y9(0) <= A(0) and B(0); END PROCESS logic_and; logic_or:PROCESS(A,B) BEGIN Y10(3) <= A(3) or B(3); Y10(2) <= A(2) or B(2); Y10(1) <= A(1) or B(1); Y10(0) <= A(0) or B(0); END PROCESS logic_or; logic_xor:PROCESS(A,B) BEGIN Y11(3) <= A(3) xor B(3); 26 Y11(2) <= A(2) xor B(2); Y11(1) <= A(1) xor B(1); Y11(0) <= A(0) xor B(0); END PROCESS logic_xor; logic_not:PROCESS(A) BEGIN Y12(3) <=not A(3); Y12(2) <=not A(2); Y12(1) <=not A(1); Y12(0) <=not A(0); END PROCESS logic_not; END arch; (2)功能仿真和芯片时序仿真: (3)芯片引脚设定: 27 (4)适配下载结果 A[3:0]=”1010” B[3:0]=”1000” 28 六、实验总结 本实验在实验5基本4bit ALU 的基础上进行相应的功能扩展,增加了4bit不考虑进位和借位的加、减法运算、传递运算;加1、减1运算;逻辑异或、取反运算,利用三位控制信号来决定程序做何种运算。在加、减运算处理非最低位中仍采用FOR I IN 1 TO 3 LOOP…. END LOOP;的循序,缩短了程序。在逻辑进、借位端无效,仍使用了并行赋值语句来完成。 29
/
本文档为【基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索