《EDA实验总结报告.doc》由会员分享,可在线阅读,更多相关《EDA实验总结报告.doc(23页珍藏版)》请在三一文库上搜索。
1、数字EDA实验 实验报告学院: 计算机科学与工程学院 专业: 通信工程 学号: 0941903207 姓名: 薛蕾 指导老师: 钱强 实验一 四选一数据选择器的设计一、实验目的1、熟悉Quartus II软件的使用。2、了解数据选择器的工作原理。3、熟悉EDA开发的基本流程。二、实验原理及内容实验原理数据选择器在实际中得到了广泛的应用,尤其是在通信中为了利用多路信号中的一路,可以采用数据选择器进行选择再对该路信号加以利用。从多路输入信号中选择其中一路进行输出的电路称为数据选择器。或:在地址信号控制下,从多路输入信息中选择其中的某一路信息作为输出的电路称为数据选择器。数据选择器又叫多路选择器,简
2、称MUX。4选1数据选择器:(1)原理框图:如右图。D0 、D1、D2、D3 :输入数据A1 、A0 :地址变量由地址码决定从路输入中选择哪路输出。(2)真值表如下图:(3)逻辑图 数据选择器的原理比较简单,首先必须设置一个选择标志信号,目的就是为了从多路信号中选择所需要的一路信号,选择标志信号的一种状态对应着一路信号。在应用中,设置一定的选择标志信号状态即可得到相应的某一路信号。这就是数据选择器的实现原理。三实验内容1、分别采用原理图和VHDL语言的形式设计4选1数据选择器2、对所涉及的电路进行编译及正确的仿真。电路图: 四、实验程序library ieee;use ieee.std_Log
3、ic_1164.all;ENTITY mux4 IS PORT( a0, a1, a2, a3 :IN STD_LOGIC; s :IN STD_LOGIC_VECTOR (1 DOWNTO 0); y :OUT STD_LOGIC );END mux4;ARCHITECTURE archmux OF mux4 IS BEGINy = a0 WHEN s = 00 else -当s=00时,y=a0a1 WHEN s = 01 else -当s=01时,y=a1a2 WHEN s = 10 else -当s=10时,y=a2a3; -当s取其它值时,y=a2END archmux;五、运行结果
4、 六实验总结真值表分析: 当js=0时,a1,a0取00,01,10,11时,分别可取d0,d1,d2,d3.实验二 血型配对器的设计一、实验目的1、进一步熟悉Quartus II软件的使用。2、掌握简单组合逻辑电路的设计方法与功能仿真技巧。3、进一步学习Quartus II中基于原理图设计的流程。二、实验原理及内容实验原理人类有O、A、B、AB 种基本血型,输血者与受血者的血型必须符合图示原则。设计一血型配对电路,用以检测输血者与受血者之间的血型关系是否符合,如果符合,输出为1,否则为0。已知: AB血型是万能受血者,O血型是万能献血者!如果要输血给O型血,那么可以的血型是O型!如果要输血给
5、A型血,那么可以的血型是A,O型!如果要输血给B型血,那么可以的血型是B,O型!如果要输血给AB型血,那么可以的血型是A,B,AB,O型! OOAABBABAB受血者输血者三实验内容1、用VHDL语言编写程序实现血型配对器的功能LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Vxuexing ISPORT(P,Q,R,S:IN STD_LOGIC;F:OUT STD_LOGIC);END Vxuexing;ARCHITECTU
6、RE A OF Vxuexing ISBEGIN F=(NOT P)AND(NOT Q)OR(R AND S)OR (NOT P)AND S)OR(NOT Q)AND R);END A;2、对所编写的电路进行编译及正确的仿真。实验分析真值表P,Q表示输血者的血型;R,S,表示受血者的血型。当两者符合血型配合原则时,F=1,否则为0.四、运行结果五、实验总结本实验给出了四种不同的血型编码,PQ(1,1),RS(1,1)表示AB型血,P,Q(1,0),RS(1,0)表示B型血,PQ(0,1),RS(0,1)表示A型血,PQ(0,0),RS(0,0)表示O型血。根据真值表,并根据实验的原理图,画出电
7、路图并进行连接。实验三 简单数字钟的设计一、实验目的1、了解数字钟的工作原理。2、进一步学习Quartus II中基于VHDL设计的流程。3、掌握VHDL编写中的一些小技巧。4、掌握简单时序逻辑电路的设计方法与功能仿真技巧。二、实验原理及内容实验原理简单数字钟应该具有显示时分秒的功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转三实验内容1、用原理图的方式编写一个12/24进制的计数器,并创建为SYMBOL文件。2、用VHDL的方式编写一个60进制的计数器,并创建为SY
8、MBOL文件。3、创建顶层文件。调用已编写的SYMBOL文件,设计简单的数字钟电路。2、对所编写的电路进行编译及正确的仿真。二十四进制VHDLLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT24 IS PORT( CP, EN, Rd, LD :IN STD_LOGIC;D :IN STD_LOGIC_VECTOR(5 DOWNTO 0);Co :OUT STD_LOGIC;Q :OUT STD_LOGIC_VECTOR
9、(5 DOWNTO 0) ); END CNT24;ARCHITECTURE STR OF CNT24 IS SIGNAL QN : STD_LOGIC_VECTOR(5 DOWNTO 0 ) ; BEGINCo= 1WHEN (QN = 010111AND EN=1) ELSE 0;PROCESS (CP, RD)BEGINIF (Rd =0) THEN QN= 000000;ELSIF (CPEVENT AND CP=1) THENIF (LD=0) THENQN = D;ELSIF (EN=1) THENQN = QN+1;END IF;END IF;END PROCESS;Q = QN
10、;END STR ;六十进制VHDLLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jsq60 ISPORT(en,rd,cp :IN STD_LOGIC; qh:buffer STD_LOGIC_VECTOR(3 DOWNTO 0); ql :buffer STD_LOGIC_VECTOR(3 DOWNTO 0); Co :OUT STD_LOGIC);END jsq60;ARCHITECTURE b OF jsq60 IS
11、BEGINCo=1when(qh=0101and ql=1001 and en=1)else0;PROCESS (cp,rd) BEGINIF (rd=0) THENqh=0000;ql=0000;ELSIF (cpEVENT AND cp=1) THEN IF (en=1) THEN IF (ql=9) THEN ql=0000; IF (qh=5) THEN qh=0000; ELSE qh=qh+1; end if; else qllightstatus:=001100;acountl=0101;acounth=0000;bcountl=0101;bcounthif(enb=1)then
12、lightstatus:=100010;acountl=0000;acounth=0011;bcountl=0101;bcounth=0010; elselightstatus:=010100;acountl=0101;acounth=0100;bcountl=0000;bcounthlightstatus:=100001;acountl=0101;acounth=0000;bcountl=0101;bcounthlightstatus:=010100;acountl=0101;acounth=0100;bcountl=0000;bcounthlightstatus:=010100;acoun
13、tl=0101;acounth=0100;bcountl=0000;bcounth=0101; end case;elseif(acountl=0000)thenacounth=acounth-1;acountl=1001; elseacountl=acountl-1; end if; if(bcountl=0000)thenbcounth=bcounth-1;bcountl=1001; elsebcountl=bcountl-1;end if;end if;end if; ared=lightstatus(5);agreen=lightstatus(4);ayellow=lightstatu
14、s(3); bred=lightstatus(2);bgreen=lightstatus(1);byellow=lightstatus(0);end process;end one;四、运行结果分析:这里a代表东西方向,b代表南北方向,acounth是表示东西方向五进制计数acountl是东西方向六进制计数,bcounth则表示南北方向五进制,bounthl则是南北方向六进制计数东西方向为0时,东西方向红灯亮(ared=1)东西方向在14之间,东西方向绿灯亮(即agreen=1)南北方向的红灯亮起(即bred=1)五、实验总结此设计问题可分为主控电路,译码驱动电路和扫描显示部分。但是,这远远不
15、能满足实际生活的需要,还应设置倒计时秒数,因此可在此电路基础上外加一个定时模块。实验五 流水灯的设计一、实验目的1、了解流水灯的工作原理。二、实验原理及内容实验原理要完成本实验,首先必须了解流水灯的原理。所谓的流水灯实际上就是由多个LED发光二极管构成的电路,当发光二极管可以依次点亮时,即能呈现流水的效果。实验内容1、设计能带8个LED发光管发光,并按照要求轮流发光,产生流水灯的流动效果。2、应具有两种以上不同风格的流动闪亮效果。比如依次点亮或者依次熄灭。(选作)3、有起动、停止控制键。(选作)4、有流动闪亮效果选择设置键。(选作)5、对所编写的电路进行编译及正确的仿真。三、实验程序LIBRA
16、RY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yiweijicun1 IS PORT (CP,R,DSR,DSL:IN STD_LOGIC; S:STD_LOGIC_VECTOR(2 DOWNTO 0); D:STD_LOGIC_VECTOR(7 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END yiweijicun1;ARCHITECTURE yiweijicun_arch OF
17、 yiweijicun1 IS SIGNAL IQ: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS (CP,R,IQ)BEGINIF (R=1) THEN IQ 0);ELSIF(CPEVENT AND CP =1)THENCASE CONV_INTEGER(S) IS WHEN 0=NULL; WHEN 1= IQ IQ IQ IQ IQ IQ IQ NULL;END CASE;END IF;Q = IQ;END PROCESS;END yiweijicun_arch;四、运行结果结果分析:d0d7为八个输入端,s0和s1控制流水灯得输出,s=1保持,s
18、=2实现左移功能,s=3实现右移功能,因为延迟的原因,在s=2时,需要经过一段时间才能实现循环右移的功能,流水灯的实现其实是运用了8位移位寄存器,它只是运用了其中的保持左移与右移的功能,8LO位移位寄存器还有循环右移,循环左移,算数右移,算数左移等功能。五、实验总结了解了移位寄存器的功能和原理通过这次实验,加深了VHDL语言的运用能力,更进一步了解了8位移位寄存器的功能。实验六 乘法器的设计一、实验目的1、了解乘法器的工作原理。2、了解复杂时序电路的设计流程。二、实验原理及内容实验原理具体设计原理参见教材188页。实验内容1、设计一个能进行两个十进制数相乘的乘法器,乘数和被乘数均小于100。
19、(可以参考教材231页的VHDL代码来设计)2、对所编写的电路进行编译及正确的仿真。三、实验程序library IEEE;use IEEE.std_logic_1164.all;entity one_bit_adder isport (A: in STD_LOGIC;B: in STD_LOGIC;C_in: in STD_LOGIC;S: out STD_LOGIC;C_out: out STD_LOGIC);end one_bit_adder;architecture one_bit_adder of one_bit_adder isbeginS = A xor B xor C_in;C_
20、out A_MULT_B0(1), B = A_MULT_B1(0), C_in = ZERO, S = C_TEMP(1), C_out = C0_out_B0);U_0_1 : one_bit_adder port map (A = A_MULT_B0(2), B = A_MULT_B1(1), C_in = C0_out_B0, S = S_TEMP1(0), C_out = C1_out_B0);U_0_2 : one_bit_adder port map (A = ZERO, B = A_MULT_B1(2), C_in = C1_out_B0, S = S_TEMP1(1), C_
21、out = C2_out_B0);U_1_0 : one_bit_adder port map (A = A_MULT_B2(0), B = S_TEMP1(0), C_in = ZERO, S = C_TEMP(2), C_out = C0_out_B1);U_1_1 : one_bit_adder port map (A = A_MULT_B2(1), B = S_TEMP1(1), C_in = C0_out_B1, S = S_TEMP2(0), C_out = C1_out_B1);U_1_2 : one_bit_adder port map (A = A_MULT_B2(2), B
22、 = C2_out_B0, C_in = C1_out_B1, S = S_TEMP2(1), C_out = C2_out_B1);A_MULT_B0(0) = A (0) and B (0);A_MULT_B0(1) = A (1) and B (0);A_MULT_B0(2) = A (2) and B (0);A_MULT_B1(0) = A (0) and B (1);A_MULT_B1(1) = A (1) and B (1);A_MULT_B1(2) = A (2) and B (1);A_MULT_B2(0) = A (0) and B (2);A_MULT_B2(1) = A
23、 (1) and B (2);A_MULT_B2(2) = A (2) and B (2);ZERO = 0;C_TEMP(0) = A_MULT_B0(0);C_TEMP(4 downto 3) = S_TEMP2(1 downto 0);C_TEMP(5) = C2_out_B1;C_TEMP(6) = A(3) xor B(3);data_out = C_TEMP;end multi_arch;四、运行结果乘法器实现A,B两数的相乘。A0A3以及是实现输入端的控制。由图看出,输出上产生了延迟是因为当A3输入1,对应了十进制的8,B0输入1,对应了十进制的1,两者相乘得8,即在data_out端应输出8,此处因仍存在竞争冒险。五、实验总结 乘法器的设计的问题可以分为乘数和被乘数控制模块,寄存模块,乘法模块和扫描显示模块几个部分。两数相乘的方法很多,可以用移位相加的方法,也可以将乘法器看成计数器,乘积的初始值为零,每一个时钟周期将被乘数的值加到积上,同时乘数减一,这样反复执行,直到乘数为零。
链接地址:https://www.31doc.com/p-6355998.html