北邮数电实验报告 1Word下载.docx
《北邮数电实验报告 1Word下载.docx》由会员分享,可在线阅读,更多相关《北邮数电实验报告 1Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
![北邮数电实验报告 1Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/7/9c421493-67a8-481c-86ac-96d3dbe6acd4/9c421493-67a8-481c-86ac-96d3dbe6acd41.gif)
13
(一)实验名称及实验任务要求
实验一
名称:
QuartusII原理图输入法设计与实现
实验任务要求:
EDA基础实验1
(1)、
(2)、(3)必做,选做VHDL实现加法器。
实验二
用VHDL设计与实现组合逻辑电路
四人表决器、8421码转格雷码、数码管译码器(下载测试)。
实验三
用VHDL设计与实现时序逻辑电路
分频器、8421十进制计数器、将分频器/8421十进制计数器/数码管译码器3个电路进行连接并下载。
实验四
用VHDL设计与实现相关电路
数码管动态扫描控制器、点阵扫描控制器。
(2)模块端口说明及连接图
1.1实验三(3)模块端口说明
cp:
时钟信号输入;
rst:
8421十进制计数器异步置位;
c[6...0]:
七段二极管数码管显示;
cat[7...0]:
数码管显示。
1.2实验三(3)连接图
2.1实验四模块端口说明
cp:
8421计数器异步复位;
lgt[6...0]:
2.2实验四连接图
(3)原理图或VHDL代码
1.实验一
(2)原理图
半加器:
全加器:
2.实验三(3)VHDL代码
//分频器部分
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydiv_12is
port
(
cp:
instd_logic;
clk1:
outstd_logic
);
enddiv_12;
architectureaofdiv_12is
signaltmp:
integerrange0to11;
begin
process(cp)
begin
if(cp'
eventandcp='
1'
)then
iftmp=11thentmp<
=0;
elsetmp<
=tmp+1;
endif;
iftmp<
=5thenclk1<
='
0'
;
elseclk1<
endprocess;
enda;
//8421十进制加法器部分
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjisuqi8421is
port
clk2,rst:
q:
outstd_logic_vector(3downto0)
endjisuqi8421;
architectureaofjisuqi8421is
signalq_temp:
std_logic_vector(3downto0);
process(clk2,rst)
begin
if(rst='
q_temp<
="
0000"
elsif(clk2'
eventandclk2='
ifq_temp>
1001"
thenq_temp<
else
=q_temp+1;
endprocess;
q<
=q_temp;
enda;
//译码管部分
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYyimaguanIS
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0);
cat:
outstd_logic_vector(7downto0)
endyimaguan;
ARCHITECTUREseg7_1_archOFyimaguanIS
BEGIN
PROCESS(a)
BEGIN
CASEaIS
WHEN"
=>
b<
1111110"
--0
0001"
0110000"
--1
0010"
1101101"
--2
0011"
1111001"
--3
0100"
0110011"
--4
0101"
1011011"
--5
0110"
1011111"
--6
0111"
1110000"
--7
1000"
1111111"
--8
1111011"
--9
WHENOTHERS=>
0000000"
ENDCASE;
ENDPROCESS;
cat<
11101111"
END;
//整体显示
entitydisplayis
cp,rst:
c:
outstd_logic_vector(6downto0);
enddisplay;
architecturerofdisplayis
componentdiv_12
cp:
instd_logic;
clk1:
outstd_logic
endcomponent;
componentjisuqi8421
clk2,rst:
q:
outstd_logic_vector(3downto0)
componentyimaguan
instd_logic_vector(3downto0);
signalx:
std_logic;
signaly:
std_logic_vector(3downto0);
u1:
div_12portmap(cp=>
cp,clk1=>
x);
u2:
jisuqi8421portmap(clk2=>
x,rst=>
rst,q=>
y);
u3:
yimaguanportmap(a=>
y,b=>
c,cat=>
cat);
endr;
3.实验四VHDL代码
//分频器分频部分
entitydivis
enddiv;
architectureaofdivis
integerrange0to49;
)then
iftmp=49thentmp<
=25thenclk1<
//计数器计数部分
entitycountis
clk,rst:
endcount;
architectureaofcountis
signaltemp:
process(clk,rst)
temp<
elsif(clk'
eventandclk='
iftemp>
thentemp<
=temp+1;
=temp;
//译码管显示部分
entityyimaqiis
led:
outstd_logic_vector(7downto0)
endentity;
architecturertlofyimaqiis
process(a)
caseais
when"
=>
led<
11111110"
when"
11111101"
11111011"
11110111"
11011111"
whenothers=>
11111111"
endcase;
end;
//合成数码管显示
entityshowis
rst:
lgt:
architecturertlofshowis
componentdiv
cp:
endcomponent;
signalx:
componentcount
clk,rst:
q:
signaly:
componentyimaqi
port
a:
u0:
divportmap(cp=>
countportmap(clk=>
yimaqiportmap(a=>
y,cat=>
cat,led=>
lgt);
endrtl;
(4)仿真波形
1.实验一
(2)仿真波形
2.实验三(3)仿真波形
3.实验四仿真波形
(5)仿真波形分析
1.实验一
(2)仿真波形分析
a,b,ci均为输入信号,s,co为输出信号
其逻辑功能为:
s=axorbxorci
co=((axorb)andci)or(aandb)
2.实验三(3)仿真波形分析
rst,cp均为输入信号,c,cat为输出信号。
当rst为1时,输出信号c置零;
当rst为0时,信号c以八为周期,周期性输出,从该波形看出下
载后显示的结果应为第四个数码管连续性显示输出0~8。
3.实验四仿真波形分析
rst,cp均为输入信号,lgt,cat为输出信号。
当rst为1时,输出信号lgt置零;
当rst为0时,信号lgt以六为周期,周期性输出,从该波形可以
看出,下载后现实的结果应为cat[0]~cat[5]六个数码管分别显示
输出0、1、2、3、4、5。
(6)故障及问题分析
1.电路连接问题:
如
为连接错误;
2.管脚名问题:
2.1原理图连接的时候如果没有将管脚名修改的话,也可能报错,
不过个人没有遇到过;
2.2如果不慎将两个管脚的名称写成了一样的,则会有报错Error:
Illegalname"
管脚名"
--pinnamealreadyexists
3.存储问题:
3.1老师说工程得全英文路径,可是个人试了一下发现存储工程
的文件夹名称为中文的运行也能成功,可能是有某些案例显
示中文路径会报错吧;
3.2编写的VHDL代码或原理图文件都应该存储到与工程的同一
路径下,否则将报错Error:
Top-leveldesignentity"
工程名"
is
undefined;
3.3需要引用到新建的工程或元件时该工程应与新建的工程或元
件存储到同一路径下,否则报错Error:
Nodeinstance"
某管脚"
instantiatesundefinedentity"
新建工程名称"
或者显示unknown
3.4如果存储的工程名称与VHDL代码中的工程名称不一致则会
报错Error:
isundefined;
4.VHDL代码问题:
4.1在port的“)”前多加了个“,”,如Error(10500):
VHDLsyntax
erroratcount.vhd(12)neartext"
)"
expectinganidentifier,or
"
constant"
or"
file"
signal"
variable"
;
4.2赋值语句没写“<
”,如Error(10500):
VHDLsyntaxerrorat
div_12.vhd(22)neartext"
expecting"
("
'
"
."
4.3类型使用错误,如Error(10517):
VHDLtypemismatcherrorat
div_12.vhd(24):
std_logic_vectortypedoesnotmatchinteger
literal;
4.4元件与元件之间的连接缺少signal,如Error(10482):
VHDLerror
atshow.vhd(50):
object"
clk"
isusedbutnotdeclared
5.下载
5.1管脚的adress没有填对,比如数码管的a~f七段二极管应分别
对应AA~AF,而经常会犯错将其分别对应AF~AA,这样数码管
也将会显示错误;
5.2填完管脚后没有从新编译,则下载完成后得不到所需结果
(7)总结和结论
通过这几周的数字电路与逻辑设计实验,个人受益匪浅。
首先是养成了一个实验课前预习的好习惯,而刚开始实验的时候没有提前预习,等到老师讲的时候感觉思路跟不上,错过很多要点,并且不能很好的操作QuartusII软件;
接着是对EDA有了初步的了解,知道了通过vhdl里的那短短的代码就能实现数字可编程器件的各种功能。
这几周的实验是以数码管的显示为主的,个人从中也了解到了挺多的,比如计数器的实现,分频器的实现等;
然后是通过这几周的实验,个人对数字电与逻辑设计这门课有了不同以往的兴趣,在未来的日子里也将会更加努力的去学习这门课程;
最后,感谢老师的谆谆教导。