EDA实验总结报告

EDA实验总结报告
EDA实验总结报告

CPLD与电子CAD报告

班号: XXXXXXXXX

序号: XXXXX

学号: XXXXXXX

姓名: XXXXXXX

同组同学姓名: XXXXXXX

三峡大学电气与新能源学院

1

CPLD及电子CAD

?前言 VDHL初步理解和软件常规操作

?第一章 VHDL中的进程、信号与变量

?第二章并行语句、顺序语句

?第三章循环语句、双向口

?第四章数字钟综合设计

?第五章Protel原理图、PCB图

?总结学习CPLD心得和体会

前言 VDHL初步理解和软件常规操作

一,VHDL的历史

1982年,诞生于美国国防部赞助的vhsic项目

1987年底,vhdl被IEEE和美国国防部确认为标准硬件描述语言,即IEEE-1076(简称87版)

1993年,IEEE对VHDL进行了修订,公布了新版本的VHDL,即IEEE标准的1076-1993(1164)版本

1996年,IEEE-1076.3成为VHDL综合标准

二,VHDL软件Max+plusⅡ的常规操纵方法

1)新建文件后,输入项目文件名(File-Project-Name)(此时save as名称如果是程序则需要用vhd结尾保存文件)

2)输入源文件(图形、VHDL、波形输入方式)

(Max+plusⅡ-graphic Editor;Max+plusⅡ-Text Editor;Max+plusⅡ-Waveform Editor)

3)指定CPLD型号,选择器件(Assign-Device)(应选择EP1K 30TC144-1)4)设置管脚、下载方式和逻辑综合的方式

(Assign-Global Project Device Option,Assign-Global Logic Synthesis) 5)保存并检查源文件(File-project-Save & Check)

6)指定管脚(Max+plusⅡ-Floorplan Editor)(具体的管脚应该参考

2

3

CPLD 管脚资源表格)

7)保存和编译源文件(File-project-Save & Compile) 8)生成波形文件(Max+plus Ⅱ-Waveform Editor) 9)仿真(Max+plus Ⅱ-Simulator)

10)下载配置(Max+plus Ⅱ-Programmer)

第一章 VHDL 中的进程、信号与变量

1.VHDL 中编程单元以及用法:

1.Entity(实体):像一个黑盒子一样,用来说明模型外部的输入输出特征

2.Architecture (构造体):用来定义模型的内容和功能,每一个构造体必须有一个实体与它相对应,所以两者一般成对出现;

3.Generic(类属参量):规定端口的大小、实体中子元件的数目等;

4.Ports (端口):是实体的一部分,主要用于信号的传输;常见的端口类型有IN (数据只能进实体),OUT (数据只能流出实体),INOUT (即可流进又可流出),BUFFER (数据流进实体同时可被反馈);

5.数据类型:BIT(位类型,只取‘0’或‘1’);BIT_VECTOR (位矢量类型,包含一组位类型);BOOLEAN (布尔类型,其值可为‘TEUE ’或‘FALSE ’);INTEGER (整型);Natural (自然数类型);Positive (正整数类型);REAL (浮点数类型);

6.Std_Logic 数据类型:IEEE1164中定义的一种数据类型,包含9种取值 (U,X,0,1,Z,W,L,H,_)。电路中有三态逻辑必须用std_logic 和std_logic_vector ;

7.构造体:描述实体的内部结构和逻辑功能,和实体相联系,一个实体可以 有多个构造体,构造体的运行时并发的;

2.进程语句意义和用法:

进程语句是VHDL 中最重要的语句,具有并行和顺序行为的双重性,其特点主要有:

1.进程和进程语句之间是并行的关系;

2.进程内部是一组连续执行的顺序语句;

3.进程语句与结构体中的其余部分进行信息交流是靠信号来完成的;

4.一个构造体可以有多个进程语句;

5.进程的基本格式:

【进程标号:】PROCESS[(信号敏感表)]IS <说明区> BEGIN

<顺序语句>

END PROCESS[进程标号]; 6.进程举例

4

library ieee;

use ieee.std_logic_1164.all; entity if_case_55_56 is port

(a,b,c,d: in std_logic;

sel : in std_logic_vector (1 downto 0); y,z:out std_logic);

end if_case_55_56;

