电子线路实训实验报告.docx
- 文档编号:10329740
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:17
- 大小:239.10KB
电子线路实训实验报告.docx
《电子线路实训实验报告.docx》由会员分享,可在线阅读,更多相关《电子线路实训实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
电子线路实训实验报告
电子线路实训(CPLD与电子CAD)报告
电子线路(CPLD与电子CAD《电子线路实训(CPLD与CAD)》是我们电气学院教学计划很重要的实践性教学环节之一。
在学生学完《模拟电子技术》和《数字电子技术》之后,通过这一课程的训练实习环节,更进一步加强和巩固学生所学内容的基本知识,更重要是掌握电子系统线路的设计方法和要求,使学生了解和掌握所学专业工作要求和特点。
对此。
我们主要学习了一下内容:
一.VHDL中的进程.信号.变量
1.VHDL的含义
VHSIC(VeryHighSpeedIntegratedCircuit)
Hardware
Description
Language
2.VHDL的一些主要特点
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力
(2)VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能
(3)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表
(4)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计
(5)VHDL丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟
3.VHDL:
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言格式和描述方法以及语法和一般的计算机高级语言类似。
4.VHDL语言中的进程:
进程(process),进程是最具VHDL特色的语句,是VHDL中执行语句的基本单元,一个VHDL程序的仿真中执行的所有操作都分割为单个或多个进程。
5.VHDL的属性
函数类属性
信号属性函数属于函数类属性,用来返回有关信号行为功能的信息
典型:
’event,它的值为布尔型,如果信号有变化,则其取值为True,否则为False。
利用此属性可以判断时钟是否发生。
时钟边沿表示:
如果定义:
SIGNALclk:
INstd_logic;
则:
clk’eventANDclk=‘1’表示时钟变化了,
且为上升边沿
clk’eventANDclk=‘0’表示时钟的下降沿
<一>.进程
(1)进程:
VHDL中最重要的语句,具有并行和顺序行为的双重性
进程和进程语句之间是并行关系
进程内部是一组连续执行的顺序语句
进程语句与构造体中的其余部分进行信息交流是靠信号完成的
PROCESS为一无限循环语句
进程必须由敏感信号的变化来启动(对于表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句)
(2)基本格式:
进程标号:
PROCESS[(信号敏感表)]IS
〈说明区〉
BEGI
(3)进程语句程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYyl_9_10ISPORT
(a,b,c,d:
INStd_Logic;
sel:
INStd_Logic_Vector(1downto0);
y,z:
OUTStd_Logic);
ENDyl_9_10;
ARCHITECTURElogicOFyl_9_10IS
BEGIN
if_label:
PROCESS(a,b,c,d,sel)
BEGIN
IFsel="00"THENy<=a;
ELSIFsel="01"THENy<=b;
ELSIFsel="10"THENy<=c;
ELSEy<=d;
ENDIF;
ENDPROCESSif_label;
case_label:
PROCESS(a,b,c,d,sel)
BEGIN
CASEselIS
WHEN"00"=>z<=a;
WHEN"01"=>z<=b;
WHEN"10"=>z<=c;
WHEN"11"=>z<=d;
WHENOTHERS=>z<='0';
ENDCASE;
ENDPROCESScase_label;
ENDlogic;
(4)波形仿真
<二>.信号
(1)可代表连线、内连元件或端口。
用“<=”来给信号赋值
(2)信号:
信号是电子电路内部硬件连接的抽象,它可以作为实体中并行语句模块间交流的通道;信号的说明通道常是在ARCHITECTURE.PACKAGE.ENTITY中进行的。
信号定义语句格式与变量的定义非常相似,信号定义也可以设置初始值。
信号说明语句的格式为:
SIGNAL信号名,数据类型;约束条件:
=表达式。
(3)信号实验程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYyl_9_10IS
PORT(a,b,c,d:
INStd_Logic;
g:
OUTStd_Logic);
ENDyl_9_10;
ARCHITECTURElogicOFyl_9_10IS
SIGNALe,f:
Std_Logic;
BEGIN
e<=aorb;
f<=not(cord);
g<=eandf;
<3>.变量
(1)变量:
是指在设计实体中会发生变化的值,同常量一样它可以在很多部分进行说明,并且可以是任何数据类型。
(2)变量的作用:
主要用于对暂时数据进行局部储存,变量是一个局部量,只能在进行语句.过程语句.函数语句的说明区域中加以说明,变量常用在实现某种算法的赋值语句中。
(3)变量的说明格式:
VARIABLE变量名:
数据类型
约束条件:
=表达式
(4)变量赋值语句的格式:
目标变量名:
=表达式
<4>变量和信号的区别
信号与变量都是VHDL语言中的重要对象;但它们之间仍有区别;
信号与变量的区别
信号
变量
赋值符号
<=
:
=
功能
电路的内部连接
内部数据交换
作用范围
全局,进程和进程之间的通信
进程的内部
行为
延迟一定时间后才赋值
立即赋值
二.并行语句.顺序语句.
<一>在VHDL语言中,并行语句主要包括以下几种:
(1)进程语句
(2)并行信号代入语句(3)并行过程调用语句(4)块语句(5)并行断言语句(6)元件例化语句(7)生成语句
句
<二>.并行语句
(1)并行语句:
各种并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。
(2)在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行的(如多时钟情况)。
(3)每一并行语句内部的语句运行方式可以有两种不同的方式,即并行执行方式(如块语句)和顺序执行方式(如进程语句)。
〈一〉在VHDL语言中,顺序描述语句主要包括以下几类:
(1)WAIT语句
(2)变量赋值语句(3)信号代入语句(4)IF语句(5)CASE语句(6)LOOP语句(7)NEXT语句(8)EXIT语句(9)RETURN语句(10)NULL语句(11)过程调用语句(12)REPORT语句(13)断言语句
〈二〉.顺序语句
(1)顺序语句:
每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的
(2)顺序语句只能出现在进程(Process)、函数(Funcation)和过程(Procedure)中
(3)顺序语句包括:
赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句
(4)顺序语句的特点:
每一条顺序语句的执行顺序都是和它们的书写顺序基本一致的。
顺序语句只能出现在进程和子程序中,子程序又包括函数和过程。
(5)顺序赋值语句程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYyl_9_10ISPORT
(en:
instd_logic;
y:
OUTStd_Logic_vector(0to7));
ENDyl_9_10;
ARCHITECTURElogicOFyl_9_10IS
SIGNALs1,s2 :
Std_Logic;
SIGNALt:
Std_Logic_vector(0to7);
BEGIN
PROCESS(s1,s2,en)
Variablev1,v2:
Std_Logic;
Begin
ifen='1'then
V1:
='1'; V2:
='1';
三.循环语句、双向口
1.循环语句程序:
IBLRARYieee;
USEie.std_logic_1164.all;
USEieee.std_logic_unsigned.all;
ENTITYyl_9-10IS
port(shft_lft:
instd_logieec;
d_in:
instd_logic_vector(3downto0);
q_out:
outstd_logic_vector(7downto0));
ENDyl_9_10;
ARCHITECTURElogicOFyl_9_10IS
BEGIN)
PROCESS(d_in,shft_lft
VARIABLEshft_var:
std_logic_vector(7DOWNTO0);
BEGIN
shft_var(7downto4):
="0000";
shft_var(3downto0):
=d_in;
IFshft_lft='1'THEN
FORiIN7DOWNTO4LOOP
shft_var(i):
=shft_var(i-4);
ENDLOOP;
shft_var(3downto0):
="0000";
ELSEshft_var:
=shft_var;
ENDIF;
q_out<=shft_var;
ENDPROCESS;
ENDlogic;
2.双向口语句程序:
LYIBRARieee;
USEieee.std_logic_1164.all;
USEieee.std_logicyl_9_10IS
SIGNALint_count:
std_logic_vectoric_unsigned.all;
ENTITYyl_idcnt_9_10ISPORT(clk,ld,oe:
INstd_logic;
count:
INOUTstd_logic_vector(7DOWNTO0));
ENDyl_idcnt9-10;
ARCHITECTUREarchldcntOFfs_idcnt(7DOWNTO0);
BEGIN
cnt:
PROCESS(clk)
BEGIN
IFrising_edge(clk)THEN
IFld='1'THENint_count<=count;
ELSEint_count<=int_count+1;
ENDIF;
ENDIF;
ENDPROCESScnt;
outen:
PROCESS(oe,int_count)BEGIN
IFoe='1'THENcount<=int_count;
ELSEcount<=(OTHERS=>'Z');
ENDIF;
ENDPROCESSouten;
ENDarchldcnt;
四.数字钟综合设计
1.基本部分:
包括秒、分、时计时器
2.扩展部分:
(1)整点报时
(2)调分调时
(3)定时(比较,多选一)
(4)秒表(分频)
(5)调时、定时扩展、用计数器驱动8个LED灯
60计数器
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_unsigned.all;
entityyl_c60_9_10is
port(clk,clr,en:
instd_logic;
carry:
outstd_logic;
ge,shi:
outstd_logic_vector(3downto0));
endyl_c60_9_10;
architectureoneofyl_c60_9_10is
signalg,s:
std_logic_vector(3downto0);
begin
process(clk,clr,en)
begin
ifclr='1'
then
g<="0000";s<="0000";
elsifclk'eventandclk='1'then
ifen='0'then
ifg="1001"ands="0101"then
g<="0000";s<="0000";carry<='1';
elsifg="1001"then
g<="0000";s<=s+1;
elseg<=g+1;carry<='0';
ge<=g;shi<=s;
endif;
endif;
endif;
--endprocess;
ge<=g;shi<=s;
endprocess;
end;
24进制计数器
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_unsigned.all;
entityyl_c24_9_10is
port(clk,clr,en:
instd_logic;
carry:
outstd_logic;
ge,shi:
outstd_logic_vector(3downto0));
endyl_c24_9_10;
architectureoneofyl_c24_9_10is
signalg,s:
std_logic_vector(3downto0);
begin
process(clk,clr,en)
begin
ifclr='1'
then
g<="0000";s<="0000";
elsifclk'eventandclk='1'then
ifen='0'then
ifg="0011"ands="0010"then
g<="0000";s<="0000";carry<='1';
elsifg="1001"then
g<="0000";s<=s+1;
elseg<=g+1;carry<='0';
ge<=g;shi<=s;
endif;
endif;
endif;
--endprocess;
ge<=g;shi<=s;
endprocess;
end;
3.数字时钟工作原理:
数字时钟主要由秒信号产生模块、计数器、译码器及显示器等组成。
其中,信号产生模块主要由分频器构成,计数器包括六十进制计数器和二十四进制计数器,用于时、分、秒计数。
译码器及显示模块用于时、分、
秒十进制数的显示。
4.图形及仿真波形:
报时器
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_unsigned.all;
Entityyl_baoshi_9_10isport(
clk2,clk3:
instd_logic;
mg:
instd_logic_vector(3downto0);
ms:
instd_logic_vector(3downto0);
fg:
instd_logic_vector(3downto0);
fs:
instd_logic_vector(3downto0);
speaker:
outstd_logic);
endyl_baoshi_9_10;
architectureoneofyl_baoshi_9_10is
begin
speaker<=clk2whenfs=0101andfg=1001andms=0101andmg>=1001else
clk3whenfs=0000andfg=0000andms=0000andmg=0000else
'0';
end;
分频器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyl_c2_9_10is
port(clk:
instd_logic;
carry:
outstd_logic);
endyl_c2_9_10;
architectureoneofyl_c2_9_10is
signalm:
std_logic_vector(3downto0);
begin
process(clk,m)
begin
ifclk'eventandclk='1'then
ifm="0001"then
m<="0000";carry<='1';
else
m<=m+1;carry<='0';
endif;
endif;
endprocess;
五.Protel原理图、PCB图
Protel原理图:
PCB图:
六.学习总结:
通过这学期开设的电子线路(CPLD和CAD)设计这门课程学习,使我有了对电子设计的兴趣。
我们主要学习了关于VHDL语言的编程,了解了VHDL的实体,构造体,信号,变量,进程等一些程序,从而认识到信号与变量之间的不同,还有作用范围的不同。
学习进程语句,顺序语句,循环语句,双向口,计数器,在其中我们学会了怎么编程,明白了VHDL就是另一种类型的C语言,因为没有单片机的C语言基础,我们学习VHDL的编程有一定的难度,通过学习,我们学会了VHDL的基本语言,在以后我们独自做数字时钟的实验,老师给了我们基本的程序,指导我们做数字时钟,通过教给我们二进制的计数器,我们自己改程序改进成为二十四进制,六十进制的计数器,做成了数字时钟的最基本的结构,六十进制的做成分 秒 计数器,二十四进制的做成小时计数器,通过做成的器件连接在一起,做成了基本的时钟,这不仅让我感到了成就感,而且还学会了另一种语言的编程,数字时钟不仅要会计时,还要会调时,报时,在老师的指导下,我们加入了一个OR2器件,这个用来调时,然后我们做了选频器,这个用来在整点时报时,通过仿真我认识到了在编程中忽视的问题,及进位问题,在这次的实验中,通过查阅相关的资料,一步步的建立了对EDA设计的理解,通过解决在编程,调试以及仿真过程中的种种问题,也加深了我对软件设计的熟悉程度。
通过仿真,让我印象深刻的一点是,在编程当中,虽然某些程序的结构获得的效果及软件仿真的效果一致,但在实际硬件实现中却会有很大的不同。
在这一次的课程中,让我收获颇多。
三峡大学电气与新能源学院
一.字数要求
要求2000--3000字之内,每个同学一份
二.章节及内容
1、第一章VHDL中的进程、信号、变量
2、第二章并行语句、顺序语句
3、第三章循环语句、双向口
4、第四章数字钟综合设计
5、第五章Protel原理图、PCB图
三.报告的内容
要反映出以上5个章节的内容,重点说明信号与变量的差别,并行处理的优点、数字钟综合设计,包括电路的工作原理、程序、仿真波形(在能够仿真的情况下)、学习中遇到的问题及解决的方法,完成的效果等。
四.总结
简单谈一下学习本课程的体会
五.要求交打印稿,11月7日下午3:
00—5:
30交到EDA实验室
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子线路 实验 报告