0523-eda实验报告(组合电路设计)
电子设计自动化课程实验报告
学号:08291117
姓名: 图尔荪。依明
班级:电气0804
任课老师:李景新
EDA第二次实验报告
第二次实验报告
3
EDA第二次实验报告
组合电路设计(一)
课题:设计一个四位全加器,进位输出是快速进位位
一、 实验内容
设计一个四位的全加器,进位输出是快速进位位;
二、 实验设计及过程
(1) 设计思路
快速进位加法器,也就是超前进位加法器,其原理简单地说就是使各位的进位直接由加数和被加数来决定,即有如下逻辑表达式:
CiAiBiAiCi1BiCi1AiBi(AiBi)Ci1
而不需要依赖低位进位。
逻辑表达式解释:当第i位被加数Ai和加数Bi均为1时,有
AiBi1,由“或”的原理可知,不论低位运算(AiBi)Ci1结果
如何,本位必然有进位输出(Ci1时,有
AiBi01)。当Ai和Bi中只有一个为
且AiBi1,因此CiCi1。所以,四
位二进制全加器的“和”与“进位”相结合,可得到表达式:
4
EDA第二次实验报告
SiAiBiCi1
从而构成快速进位加法器。 (2) 流程图
5
EDA第二次实验报告
(3) 程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY quanjiaqi IS
PORT(A0,A1,A2,A3,B0,B1,B2,B3,Ci:IN STD_LOGIC; S0,S1,S2,S3,Co:OUT STD_LOGIC );
END quanjiaqi;
ARCHITECTURE beth OF quanjiaqi IS BEGIN
PROCESS(A0,A1,A2,A3,B0,B1,B2,B3,Ci) VARIABLE U0,U1,U2:STD_LOGIC;
BEGIN
S0<=(A0 xor B0) xor Ci;
U0:=(A0 AND B0) OR ((A0 OR B0) AND Ci);
S1<=(A1 xor B1) xor U0;
U1:=(A1 AND B1) OR ((A1 OR B1) AND A0 and B0) or ((A1 or B1)
6
EDA第二次实验报告
and (A0 or B0) and Ci); S2<=(A2 xor B2) xor U1;
U2:=(A2 and B2) or ((A2 or B2) and A1 and B1) or ((A2
or B2) and (A1 or B1) and A0 and B0) or ((A2 or B2) and (A1 or B1) and (A0 or B0) and Ci);
S3<=(A3 xor B3) xor U2;
Co<=((A3 xor B3) and (A2 xor B2) and (A1 xor B1) and
(A0 xor B0) and Ci) or ((A3 xor B3) and (A2 xor B2) and (A1 xor B1) and A0 and B0 ) or ((A3 xor B3) and (A2 xor B2) and A1 and B1 ) or ((A3 xor B3) and A2 and B2) or (A3 and B3);
END PROCESS;
END beth; (4) 仿真波形
7
EDA第二次实验报告
波形解释:
1、0——10ns:1+1+1=3; 2、10——20ns:6+10=16; 3、20——30ns:1+10+5=16; 4、30——40ns:1+15+15=31.
(注:Ci 是借位位,Co 是进位位,A与B是加数,S为和) 由此可知,该仿真波形说明设计的正确性。
三、 实验收获
本实验为简单逻辑组合电路,全加器设计,使用了最简单“xor”和“and”语句,初步了解了VHDL语言的使用和quarters软件的编程环境,为之后的学习打下很好的基础。另外,对全加器中的快速进位有了深刻的了解,程序较逐步进位复杂难想,但可以使得程序执行起来快速,减少时间的损耗。
8
EDA第二次实验报告
四,试验中遇到的问题及解决步骤
1、找不到合适的编写方式实现快速进位在数电课本上找到了全加器的资料,并且找到了合适的公式。
2、建立文件编写完之后无法申报文件。应该把文件名与汇编语言中定义的名字一样。
组合电路设计(二)
课题:用IF语句和CASE语句设计一个4-16译码器
一·实验目的及内容 1、熟悉4-16译码器的原理
2、熟悉VHDL语言的编程逻辑的构建。 3、掌握VHDL语言的基本结构及使用方法。 二·实验设计思路
1、 使能端为E;当E=1时芯片开始工作.否者输出为
1111111111111111。
2、 当输入端口abcd为:
0000时输出q=1111111111111110
9
EDA第二次实验报告
0001时输出q=1111111111111101 0010时输出q=1111111111111011 0011时输出q=1111111111110111 0100时输出q=1111111111101111 0101时输出q=1111111111011111 0110时输出q=1111111110111111 0111时输出q=1111111101111111 1000时输出q=1111111011111111 1001时输出q=1111110111111111 1010时输出q=1111101111111111 1011时输出q=1111011111111111 1100时输出q=1110111111111111 1101时输出q=110111111111111 1110时输出q=101111111111111 1111时输出q=011111111111111 高阻或无输出时输出q= xxxxxxxxxxxxxxxx 三、流程图
10
Y N EDA第二次实验报告
四、源程序: library ieee;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY lsh IS
PORT(a,b,c,d,E:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END lsh ;
architecture behave of lsh is
signal indata:std_logic_vector(3 downto 0); begin
indata<=a&b&c&d;
11
…. …. EDA第二次实验报告
process(indata,E) begin
if(E='1') then case indata is
when \"0000\"=>q<=\"1111111111111110\"; when \"0001\"=>q<=\"1111111111111101\"; when \"0010\"=>q<=\"1111111111111011\"; when \"0011\"=>q<=\"1111111111110111\"; when \"0100\"=>q<=\"1111111111101111\"; when \"0101\"=>q<=\"1111111111011111\"; when \"0110\"=>q<=\"1111111110111111\"; when \"0111\"=>q<=\"1111111101111111\"; when \"1000\"=>q<=\"1111111011111111\"; when \"1001\"=>q<=\"1111110111111111\"; when \"1010\"=>q<=\"1111101111111111\"; when \"1011\"=>q<=\"1111011111111111\"; when \"1100\"=>q<=\"1110111111111111\"; when \"1101\"=>q<=\"1101111111111111\"; when \"1110\"=>q<=\"1011111111111111\"; when \"1111\"=>q<=\"0111111111111111\";
when others=>q<=\"XXXXXXXXXXXXXXXX\"; end case;
12
EDA第二次实验报告
else
q<=\"1111111111111111\"; end if; end process; end behave;
五、仿真波形
当使能端E=0时,输出全为1
13
EDA第二次实验报告
当使能端E=1时,输入0100,输出为q(4)=0,其余为1
一、 实验收获
本次实验开始使用条件语句IF和CASE。IF是假设有某种情况后,进而执行相应的程序;当假设条件比较多而且有一定规律时,就应该使用CASE语句进行编程。
14
EDA第二次实验报告
第三次实验报告
时序电路设计
课题:4位二进制同步加/减法可逆计数器
一·实验目的及内容
1.了解4位二进制同步加/减法可逆计数器原理。 2.熟悉VHDL语言的基本结构及使用方法。
二·实验设计思路
输入端口:
clr:清零端(高电平有效,异步清零)
15
EDA第二次实验报告
clk:时钟脉冲
d3~d0:4位二进制数输入端
updown: 加/减法控制信号(1——执行加;0——执行减) 输出端口:
q3~q0:4位二进制计数输出 co:进位输出 bo:借位输出 运行过程:
clr为0时输出q3~q0为0000; 当clr为1是芯片开始工作;
load为1时输出为q3q2q1q0= d3d2d1d0;
当updown=1时为加法计数器co=0当q3q2q1q0=1111时给一个clk脉冲时co=1且q3q2q1q0=0000;
当updown=0时为加法计数器bo=0当q3q2q1q0=0000时给一个clk脉冲时co=1且q3q2q1q0=1111。
三、流程图
16
EDA第二次实验报告
四、源程序 library ieee;
use ieee.std_logic_1164.all; entity lsh is
port(clr,clk,load,updown:in std_logic; d:in integer range 0 to 15;
17
EDA第二次实验报告
count:out std_logic;
q:buffer integer range 0 to 15); end lsh;
architecture one of lsh is begin
process(clk,clr,d,load,updown) begin
if clr='0'then q<=0;
elsif(clk'event and clk='1')then
if load='1'then q<=d; elsif updown='0'then q<=q+1;
if q=15 then count<='1';end if;
else q<=q-1;
if q=0 then count<='0';end if;
end if;
end if;
end process; end one;
五、仿真波形
18
EDA第二次实验报告
使能端clr为0时,输出始终为0
使能端为1,置数load=1时,在脉冲的作用下,输出q=输
入d
19
EDA第二次实验报告
使能端为1,置数load=0时,实现如图所示计数功能 六、实验中遇到的问题及解决步骤
问题:编写程序时,由于过多使用elsif等语句,导致编写的逻辑有点不太清晰,end if 语句有时候没有一一对应清楚,在编译时出现错误。
解决方法:尝试过过取消elsif语句,把所有的情况都用if列些出来,虽然程序逻辑上不会混乱,但是程序显得比较冗长,为了使程序更精练,我们调整了程序的结构,让end if与相应的if语句对其,让程序读起来更有逻辑性,条理性。
20
因篇幅问题不能全部显示,请点此查看更多更全内容