architecture logic of if_case_55_56 is begin

if_label:process(a,b,c,d,sel) begin

if sel="00" then y<=a; elsif sel="01" then y<=b; elsif sel="10" then y<=c; else y<=d; end if;

end process if_label; case_label:

process(a,b,c,d,sel) begin

case sel is

when "00" =>z<=a; when "01" =>z<=b; when "10" =>z<=c; when "11" =>z<=d; when others =>z<='0';

end case;

end process case_label; end logic;

7.其仿真波形为

3.信号的用途以及和变量的区别:

※信号是描述硬件系统的基本数据对象,它的性质类似于连接线。它可以代表连线、内连元件、或端口。

※用“<=”来给信号赋值。

※信号可以作为实体中进程模块之间的信息交流媒介,信号存在于进程外。※信号定义的语句格式与变量相似,信号定义也可以设置初始值。

※在进程中只能将信号列入敏感表,而不能将变量列入敏感表。

※信号的定义格式:

SIGNAL 信号名:数据类型:=初始值;

※信号的赋值语句表达式:

目标信号名 <= 表达式;/*这里的表达式可以是一个运算表达式,也可以是数据对象(变量、信号或常量)*/

4.变量的定义及特点:

1.变量是一个局部量,只能在进程和子程序中使用。

2.必须在进程和子进程的说明性区域说明。

3.不能表达连线和存储元件。变量的主要作用是在进程中作为临时的数据存

储单元。

4.定义变量的一般表述:

WARIABLE 变量名:数据类型 := 初始值;

5.变量赋值的一般表述为:

目标变量名 := 表达式;

因此,变量赋值符号是“:=”,变量数值的改变是通过变量赋值来实现的。赋值语句右方的“表达式”必须是一个与“目标变量名”具有相同数据类型的数据,这个表达式可以是一个运算表达式,也可以是一个数值。

5.信号与变量的区别(如下表):

6.举例说明

5

6

程序功能:以上是一个信号的例子,a 和b 相或得e ,c 和d 相或得f ,然后e 和f 相与得到输出g 。其中e 和f 是在构造体内部声明的内部连接信号。

第二章 并行语句、顺序语句

1.并行语句意义和用法

1.在VHDL 中,并行语句有多种语句格式,包括:并行信号赋值语句、进程语句、块语句、条件信号赋值语句、元件例化语句,生成语句,并行过程调用语句。

2.并行信号赋值语句:它包括简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。

3.并行语句的优点:并行语句是硬件描述语言与一般软件程序的最大区别所在,所以并行语句在结构体中的执行都是同时进行的,即他们的执行顺序与语句的书写的先后顺序无关。

4.并行语句有with_select_then,when_else,if_then_else 和case_when 四种。

例如: With s select x<=a when “00”,

b when “01”,

c when “10”,

d when others; 这是with_select_then 语句,该语句的作用是当s 分别为“00”“01”“10”时,对应把a,b,c 赋值给x ,否则把d 赋值给x 。

2.顺序语句

1.每一条语句的执行顺序与其书写顺序一致。

2.顺序语句只能出现在进程、函数和过程中。

3.顺序语句包括:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句。

7

3.程序调试步骤:①选择File-new,然后选择Waveform Editor File ,再从下拉列表中选择.扩展名,并按ok ,即可创建一个新的无标题的文件,保存并修改名称。② 选择File -END TIME ,在出现的对话框中输入1s ,按ok ,则设置了结束时间;③选择Options-Gird size ,输入30ns ,按ok ;④选择node-Enter nodes from SNF 菜单项⑤选中type 框中input 和output 项,选择List ,选择=>按钮,按ok 根据需要编辑波形。 程序截图和仿真波形截图:

4.程序工作原理:程序中进程里的是顺序语句,既有信号又有变量,由于赋值无延迟,而变量赋值有延迟,因此当En 为1时,最终的输出y (n )为11100010

输出y(n)为11100010.

3、第三章 循环语句、双向口

1.循环语句

1.循环语句的基本格式为: [LOOP 标号:]

8

[重复模式]LOOP 顺序语句;

END LOOP [LOOP 标号] 2.举例说明:

for i in 7 downto 4 loop

shift_var(i):= shift_var(i-4); end loop;

