电子设计自动化课程实验报告.docx
《电子设计自动化课程实验报告.docx》由会员分享,可在线阅读,更多相关《电子设计自动化课程实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
![电子设计自动化课程实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/31/aa9b061e-ae6b-4b6a-b47c-30d646f47fbb/aa9b061e-ae6b-4b6a-b47c-30d646f47fbb1.gif)
电子设计自动化课程实验报告
电子设计自动化课程试验汇报
第二次试验汇报
组合电路设计
(一)
课题:
设计一个四位全加器,进位输出是快速进位位
一、试验内容
设计一个四位全加器,进位输出是快速进位位;
二、试验设计及过程
(1)设计思绪
快速进位加法器,也就是超前进位加法器,其原理简单地说就是使各位进位直接由加数和被加数来决定,即有以下逻辑表示式:
而不需要依靠低位进位。
逻辑表示式解释:
当第i位被加数Ai和加数Bi均为1时,有
由“或”原理可知,不管低位运算
结果怎样,本位肯定有进位输出(
)。
当Ai和Bi中只有一个为1时,有
且
所以
。
所以,四位二进制全加器“和”与“进位”相结合,可得到表示式:
从而组成快速进位加法器。
(2)步骤图
(3)程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYquanjiaqiIS
PORT(A0,A1,A2,A3,B0,B1,B2,B3,Ci:
INSTD_LOGIC;
S0,S1,S2,S3,Co:
OUTSTD_LOGIC);
ENDquanjiaqi;
ARCHITECTUREbethOFquanjiaqiIS
BEGIN
PROCESS(A0,A1,A2,A3,B0,B1,B2,B3,Ci)
VARIABLEU0,U1,U2:
STD_LOGIC;
BEGIN
S0<=(A0xorB0)xorCi;
U0:
=(A0ANDB0)OR((A0ORB0)ANDCi);
S1<=(A1xorB1)xorU0;
U1:
=(A1ANDB1)OR((A1ORB1)ANDA0andB0)or((A1orB1)and(A0orB0)andCi);
S2<=(A2xorB2)xorU1;
U2:
=(A2andB2)or((A2orB2)andA1andB1)or((A2orB2)and(A1orB1)andA0andB0)or((A2orB2)and(A1orB1)and(A0orB0)andCi);
S3<=(A3xorB3)xorU2;
Co<=((A3xorB3)and(A2xorB2)and(A1xorB1)and(A0xorB0)andCi)or((A3xorB3)and(A2xorB2)and(A1xorB1)andA0andB0)or((A3xorB3)and(A2xorB2)andA1andB1)or((A3xorB3)andA2andB2)or(A3andB3);
ENDPROCESS;
ENDbeth;
(4)仿真波形
波形解释:
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软件编程环境,为以后学习打下很好基础。
另外,对全加器中快速进位有了深刻了解,程序较逐步进位复杂难想,但能够使得程序实施起来快速,降低时间损耗。
四,试验中碰到问题及处理步骤
1、找不到适宜编写方法实现快速进位在数电书本上找到了全加器资料,而且找到了适宜公式。
2、建立文件编写完以后无法申报文件。
应该把文件名与汇编语言中定义名字一样。
组合电路设计
(二)
课题:
用IF语句和CASE语句设计一个4-16译码器
一·试验目及内容
1、熟悉4-16译码器原理
2、熟悉VHDL语言编程逻辑构建。
3、掌握VHDL语言基础结构及使用方法。
二·试验设计思绪
1、使能端为E;当E=1时芯片开始工作.否者输出为1111。
2、当输入端口abcd为:
0000时输出q=1110
0001时输出q=1101
0010时输出q=1011
0011时输出q=0111
0100时输出q=1111
0101时输出q=1111
0110时输出q=1111
0111时输出q=1111
1000时输出q=1111
1001时输出q=1111
1010时输出q=1111
1011时输出q=1111
1100时输出q=1111
1101时输出q=111
1110时输出q=111
1111时输出q=111
高阻或无输出时输出q=xxxxxxxxxxxxxxxx
三、步骤图
Y
N
….
….
四、源程序:
libraryieee;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYlshIS
PORT(a,b,c,d,E:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDlsh;
architecturebehaveoflshis
signalindata:
std_logic_vector(3downto0);
begin
indata<=a&b&c&d;
process(indata,E)
begin
if(E='1')then
caseindatais
when"0000"=>q<="1110";
when"0001"=>q<="1101";
when"0010"=>q<="1011";
when"0011"=>q<="0111";
when"0100"=>q<="1111";
when"0101"=>q<="1111";
when"0110"=>q<="1111";
when"0111"=>q<="1111";
when"1000"=>q<="1111";
when"1001"=>q<="1111";
when"1010"=>q<="1111";
when"1011"=>q<="1111";
when"1100"=>q<="1111";
when"1101"=>q<="1111";
when"1110"=>q<="1111";
when"1111"=>q<="1111";
whenothers=>q<="XXXXXXXXXXXXXXXX";
endcase;
else
q<="1111";
endif;
endprocess;
endbehave;
五、仿真波形
当使能端E=0时,输出全为1
当使能端E=1时,输入0100,输出为q(4)=0,其它为1
一、试验收获
此次试验开始使用条件语句IF和CASE。
IF是假设有某种情况后,进而实施对应程序;当假设条件比较多而且有一定规律时,就应该使用CASE语句进行编程。
第三次试验汇报
时序电路设计
课题:
4位二进制同时加/减法可逆计数器
一·试验目及内容
1.了解4位二进制同时加/减法可逆计数器原理。
2.熟悉VHDL语言基础结构及使用方法。
二·试验设计思绪
输入端口:
clr:
清零端(高电平有效,异步清零)
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。
三、步骤图
四、源程序
libraryieee;
useieee.std_logic_1164.all;
entitylshis
port(clr,clk,load,updown:
instd_logic;
d:
inintegerrange0to15;
count:
outstd_logic;
q:
bufferintegerrange0to15);
endlsh;
architectureoneoflshis
begin
process(clk,clr,d,load,updown)
begin
ifclr='0'thenq<=0;
elsif(clk'eventandclk='1')then
ifload='1'thenq<=d;
elsifupdown='0'thenq<=q+1;
ifq=15thencount<='1';endif;
elseq<=q-1;
ifq=0thencount<='0';endif;
endif;
endif;
endprocess;
endone;
五、仿真波形
使能端clr为0时,输出一直为0
使能端为1,置数load=1时,在脉冲作用下,输出q=输入d
使能端为1,置数load=0时,实现如图所表示计数功效
六、试验中碰到问题及处理步骤
问题:
编写程序时,因为过多使用elsif等语句,造成编写逻辑有点不太清楚,endif语句有时候没有一一对应清楚,在编译时出现错误。
处理方法:
尝试过过取消elsif语句,把全部情况都用if列些出来,即使程序逻辑上不会混乱,不过程序显得比较冗长,为了使程序更精练,我们调整了程序结构,让endif与对应if语句对其,让程序读起来更有逻辑性,条理性。