该语句的作用是当i=4,5,6,7时,执行顺序语句shift_var(i):= shift_var(i-4)。

2.双向口

1.双向口申明的格式为:

[双向口标号]:INOUT [数据类型];

2.双向口既可以作为输入也可以作为输出。双向端口在完成输入功能时,必须使原来成输出模式的端口成高阻态,否则,待输入的外部数据势必会与端口处原有电平发生“线与”,导致无法将外部数据正确的读入,从而实现“双向”的功能。

3.波形仿真过程为:

MAX+plus II → Waveform Editor → (Options → Grid Size → 50ms ) → Node → Enter Nodes from SNF → List → 给定输入信号高低电平 → XC 选中所有输入信号,点击右键 → Enter Group ,可以创建组。

4.双向口举例程序:

ENTITY ldcnt _55_56 IS PORT ( clk, ld, oe: IN std_logic; count: INOUT std_logic_vector(7 DOWNTO 0)); END ldcnt _55_56;

ARCHITECTURE archldcnt OF ldcnt _55_56 IS

SIGNAL int_count: std_logic_vector(7 DOWNTO 0); BEGIN

cnt: PROCESS (clk) BEGIN

IF rising_edge(clk) THEN

IF ld='1' THEN int_count <= count; ELSE int_count <= int_count + 1; END IF; END IF;

END PROCESS cnt ;

outen: PROCESS (oe, int_count) BEGIN

IF oe = '1' THEN count <= int_count ;

9

ELSE count <= (OTHERS => 'Z') ; END IF ; END PROCESS outen;

END archldcnt; 双向口仿真波形如下图:

4、第四章 数字钟综合设计

一、实验目的:

1.掌握多位计数器相连的设计方法;

2.掌握十进制,六进制,二十四进制计数器的设计方法;

3.掌握扬声器的驱动;

4.掌握EPLD 技术的层次化设计方法。

5.能将数字钟的各个单元电路组合成整机电路。

6.会装配和调试数字钟电路。

7.会制作分频电路。

二、实验原理

1.这里用到了,六十、二十四、一百进制的计数器,分频器等。

2.在同一EPLD 芯片EP1K30TC144-1 上集成了如下电路模块: ★时钟计数: 秒,分,秒——60 进制BCD 码计数 微秒——100 进制BCD 码计数 ★同时计数器有清零、调分、调时功能。 在整数时间能提供报时信号。

★扬声器在整点时有报时驱动信号产生。

★此设计任务分成若干模块,规定每一块的功能和各模块之间的接口。先分做

10

和调试其中之一,然后再将各模块联合起来联试。

★对于不同目录下的同一设计,模块说明如下:各种进制的计数及时钟控制模块;扫描分时显示,译码模块;扬声键编码模块;微秒功能;闹钟功能;

3.由程序生成元件的过程:MAX+plus II → Graphic Editor → 点击右键 → Enter Symbol → 选择要生成元件的程序。

5.六十进制计数器用作秒和分,一百进制用作微秒,程序和波形如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; entity jsq_55_56 is

port(clk,clr,en: in std_logic;

carry : out std_logic;

ge,shi : out std_logic_vector(3 downto 0));

end jsq_55_56;

architecture one of jsq_55_56 is

signal s,g :std_logic_vector(3 downto 0); begin

process(clk,clr,en,s,g) begin

if clr='1' then

s<="0000";g<="0000";

elsif clk'event and clk='1' then if en='0' then

if s=5 and g="1001" then

s<="0000";g<="0000"; carry<='1';

elsif g="1001" then -- and s<6 then s<=s+1;g<="0000"; else

g<=g+1;carry<='0';

end if; end if; end if;

end process; ge<=g;

shi<=s; end; 六十进制仿真波形截图:

11

6.二十四进制程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; entity jsq24_55_56 IS

port(clk,clr,en: in std_logic;

carry : out std_logic;

ge,shi : out std_logic_vector(3 downto 0));

end jsq24_55_56;

architecture one of jsq24_55_56 is

signal s,g :std_logic_vector(3 downto 0); begin

process(clk,clr,en,s,g) begin

if clr='1' then

s<="0000";g<="0000";

elsif clk'event and clk='1' then if en='0' then

if s=2 and g="0011" then s<="0000";g<="0000"; carry<='1';

12

elsif g="1001" then -- and s<2 then s<=s+1;g<="0000";

else

g<=g+1;carry<='0';

end if;

end process; ge<=g;shi<=s; end;

一百进制计数器这里就不做介绍了,跟60进制没有什么区别,只是上限值的改变。

13

7.选择器,比较器,报时器程序:

8.分频器程序和仿真波形(10分频程序和波形,30000分频程序)

14

8.数字钟综合结果截图(不是老师验收的图,是我自己加闹钟过后的图):

15

9.实验完成的效果:一.可清零;二.微秒为00-99一百进制计数器,秒分为00-59六十进制计数器,时为00-23二是进制计数器;三.可手动校正分时,1键清零,2键暂停,3键调分,4键调时,5键闹钟调分,6键闹钟调时,7键转换闹钟状态;四.计时过程具有报时功能,当时间达到整点时报时,当达到整分时报时。

第五章 Protel 原理图、PCB 图

一、实验目的:

a) 初步掌握PROTE199 软件的使用;

b) 了解由555 组成多谐振荡器,555 组成单稳态触发器。

二、实验步骤:

1.设计电路原理图,包括装入元器件库,放置及调整元器件位置,编辑元器件属性,绘制原理图;

2.电路图的后期处理,包括检查电路原理图,电路原理图的修饰;

3.设计印制电路板;

4.生成各种电路原理图报表文件,主要是生成网络表文件。

打开软件protel99,建立一个新的文件,将所用到的文件引入左侧区中。在

16

工作区内将由555组成的多谐振荡器的电路图。

四、protel 搭线截图:

四、自动布线效果:

17

实验最终结果:和生成网格表的比较结果符合!(虽然刚开始对比数据位5.0.0.0.5.5,最后发现是接线有一点小错误,改正过后就是正确的了)

总结学习CPLD心得和体会

这个学期我们学习使用MAX+PLUSⅡ软件来进行CPLD 设计,虽然经过8周课程的学习让我学会了一种新的程序语言——VHDL,让我们知道了程序的编写以及运用,让我们了解软件与硬件的结合,以及通过MAX+PLUSⅡ软件编程控制实验硬件的方法。

在学习的过程中,刚开始接触这门课程感觉很是棘手,因为许多以前知识的遗忘再加上编程软件为英文软件,对于软件操作不是很熟悉,很多时候一个小的问题或者一个操作步骤错误就会导致程序编译不出来,软件操作通过课后的几次练习之后才彻底解决,对于编程的问题,在老师辅助之下和自己思考之后也得到解决,之后随着对软件和编程的熟悉,渐渐的自己也可以调试自己在操作和编程的错误了,随着对VHDL语言的深入了解,加之以前学习过计算机C语言以及51单片机的编程语言,逐渐也对编程语言有了更深的理解。

这次EDA实践让我了解了现代数字电路系统设计相对于传统电子系统设计

的模式的优势,采用模块法自顶向下设计的原则,一边设计一边调试,结构清晰,并且使系统的开发速度更快。对于VHDL 语言,它与以前学习的计算机C语言和51单片机的编程语言有一定的相似性,也有不同,有很多细节方面的东西需要我们注意,课后多熟悉、练习,不然就会有编译错误,影响编译效率。

数字钟的综合设计让我们真正有了一次EDA 设计的经历,也极大的提升的我对CPLD的兴趣,毕竟数字钟的设计是一次自己全新的设计过程,从器件到最后的完成作品,都是由自己来制作,也可以在作品中加入自己的思想,开始由于对设计没有什么概念,所以开始感觉很困难,在老师的带领下我们一步步制作,直到作品初步成型,我才真正理解了这次综合设计,最后我在几次上课以及几次蹭课的过程中,初步完成了自己一项对于数字钟的设计,虽然最后验收是重新根据老师的要求制作的,自己的作品由于还没有完全做好所以没有验收,不过心中油然的感到欣慰;在课堂上虽然学习的时间不是很足,但是还是可以学到很多东西,在课下的时间操作也补足了很多知识。

最后一次课上,简单学习了PROTEL 这个软件和PCB 板的设计。

感谢老师们的精心教导,通过CPLD的学习,我有很大的收获!

18

相关主题
相关文档
最新文档