第一篇:eda技术教案
EDA技术教案 第一次课 内容:
介绍EDA技术的涵义、发展历程和应用领域; 介绍EDA技术的主要内容; 介绍EDA的工程设计流程; 说明本课程的特点与学习方法。教学目的:
通过介绍EDA技术的涵义、发展历程和应用领域,使学生了解本课程的实际应用很大,调动学生学习这门课程的积极性
通过介绍EDA技术的主要内容,使学生了解这门课程要学习什么。在此基础上说明本课程的特点与学习方法。
说明各种通信系统的组成,了解它们的优缺点,出现背景。重点说明数字通信系统的特定和优点。
介绍EDA的工程设计流程,说明当前EDA设计的特点,用软件方式设计硬件,用软件方式设计的系统到硬件系统的转换是由有关开发软件自动完成的,因此类似软件编程,不需太多的低层硬件知识,使学生克服畏难情绪。教学重点、难点:
EDA技术的三个发展阶段以及各阶段的特点; EDA的定义和EDA技术的主要内容; EDA的工程设计流程。教学方法:
比较、举例、图解。教学过程:
(一)自我介绍,说明课时安排、成绩评定方法、课程定位、教学网站的进入。
(二)讲授新课
课堂教学实施过程共分六步。介绍EDA技术的涵义。
说明EDA技术的发展背景,说明EDA技术的三个发展阶段,比较三个阶段的各解决了什么问题,在此基础上理解各阶段的特点。
在第二步理解EDA技术进行电子系统设计的特点的基础上引出并详细说明EDA的定义,加深对EDA技术的涵义的理解。
在第三步详细说明EDA的定义的基础上,引出EDA技术的4个主要内容:硬件描述语言:设计的主要表达手段;大规模可编程逻辑器件:设计的载体;软件开发工具:设计的工具;实验开发系统:下载工具及硬件验证工具。再分别介绍EDA技术的4个主要内容:了解常用的硬件描述语言VHDL和Verilog;了解两种常用的大规模可编程逻辑器件FPGA和CPLD以及它们各自的特点;了解主流EDA工具软件;了解本课程使用的西安唐都公司的TD-EAD实验系统
说明课程要求:通过学习这门课程要掌握运用EDA开发工具设计开发电子系统,引出这门课程的特点:实践性强,说明我们的学习方法:抓住一个重点:VHDL的编程;掌握两个工具: Quartus II 和 TD-EAD实验系统;运用三种手段:通过案例分析、应用设计和上机实践,实现理论与实践相结合,边学边用,边用边学。用设计一个简单电子系统为例,引出EDA的工程设计流程。说明当前EDA技术发展的特点:用软件方式设计硬件;用软件方式设计的系统到硬件系统的转换是由有关开发软件自动完成的;设计过程中可用有关软件进行各种仿真;系统可现场编程,在线升级;整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。现代EDA设计类似软件编程,不需太多的低层硬件知识,使学生克服畏难情绪。同时这里又回顾复习了使用EDA技术进行电子系统设计的特点。最后图解说明EDA的工程设计流程。第二次课
内容:安装 Quartus Ⅱ,VHDL 与 Quartus Ⅱ初体验 教学目的:
理解VHDL语言的特点。
了解主流EDA工具Quartus Ⅱ,掌握其安装方法。掌握使用 Quartus Ⅱ进行FPGA设计的基本流程。
教学重点、难点:使用Quartus Ⅱ进行FPGA设计的基本流程。教学方法: 举例、演示。教学过程:
课堂教学实施过程共分两步。
回顾上节课所讲的EDA的主要内容。在此基础上引出VHDL语言的特点,并介绍主流EDA开发工具Quartus Ⅱ,说明它的不同版本的特点。重点介绍PC破解版的安装步骤。演示安装过程,在演示是重点提醒学生注意容易出错的几个地方。
回顾上节课所讲的当前EDA技术发展的特点,EDA的工程设计流程。在此基础上说明使用 Quartus Ⅱ进行FPGA设计的基本流程,并通过实际演示设计一个简单的电子系统:与非门,说明使用 Quartus Ⅱ和VHDL开发电子系统的基本流程。在演示过程中重点提醒学生注意容易出错的几个地方,并给出一些初学者的小窍门。第三次课
内容:VHDL 程序基本结构,VHDL 基本数据类型,VHDL 数据对象 教学目的:
掌握VHDL语言程序的基本结构,特别是实体和结构体。
掌握VHDL语言的语言要素,包括VHDL语言的基本数据类型、数据对象和VHDL 运算符,理解信号和变量的区别。
教学重点、难点:VHDL语言程序的基本结构,VHDL语言的语言要素。教学方法:举例、演示、归纳、比较。教学过程:
课堂教学实施过程共分三步。1)VHDL 程序基本结构
回顾上节课设计与非门的例子,引出设计与非门的设计思想:先确定系统功能和接口,再进行内部电路设计,由此引出VHDL程序的基本结构:实体:对应系统接口,结构体:对应系统内部电路。从与非门的VHDL程序中可以直观的看到它的三部分:库、程序包的调用,实体声明,结构体定义。
以与非门的VHDL程序为例说明库、程序包的调用的作用。说明调用语法,介绍常用的三个库、程序包。
以与非门的VHDL程序为例说明实体声明的语法,各项的意义。提醒学生注意初学者容易出错的地方,如:实体名必须与文件名相同,否则编译会出错;最后一条端口声明语句不可加分号等。并通过演示出错情况,加深学生的印象。最后通过图解归纳实体声明的格式,容易出错的地方,并对初学者进行相应的建议:使用范例,在Edit—> Insert Template 中选择范例。Quartus 进行编译时,要求关联文件文件名相同,建议采用 Quartus 默认文件名,不要自己更改文件名。
以与非门的VHDL程序为例说明结构体的语法,各项的意义。提醒学生注意初学者容易出错的地方。并通过演示出错情况,加深学生的印象。最后通过图解归纳结构体的格式,应注意的地方。
2)VHDL 基本数据类型
回到与非门的VHDL程序的实体声明部分,引出VHDL的数据类型。介绍各种数据类型,重点介绍最常用的标准逻辑位、标准逻辑位矢量。提醒学生注意使用标准逻辑位矢量时必须注明数组中元素个数和排列方向,并举例说明。最后比较VHDL和C语言中使用数据类型的异同点:VHDL同 C 语言一样,必须先声明端口和信号,然后才能使用,在声明中必须定义它们的数据类型;与 C 语言不同,VHDL是强类型语言,只有相同数据类型的端口、信号和操作数才能相互作用。3)VHDL 数据对象
介绍VHDL的数据对象:信号、变量和常量。以与非门的VHDL程序为例,通过图解比较说明信号和端口的异同点。说信号声明的格式和信号赋值语句的格式。重点说明矢量赋值,通过举例说明在矢量赋值要特别注意两矢量之间的元素对应关系。
说明定义变量的语法格式、变量赋值的语法格式。比较信号和变量的区别。最后介绍定义常量的语法格式。第四次课
内容:VHDL 运算符、VHDL 并行信号赋值语句。
教学目的:
掌握VHDL 运算符。
掌握VHDL语言的并行信号赋值语句,特别是选择信号赋值语句和条件信号赋值语句,理解条件信号赋值语句的各赋值子句的优先级差别。教学重点、难点:并置运算符“&”、选择信号赋值语句、条件信号赋值语句。教学方法:举例、演示、图解。教学过程:
课堂教学实施过程共分四步。
分别介绍VHDL的四种运算符:算术运算符、并置运算符、关系运算符、逻辑运算符。对算术运算符重点说明能支持的数据类型和不能支持的数据类型。并置运算符是本课程的一个难点,通过一个电路设计,举例说明并置运算符的应用。关系运算符重点说明能支持的数据类型。提醒学生注意:“<=”在条件语句中出现为小于等于,其它情况为信号赋值。逻辑运算符重点说明其优先级关系。
并行语句是硬件描述语言区别于一般软件程序语言的最显著的特点之一。通过图解说明常用并行语句特点,从图中直观的看到:并行语句之间是并行执行,但并行语句内部的执行可以是顺序的(进程语句),也可以是并行的(块语句)。
介绍并行信号赋值语句:简单信号赋值语句、选择信号赋值语句、条件信号赋值语句。给出选择信号赋值语句格式,并通过设计3-8 线译码器,说明如何使用选择信号赋值语句。提醒学生注意容易出错的几点:“选择值”一定要覆盖所有可能情况,若不可能一一指定,则要借助 others为其它情况找个“出口”。因此强烈建议初学者使用 with „ select 语句时,最后都带上 when „
others。“选择值”必须互斥,不能出现条件重复或重叠的情况。给元素赋常数值,用单引号;给矢量赋常数值,用双引号。通过演示出错情况,加深学生的印象。
给出条件信号赋值语句格式,并通过设计8-3 线优先编码器,说明如何使用条件信号赋值语句。提醒学生注意容易:在执行 When „
Else 语句时,赋值条件按书写的先后顺序逐项测试,一旦发现某一赋值条件得到满足,即将相应表达式的值赋给目标信号,并不再测试下面的赋值条件。即各赋值子句有优先级的差别,按书写的先后顺序从高到低排列。通过观察仿真结果,直观的看到赋值优先级,加深学生的印象。第五次课
内容:进程语句、VHDL语言的顺序语句。教学目的:
掌握进程语句,掌握进程的工作原理和特点,理解进程与时钟的关系。
掌握VHDL语言的顺序语句,特别是IF 语句和CASE语句,理解IF、CASE语句和选择信号赋值语句、条件信号赋值语句的区别。
教学重点、难点:进程的工作原理和特点,进程与时钟的关系。IF 语句和CASE语句,IF 语句和CASE语句的嵌套。
教学方法:图解、举例、总结。教学过程:
课堂教学实施过程共分四步。
介绍进程语句的特点、格式,说明各项意义。图解说明进程工作原理,通过该图直观的理解进程的特点:进程本身是并行语句,单其内部是顺序语句;进程只有在特定的时刻(敏感信号发生变化)才会被激活。在此基础上说明进程与时钟的关系。通过图解说明时钟上升沿驱动进程语句,使学生较好的理解了进程的时钟和进程是一种隐形的循环。给出时钟沿的VHDL描述,通过几个寄存器的设计,说明如何使用进程语句,通过观察波形仿真图,加深学生对进程与时钟的关系的理解。最后总结进程的要点和容易出错的几个地方。介绍顺序语句,提醒学生注意进程在激活的一瞬间就执行完进程中所有语句。重点介绍IF 语句和CASE 语句。给出IF 语句的三种格式,说明它们的特点。在此基础上总结使用 IF 语句注意的要点。最后通过设计串行输入并行输出的移位寄存器和并行输入串行输出的移位寄存器,加深学生对IF语句、IF语句嵌套的理解。
给出CASE 语句的格式,说明CASE 语句使用要点。最后通过设计带使能端的 2-4 译码器,加深学生对IF语句、IF语句嵌套的理解。介绍LOOP语句和空语句。第六次课
内容:层次化设计概念、在Quartus II 中实现层次化设计 教学目的:
理解层次化设计的优点。
理解层次化设计的核心思想:模块化、元件重用。
掌握在 Quartus II 中采用图形法与文本法结合的混合输入方法实现元件重用和系统的层次化设计。
教学重点、难点:在Quartus II 中实现层次化设计。教学方法:图解、举例、演示。教学过程:
课堂教学实施过程共分三步。
说明层次化设计的优点。图解说明层次化设计的核心思想:模块化、元件重用。加深对层次化设计的优点的理解。
图解说明在 Quartus II 中实现系统层次化设计的主要步骤:首先按自顶向下的设计方法,设计系统,划分和定义系统子模块,形成系统层次化设计图。其次用 VHDL 语言设计底层子模块,并生成相应的元件符号。最后调用下层元件,完成上层模块的设计,并生成相应的元件符号。这样从底层元件开始,自底向上完成系统的设计。
通过实际演示时钟选择器的设计过程,说明如何在Quartus II 中实现系统层次化设计,主要包括模块划分、元件设计文件的建立、元件符号的生成、元件调用、LPM宏模块的调用与参数配置、顶层电路原理图的建立。第七次课
内容:系统层次化设计进阶
教学目的:理解元件例化、程序包和类属映射。教学重点、难点:略 教学方法:图解、举例。教学过程:
课堂教学实施过程共分四步。
回顾上节课的内容:在Quartus II 中实现层次化设计,并引出新问题:如何用 VHDL 语言而不是元件符号来调用已设计的元件,实现系统层次化设计。由此引出元件例化、程序包和类属映射这几个层次化设计中最重要的VHDL语句。
说明什么是元件例化:将以前设计的实体当作本设计的一个元件(元件定义),然后再调用这个元件,即用VHDL语言将各元件之间的连接关系描述出来(元件映射)。介绍元件例化中的元件定义和元件映射的语法格式,说明各项意义。通过一个例子引用2分频电路,来说明如何使用元件例化。
通过图解说明元件例化语句的缺点:如果在一个实体中用到多个元件,那么在其结构体中要用大量篇幅定义元件。元件定义在结构体中,只有这个实体能调用该元件,如果有多个实体用到同一个元件,那么在这多个实体中都要对该元件进行定义。通过对该问题的解决,引出程序包:将数据类型、元件定义、子程序等收集到一个VHDL程序包中,只要在设计实体中用USE语句调用该程序包,就可以使用这些预定义的数据类型、元件定义、子程序。说明程序包的语法格式,通过举例说明如何在程序包中进行元件定义以及如何应用程序包。提醒学生注意容易出错的地方:程序包设计文件应保存为同名的VHDL文件并编译。只有编译过的程序包才能被其它设计实体调用。
通过一个常见的实际问题:设计一个带参数的电子系统,使其应用范围更广,引出类属映射语句。通过设计带参数的分频器,说明如何用 VHDL 语言设计和调用带参数的元件。第八次课
内容:Moore 状态机的 VHDL 描述、Mealy 状态机的 VHDL 描述。
教学目的:理解什么是Moore 状态机和Mealy 状态机,掌握Moore 状态机和Mealy 状态机的 VHDL 描述。
教学重点、难点:Moore 状态机和Mealy 状态机的 VHDL 描述。教学方法:图解、举例、类比。教学过程:
课堂教学实施过程共分三步。说明组合逻辑和时序逻辑的区别。用老式按钮风扇类比组合逻辑,空调遥控器类比时序逻辑,形象的说明了组合电路的输出只与当前输入有关。时序逻辑电路的输出不仅与当前输入有关,还与过去的一系列输入有关。由此引出状态机:输出由当前状态和当前输入决定,是一种广义的时序电路。状态机分Moore与Mealy型。说明这两种状态机的特点:Moore型输出仅取决于其所处状态,Mealy型输出不仅与当前状态有关,也与当前输入有关,更常见。举例说明Moore 型状态机,并画出其状态转移图,通过状态转移图加强Moore型输出仅取决于其所处状态的理解。举例说明Mealy型状态机,并画出其状态转移图,通过状态转移图说明Mealy型输出不仅与当前状态有关,也与当前输入有关的特点。
以Moore状态机的状态转换图说明如何用VHDL来描述Moore状态机,分为两个进程:确定状态转移的进程 Chang_State,决定输出值的进程 Output_Process。状态转移进程:Moore 状态机状态转移与输出 Dout 无关。当S0状态输入0时,仍然还在S0状态,没有进行状态转移,因此也与这种自环与状态转移无关。状态转移进程由去掉输出和自环后的状态转移图决定。根据化简后的状态图写出状态转移进程。CASE语句嵌套IF语句,CASE语句表示当前状态,IF语句表示在当前状态下,根据当前输入决定状态转移。提醒学生注意:一定要有状态机开始工作的条件,否则状态机永远不会工作。输出进程:在Moore状态机中输出只与当前状态相关,用一个CASE语句完成。
在上一步的基础上,对比Moore状态机的VHDL实现,说明Mealy状态机的实现,仍分为两个进程:确定状态转移的进程Chang_State,决定输出值的进程 Output_Process。由于Mealy状态机与Moore状态机的区别只在输出 Dout 同时与当前状态 Si 和当前输入有关。因此Chang_State进程的实现与Moore机相同。输出由当前状态和当前输入共同决定,因此输出进程 Output_Process也是CASE嵌套IF的格式,与状态转移进程类似。第九次课
内容:用状态机实现交通灯控制器
教学目的:掌握使用状态机实现数字系统设计的方法。教学重点、难点:在 Quartus II 中状态机的实现方法。教学方法:图解、举例、演示。教学过程:
课堂教学实施过程共分四步。
说明任务与要求,进行系统分析设计,在此基础上画出系统框图,确定元件模块和元件接口与连接。回顾在Quartus II 中实现层次化设计过程,用VHDL语言实现底层模块:计数器和控制器的设计。
重点介绍如何用状态机设计控制器,确定状态和状态转移条件,画出状态转移图,发现这是个Moore状态机。回顾Moore状态机的VHDL实现,完成对控制器的设计。完成计数器和控制器的设计后,生成相应的计数器和控制器元件符号。按系统框图建立顶层电路图,编译工程。第十次课
教学内容:Protel2004项目文件的管理和编辑
(一)教学目标:
1、学会在Protel2004软件中创建相应的各种文件
2、学会在Protel2004文件中创建相应的项目
3、学会在Protel2004文件中创建相应的设计工作区 教学重点:
对Protel2004软件中各种层级,各种种类繁多的文件的识别和创建 教学方法:演示操作法 课时安排:1课时 教学过程:
一、Protel2004包含了三级文件管理模式,分别是设计工作区,项目和文件,级别依次从高到低。而文件有分为好多种类有原理图文件,PCB封装文件,库文件,脚本文件,混合信号仿真文件,又如项目文件中有包含不同项目对应得不同文件。我们只是建立几个常用的文件
二、在Protel2004工作环境中创建原理图文件
1、打开文件/创建/原理图,创建一个原理图文件,并保存。注意器保存位置和保存的文件名称,类型扩展名。
2、打开文件/创建/PCB文件,创建一个PCB文件,并保存。注意器保存位置和保存的文件名称,类型扩展名。
三、在Protel2004工作环境中创建项目文件
打开文件/创建/项目/PCB项目,创建一个PCB项目文件,并保存。注意器保存位置和保存的文件名称,类型扩展名。
四、在Protel2004工作环境中创建项目文件
打开文件/创建/设计工作区,创建一个设计工作区文件,并保存。注意器保存的方法、位置和保存的文件名称,类型扩展名。
以上在保存文件的,项目级工作区的时候有几种不同的方法:
1、在相应的文件上点击右键保存,或另存为
2、在菜单栏中文件中找出相应命令执行保存操作
五、打开工作面板projects.查看他们的结构关系。教学反思于总结:
在演示教学的同时要注意教学的节奏,应反复演示,是学生能看清楚每一个操作步骤。要求学生对于常用的文件类型的扩展名,图形符号有所了解。第十一次课
教学内容:原理图的设计基础 教学目标:
1、掌握原理图的一般设计步骤
2、熟悉Protel2004原理图设计工具栏
3、熟练操作原理图的图样的放大于缩小 教学难点:
掌握原理图图样的放大于缩小的操作方法,牢记器快捷键操作。教学方法:讲授法和演示操作法 课时安排:1课时 教学过程:
一、原理图的一般设计步骤(讲授法)原理图的设计流程如下:
1、启动Protel2004原理图编辑器
新建一个原理图文件或打开一个原理图文件,都可以启动原理图编辑器,进入原理图设计工作。
这里我们打开Protel2004自带示例中的一个原理图文件。
2、设置原理图图样的大小及版面
3、在图样上放置元器件
4、对所放置元器件进行布局、布线
5、对布局、布线后的元器件进行调整
二、Protel2004 原理图设计工具栏
这里我们打开Protel2004自带示例中的一个原理图文件。
Protel2004为设计者提供了方便快捷的原理图绘制工具,分类放置在不同的工具栏中。这些工具栏,可以通过执行选单命令“视图/工具栏”的下拉菜单进行打开和关闭。
三、图样的放大于缩小:
1、在视图菜单中有一系列的图样于缩小命令,分别执行这些命令,观察图样的变化,并记忆理解这些命令的含义和作用。熟练掌握这些命令的快捷键执行方式。
2、利用键盘实现图样的放大于缩小。教学反思于总结:
关于原理图设计的一般步骤,学生只要有个大致的了解就可以了,这个过程会在以后的操作中逐渐的熟练起来。儿本节课中第三部分是重点难点。需要学生对于各个命令逐条的反复的操作,观察器变化,这个操作过程是枯燥的,应该尽可能的提高这节课的趣味性。让学生更积极的投入进去。第十二讲
教学内容:连接线路
(一)教学目标:
1、能够熟练的连接导线
2、学会放置线路节点
3、掌握设置网络标号 教学重点:
1、熟练的在电路中连接导线
2、理解网络标号的含义并能够正确而且熟练的放置网络标号 教学方法:演示教学法,任务完成法 课时安排:2课时 教学过程:
一、连接导线
当所有电路元器件、电源和其他对象放置完毕后,就可以进行原理图中个对象的连线。连线的主要目的是按照电路设计的要求建立网络的实际连通性。打开任一原理图电路,对所教授内容进行演示。
连线的方法:执行“放置/导线命令”命令,或左键单击wring工具栏中的连接导线命令。此时光标变为十字状,进入连线状态。当光标到达电气引脚是,会自动出现一个红色的“×”,单击鼠标左键,确定导线的起点,拖动鼠标到终点处,单击鼠标左键,一根导线结束。再次单击开始画第二条导线,也可单击鼠标右键退出连线状态。
Protel2004为设计者提供了四种导线模式:90度走线、45度走线、任意角度走线和自动布线。在画导线过程中,按下shift+space键,可以在各种走线模式间循环切换。
二、放置线路结点
所谓线路结点,是指当两条导线交叉时相连的状况。如果没有结点存在,则认为该两条导线在电气上是不连通的。反之,则连通。
Protel2004是设计者在绘制导线时,将在T字连线处自动产生结点,而在十字处不会自动产生结点,若设计者需要结点则必须由手工放置。
三、设置网络标号
网络标号是实际电气连接的导线的序号。具有相同的网络标号的导线,不管图上是否连在一起,都被看做是同一条导线。它多用于多层次电路或多重式电路的各个模块电路之间的连接,这个功能在绘制印制电路板时十分重要。
放置网络标签的方法:执行“放置/网络标签”命令,光标变成十字状当网络标签于导线或引脚连接状态时,会出现红色的“×”标志,单击鼠标左键,完成放置。同时对网络标签进行设置。
绘制下列电路图,完成对所学内容的练习
教学反思与总结:
本次课中,导线和网络标签的使用在绘制原理图的过程中是经常使用的,尤其是连接导线,需要反复的练习才能够熟练的掌握。有的学生在连接导线是的终点和下一段导线的起点操作不正确,将单击变为了双击,会造成元器件短路(如下图示例)。还有就是网络标签的放置位置不正确,没有注意到红色小叉的标记,随让标签也是放置在了导线或者元件的附近,但是并未形成成功的连接。第十三讲
教学内容:原理图的绘制 教学目标:
1、通过实际的大量的练习熟悉并掌握原理图文件的设计步骤
2、通过实际的大量的练习教学重点:
熟悉并掌握原理图的绘画技巧 教学方法:任务式教学法 课时安排:1课时 教学过程:
绘制下面的原理图,进行练习:
教学反思与总结:
注意I/O端口、总线、网络标签的绘制细节。
第二篇:EDA技术实验教案
一、课程名称:
EDA技术实验
二、教材名称: 《EDA技术使用教程》,潘松等编著。
三、本课程教学目的、要求:
介绍EDA的基本知识、常用的EDA工具的使用方法和目标器件的结构原理、VHDL设计输入方法(图形和文本)、VHDL仿真、VHDL的设计优化等。
EDA技术作为重要的专业课程,其实践性强。在教学时要注重理论和实践的紧密结合,通过大量上机操作,使学生掌握VHDL的基本结构和编程思想。实验1 原理图输入方法及8位全加器设计(4课时)
1)实验目的:
熟悉利用MAX+plusⅡ的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握利用EDA软件进行电子电路设计的详细流程。2)实验报告要求:
详细叙述8位加法器的设计流程;给出各层次的原理图及其对应的仿真波形图;给出加法器的延时情况。
3)实验步骤:
(1)设计一个一位半加器。
步骤1:输入设计项目和存盘 步骤2:输入半加器元件: 步骤3:将项目设置为工程文件 步骤4:选择目标器件并编译 步骤5:时序仿真 步骤6:包装元件入库
选择菜单“File”→“Open”,在“Open”对话框中选择原理图编辑文件选项“Graphic Editor Files”,然后选择h_adder.gdf,重新打开半加器设计文件,然后选择如图4-5中“File”菜单的“Create Default Symbol”项,将当前文件变成了一个包装好的单一元件(Symbol),并被放置在工程路径指定的目录中以备后用。
(2)利用半加器组成一个一位全加器,并记录仿真结果。(3)利用全加器组成一个八位全加器,并记录仿真结果。
实验二
简单组合电路和时序电路设计(4课时)
一、实验目的:
熟悉Max+plusⅡ的VHDL文本设计流程全过程,学习简单组合电路和时序电路的设计和仿真方法。
二、实验内容
1:首先利用MAX+plusⅡ完成2选1多路选择器和一位全加器的文本编辑输入和仿真测试等步骤,给出仿真波形,验证本项设计的功能。
2:设计触发器(J-K),给出程序设计、软件编译、仿真分析、硬件测试及详细实验过程。
3:先设计或门和一位半加器的VHDL描述文件,并进行仿真调试,再用元件例化的方法实现一位全加器,并仿真调试。要求记录VHDL文件内容和仿真波形结果。
4:用一位全加器设计8为全加器。要求记录VHDL文件内容和仿真波形结果。(选作)参考程序 ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT;BEGIN d <= a AND(NOT S);e <= b AND s;y <= d OR e;END ARCHITECTURE one;
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a IS PORT(a, b :IN STD_LOGIC;c : OUT STD_LOGIC);END ENTITY or2a;
ARCHITECTURE fu1 OF or2a IS BEGIN c <= a OR b;END ARCHITECTURE fu1;
半加器描述(1)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY adder IS PORT(a, b : IN STD_LOGIC;co, so : OUT STD_LOGIC);END ENTITY adder;ARCHITECTURE fh1 OF adder is BEGIN so <= NOT(a XOR(NOT b));co <= a AND b;END ARCHITECTURE fh1;
1位二进制全加器顶层设计描述 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin : IN STD_LOGIC;cout,sum : OUT STD_LOGIC);END ENTITY f_adder;ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END COMPONENT ; COMPONENT or2a PORT(a,b : IN STD_LOGIC;c : OUT STD_LOGIC);END COMPONENT;
SIGNAL d,e,f : STD_LOGIC;BEGIN u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e);u2 : h_adder PORT MAP(a=>e,b=>cin,co=>f,so=>sum);u3 : or2a PORT MAP(a=>d,b=>f,c=>cout);END ARCHITECTURE fd1;二选一多路选择器仿真结果:
实验三
含异步清0和同步时钟使能的4位加法计数器(4课时)
一、实验目的:
学习计数器的设计、仿真,进一步熟悉VHDL设计技术。
二、实验内容:
设计一含计数使能、异步复位和能进行计数值并行预置功能的4位加法计数器。RST是异步清零信号,高电平有效;clk是时钟输入信号;D0、D1、D2、D3是4位数据输入端(数据预置输入端)。Q0、Q1、Q2、Q3为计数器输出端。COUT为进位输出端。ENA为使能端,为„1‟时,计数器实现对CLK时钟脉冲信号的加1计数,为0时停止计数。
参考程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B IS PORT(CLK : IN STD_LOGIC;RST : IN STD_LOGIC;ENA : IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC);END CNT4B;ARCHITECTURE behav OF CNT4B IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P_REG: PROCESS(CLK, RST, ENA)BEGIN IF RST = '1' THEN CQI <= “0000”;ELSIF CLK'EVENT AND CLK = '1' THEN IF ENA = '1' THEN CQI <= CQI + 1;ELSE CQI <= “0000”;END IF;END IF;OUTY <= CQI;END PROCESS P_REG;COUT <= CQI(0)AND CQI(1)AND CQI(2)AND CQI(3);--进位输出 END behav;
实验四
7段数码显示译码器设计(2课时)
一、实验目的:
1、学习7段数码显示译码器设计;
2、学习VHDL的多层次设计方法。
二、实验原理:
7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。但为了简化过程,首先完成7段BCD码译码器的设计。例如输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。
图6-21 共阴数码管及其电路
三、实验内容
1、编程实现7段数码显示译码器设计;
2、对7段数码显示译码器设计进行编辑、仿真,给出其所有信号的时序仿真波形; 参考程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECL7S IS PORT(A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DECL7S IS BEGIN PROCESS(A)BEGIN CASE A IS WHEN “0000” => LED7S <= “0111111”;WHEN “0001” => LED7S <= “0000110”;WHEN “0010” => LED7S <= “1011011”;WHEN “0011” => LED7S <= “1001111”;WHEN “0100” => LED7S <= “1100110”;WHEN “0101” => LED7S <= “1101101”;WHEN “0110” => LED7S <= “1111101”;WHEN “0111” => LED7S <= “0000111”;WHEN “1000” => LED7S <= “1111111”;WHEN “1001” => LED7S <= “1101111”;WHEN OTHERS => NULL;END CASE;END PROCESS;END;仿真结果:
综合后的计数器和译码器连接电路的顶层文件原理图:
实验五
用状态机实现序列检测器的设计(4课时)
一、实验目的:
1、掌握状态机的编程方法和步骤;
2、掌握用状态机设计序列检测器的方法和步骤;
二、实验内容
用状态机编程实现对系列数“11100101”的检测,当某一系列串(以左移方式)进入检测器后,若该串与预置的系列数相同,则输出“A”,否则输出“B”。
三、实验步骤:
1、编辑系列检测器的VHDL程序;
2、仿真测试并给出仿真波形,了解控制信号的时序;
3、将上述方案改为系列检测密码为可预置(外部输入)情况,重新编写程序、编译和仿真,并记录仿真结果。参考程序:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK IS PORT(DIN,CLK,CLR : IN STD_LOGIC;AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END SCHK;ARCHITECTURE behv OF SCHK IS SIGNAL Q:INTEGER RANGE 0 TO 8;SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN D<=“11100101”;PROCESS(CLK,CLR)BEGIN IF CLR= '1' THEN Q <= 0;ELSIF clk='1' AND clk'EVENT THEN CASE Q IS WHEN 0 => IF DIN = D(7)THEN Q<=1;ELSE Q<=0;END IF;WHEN 1 => IF DIN = D(6)THEN Q<=2;ELSE Q<=0;END IF;WHEN 2 => IF DIN = D(5)THEN Q<=3;ELSE Q<=0;END IF;WHEN 3 => IF DIN = D(4)THEN Q<=4;ELSE Q<=0;END IF;WHEN 4 => IF DIN = D(3)THEN Q<=5;ELSE Q<=0;END IF;WHEN 5 => IF DIN = D(2)THEN Q<=6;ELSE Q<=0;END IF;WHEN 6 => IF DIN = D(1)THEN Q<=7;ELSE Q<=0;END IF;WHEN 7 => IF DIN = D(0)THEN Q<=8;ELSE Q<=0;END IF;WHEN OTHERS=> Q<=0;END CASE;END IF;END PROCESS;PROCESS(Q)BEGIN IF Q=8 THEN AB<=“1010”;ELSE AB<=“1011”;END IF;END PROCESS;END behv;仿真结果:
提高型实验:
实验六
用VHDL实现数字钟及校园打铃系统(6课时)
一、实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握VHDL语言的进行系统设计的方法和步骤。
3、提高学生综合应用能力。
二、实验内容:
1、用VHDL实现数字钟及校园打铃系统的软件编辑。
2、用VHDL实现数字钟及校园打铃系统的软件仿真。
三、实验步骤
1、用VHDL编辑60进制计数器,并进行软件仿真。
2、用VHDL编辑24进制计数器,并进行软件仿真。
3、用VHDL编辑30进制计数器,并进行软件仿真。
4、用元件例化的方法实现数字钟的软件编辑及软件仿真。
5、实现数字钟的校时功能。
6、实现数字钟的打铃功能。
7、完成数字钟及校园打铃系统的实验报告。
实验七
A/D采样控制器设计
一、实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握A/D采样控制器的工作原理。
3、掌握A/D采样控制器的VHDL语言编程方法。
二、实验内容:
1、设计一A/D0809模数转换器控制器。
2、将转换结果送数码管显示器显示(2位)。
3、模拟输入通道为IN0。
三、实验步骤:
1、ADC0809特点介绍
(1)、单极性输入,8位A/D转换精度。(2)、逐次逼近式,每次采样时间约为100US(3)、8通道模拟输入
2、A/D转换器外部引脚功能结构图
3、A/D转换器时序图
4、AD转换控制器与AD转换器的接口电路框图
5、状态控制
S0状态:初始状态。ADDC=‘1’,选择1通道模拟信号输入。
ALE=START=OE=LOCK=‘0’;
S1状态:通道锁存。ALE=‘1’, START=OE=LOCK=‘0’;
S2状态:启动A/D转换。ALE=‘1’,START=‘1’,OE=LOCK=‘0’; S3状态:A/D转换等待状态。
ALE=START=‘0’,OE=LOCK=‘0’;
IF EOC=‘0’
保持当前状态不变,继续等待A/D转换。
ELSE
转换结束,进入下一状态。
S4状态:数据输出允许状态。A/D转换完毕,开启数据输出允许信号。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘0’;
S5状态:数据锁存状态。开启数据锁存信号,将转换结果送锁存器锁存。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘1’; S6状态:延时状态。为了保证数据可靠锁存,延时一个时钟状态周期。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘1’; 其它状态:返回到初始状态。ALE=START=OE=LOCK=‘0’;
6、参考程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD0809 IS
PORT(D :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK0,EOC : IN STD_LOGIC;
ADDA,OE : OUT STD_LOGIC;
ALE,START : OUT STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
QQ : OUT INTEGER RANGE 15 DOWNTO 0);END AD0809;ARCHITECTURE behav OF AD0809 IS
TYPE ST_TYPE IS(S0, S1, S2, S3,S4,S5,S6,S7);
SIGNAL CURRENT_STATE,NEXT_STATE : ST_TYPE;
SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK :STD_LOGIC;
BEGIN
ADDA<='1';
PRO: PROCESS(CURRENT_STATE,EOC)
BEGIN
CASE CURRENT_STATE IS
WHEN S0 => QQ<=0;ALE<='0';START<='0';OE<='0';LOCK<='0';NEXT_STATE <= S1;
WHEN S1 => QQ<=1;ALE<='0';START<='0';OE<='0';LOCK<='0';NEXT_STATE <= S2;
WHEN S2 => QQ<=2;ALE<='1';START<='1';OE<='0';LOCK<='0';NEXT_STATE <= S3;
WHEN S3 => QQ<=3;ALE<='1';START<='1';OE<='0';LOCK<='0';
IF EOC='0' THEN NEXT_STATE <= S4;
ELSE NEXT_STATE <= S3;
END IF;
WHEN S4 => QQ<=4;ALE<='0';START<='0';OE<='0';LOCK<='0';
IF EOC='1' THEN NEXT_STATE <= S5;
ELSE NEXT_STATE <= S4;
END IF;
WHEN S5 => QQ<=5;ALE<='0';START<='1';OE<='1';LOCK<='0';NEXT_STATE <= S6;
WHEN S6 => QQ<=6;ALE<='0';START<='0';OE<='1';LOCK<='1';NEXT_STATE <= S7;
WHEN S7 => QQ<=7;ALE<='0';START<='0';OE<='1';LOCK<='1';NEXT_STATE <= S0;
WHEN OTHERS => NEXT_STATE <= S0;
END CASE;
END PROCESS PRO;REG:PROCESS(CLK0)
BEGIN
IF CLK0'EVENT AND CLK0='1' THEN
CURRENT_STATE<=NEXT_STATE;
END IF;
END PROCESS REG;
COM:PROCESS(LOCK)
BEGIN
IF LOCK'EVENT AND LOCK='1' THEN
REGL<=D;
END IF;
END PROCESS COM;
Q<=REGL;END behav;
实验八
数字频率计设计
一、实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握数字频率计的工作原理。
3、掌握数字频率计的VHDL语言编程方法。
二、实验内容:
1、设计8位十进制数字频率计。
2、测量频率范围为1Hz-50MHz
三、实验原理: 测频原理框图
四、实验步骤 1、8位十进制计数器设计
(1)用VHDL设计十进制计数器,并进行软件和硬件仿真 参考程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS
PORT(CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC);
END CNT10;ARCHITECTURE behav OF CNT10 IS BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST = '1' THEN
CQI :=(OTHERS =>'0');--计数器复位
ELSIF CLK'EVENT AND CLK='1' THEN
--检测时钟上升沿
IF EN = '1' THEN
--检测是否允许计数
IF CQI < “1001” THEN
CQI := CQI + 1;--允许计数
ELSE
CQI :=(OTHERS =>'0');--大于9,计数值清零
END IF;
END IF;
END IF;
IF CQI = “1001” THEN COUT <= '1';--计数大于9,输出进位信号
ELSE
COUT <= '0';
END IF;
CQ <= CQI;
--将计数值向端口输出
END PROCESS;END behav;(2)8位十进制频率计电路图 2、32位锁存器设计 参考程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY reg32b IS
PORT(load : IN STD_LOGIC;
din: in STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END reg32b;ARCHITECTURE behav OF reg32b IS BEGIN
PROCESS(load,din)
BEGIN
IF load'EVENT AND load='1' THEN
dout<=din;
END PROCESS;END behav;3控制器设计
(1)控制器时序图
(2)参考程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY testctl IS
PORT(clk : IN STD_LOGIC;
tsten:out
STD_LOGIC;
clr_cnt: out
STD_LOGIC;
load:out
STD_LOGIC);
END testctl;ARCHITECTURE behav OF testctl IS
signal div2clk:std_logic;BEGIN
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1' THEN
div2clk<=not div2clk;
END PROCESS;
process(clk,div2clk)
begin
if clk='0' and div2clk='0'
then
clr_cnt<='1';
else clr_cnt<='0';
end if;
end process;
load<=not div2clk;
tsten<=div2clk;END behav;
END IF;END IF;
实验九
DAC接口电路与波形发生器设计
一、实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握DA转换器接口方法。
3、掌握DA转换器的VHDL语言编程方法。
二、实验内容:
1、设计一DAC0832数模转换器控制器。
2、要求使用DAC转换器输出一正弦波,最大值为5V。(使用单缓冲方式)
3、要求正弦波频率能步进可调,步进间隔为100Hz。(使用2个按键控制,一个步进为加,另一个为步进减)
三、实验原理
1、DAC0832特点(1)、8位电流DAC转换,输出为电流信号,因此要转换为电压输出,必须外接集成运算放大器。(2)、转换时间约为50---500ns,转换速度比电压型DAC转换器快,电压型一般为1---10us(3)、20脚双列直插式封装的CMOS型器件。(4)、内部具有两极数据寄存器,可采用单或双缓冲方式。
2、D/A转换器外部引脚功能及内部结构图
3、工作方式
方式一:直通工作方式(本实验采用此种方式)
一般用于只有一路输出信号的情况。
接线情况:ILE=1,CS=WR1=WR2
=XFER=0 方式
二、双缓冲器工作方式
采用两步操作完成,可使DA转换输出前一数据的同时,将采集下一个数据送到8位输入寄存器,以提高转换速度。
一般用于多路DA输出。
4、DA转换器与控制器接口电路设计
5、实验仪实际接口电路图
6、DA转换器输出波形步进可调控制电路设计 设计思想:
设输入控制器的时钟频率为50MHz。
1、DA转换一次,需要一个时钟周期。若采用64点输出,则需要64个时钟周期。如果控制器时钟频率为64Hz,则输出的正弦波频率为1Hz。
2、因此,只需要控制DA转换控制器的时钟频率,则就可以控制正弦波频率,正弦波频率与时钟频率的 关系为1:64。
3、题目要求正弦波步进频率为100Hz,则时钟频率步进应为6400Hz。按“加”键,则时钟频率增加6400Hz,按“减”减,时钟频率减小6400Hz。
7、带按键控制DA转换器与控制器接口电路设计
四、实验程序 参考程序:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DAC0832 IS
PORT(CLK :IN STD_LOGIC;
DD : OUT INTEGER RANGE 255 DOWNTO 0);END DAC0832;ARCHITECTURE behav OF DAC0832 IS SIGNAL Q:INTEGER RANGE 63 DOWNTO 0;SIGNAL D : INTEGER RANGE 255 DOWNTO 0;BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN Q<=Q+1;
END IF;
END PROCESS;PROCESS(Q)
BEGIN
CASE Q
IS
WHEN 00=>D<=254;WHEN 01=>D<=252;WHEN 02=>D<=249;WHEN 03=> D<=245;
WHEN 04=>D<=239;WHEN 05=>D<=233;WHEN
06=> D<=225;WHEN
07=> D<=217;
WHEN 08=>D<=207;WHEN 09=>D<=197;WHEN
10=> D<=186;WHEN
11=> D<=174;
WHEN 12=>D<=162;WHEN 13=>D<=150;WHEN 14=> D<=137;WHEN
15=> D<=124;
WHEN 16=>D<=112;WHEN 17=>D<=99;WHEN 18=> D<=87;
WHEN
19=> D<=75;
WHEN 20=>D<=64;WHEN
21=>D<=53;WHEN 22=>D<=43;
WHEN 23=> D<=34;
WHEN 24=>D<=26;WHEN 25=>D<=19;WHEN
26=> D<=13;
WHEN
27=> D<=8;
WHEN 28=>D<=4;
WHEN
29=>D<=1;
WHEN 30=>D<=0;
WHEN
31=> D<=0;
WHEN 32=>D<=1;WHEN 33=>D<=4;
WHEN 34=> D<=8;
WHEN 35=> D<=13;WHEN 36=>D<=19;WHEN 37=>D<=26;
WHEN 38=> D<=34;
WHEN
39=> D<=43;
WHEN 40=>D<=53;WHEN
41=>D<=64;WHEN 42=> D<=75;
WHEN
43=> D<=87;
WHEN 44=>D<=99;WHEN 45=>D<=112;WHEN 46=>D<=124;WHEN
47=> D<=137;
WHEN 48=>D<=150;WHEN 49=>D<=162;WHEN 50=> D<=255;WHEN 51=> D<=174;
WHEN 52=>D<=186;WHEN 53=>D<=197;WHEN 54=>D<=207;WHEN 55=> D<=217;
WHEN 56=>D<=225;WHEN 57=>D<=233;WHEN 58=> D<=239;WHEN
59=> D<=245;
WHEN 60=>D<=249;WHEN 61=> D<=252;WHEN 62=> D<=254;WHEN 63=>D<=255;WHEN OTHERS=>NULL;END CASE;END PROCESS;
DD<=D;
END;
实验十
七段显示器动态扫描电路设计(提高型)
实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握七段显示器动态扫描电路设计方法。设计要求:
1、设计一个七段数码管动态扫描电路。
2、数码管个数为8个,共阴极接法。
3、设计BCD码--七段字符码的转换电路;
4、设计一电路,控制上述电路实现“12345678”八个数字的显示,要求显示方式为:
(1)自左至右逐个点亮数码管,最后全亮;再重复以上动作,每次变化时间间隔为1秒。
(2)自左至右点亮数码管,每次只点亮一个,最后全息灭,再重复以上动作,每次变化时间间隔为1秒。
(3)先中间两个点亮,再依次向外点亮;全亮后,再依次向中间熄灭;重复上述步骤,每次变化时间间隔为1秒。一、七段显示器动态扫描电路设计框图
二、存储器设计(8位8字节静态随机存储器SRAM)LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY MEMO_RD_WR IS PORT(WR,RD: IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END MEMO_RD_WR;ARCHITECTURE a OF MEMO_RD_WR IS
SIGNAL Q0,Q1,Q2,Q3: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL Q4,Q5,Q6,Q7: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(WR,A)
BEGIN
IF WR='1' THEN
CASE
A
IS
WHEN “000”=>Q0<=D;
WHEN “001”=> Q1<=D;
WHEN “010”=>Q2<=D;
WHEN “011”=> Q3<=D;
WHEN “100”=>Q4<=D;
WHEN “101”=> Q5<=D;
WHEN “110”=>Q6<=D;
WHEN “111”=> Q7<=D;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;PROCESS(RD,B)
BEGIN
IF RD='1' THEN
CASE
B
IS
WHEN “000”=>Q<=Q0;
WHEN “001”=> Q<=Q1;
WHEN “010”=>Q<=Q2;
WHEN “011”=> Q<=Q3;
WHEN “100”=>Q<=Q4;
WHEN “101”=> Q<=Q5;
WHEN “110”=>Q<=Q6;
WHEN “111”=> Q<=Q7;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;END a;
四、循环取数电路设计 LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY GET_CODE IS PORT(CLK1: IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
RD:OUT STD_LOGIC;
A : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END GET_CODE;ARCHITECTURE a OF GET_CODE
IS
SIGNAL LOAD: STD_LOGIC;
SIGNAL QQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN
RD<=„1‟;
LOAD<=CLK1;PROCESS(CLK1)
BEGIN
IF CLK1'EVENT AND CLK1='1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>A<=“000”;
WHEN 1 =>A<=“001”;
WHEN 2 =>A<=“010”;
WHEN 3 =>A<=“011”;
WHEN 4 =>A<=“100”;
WHEN 5 =>A<=“101”;
WHEN 6 =>A<=“110”;
WHEN 7 =>A<=“111”;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;PROCESS(LOAD)
BEGIN
IF LOAD„EVENT AND LOAD=„1‟
THEN-------上升沿锁存
QQ<=D;
END IF;END PROCESS;DOUT(7 DOWNTO 0)<=QQ(7 DOWNTO 0);END a;
五、扫描控制器设计 LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY SCAN_8 IS PORT(CLK2: IN STD_LOGIC;
C : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SCAN_8;ARCHITECTURE a OF SCAN_8
IS
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN PROCESS(CLK2)
BEGIN
IF CLK2'EVENT AND CLK2=‘1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;Process(num)
begin
CASE
NUM
IS
WHEN 1=>C<=“11111110”;WHEN 2=> C<=“11111101”;
WHEN 3=>C<=“11111011”;WHEN 4=> C<=“11110111”;
WHEN 5=>C<=“11101111”;WHEN 6=> C<=“11011111”;
WHEN 7=>C<=“10111111”;WHEN 0=> C<=“01111111”;
WHEN
OTHERS=>NULL;
END CASE;END PROCESS;END A;
应用实例一:显示“01234567”八个数字
LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY disp_data IS PORT(CLK: IN STD_LOGIC;
WR:OUT STD_LOGIC;
A:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END disp_data;ARCHITECTURE a OF disp_data
IS
--SIGNAL QQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN
WR<=„1‟;PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>Q<=“00111111”;A<=“000”;
WHEN 1 =>Q<=“00000110”;A<=“001”;
WHEN 2 =>Q<=“01011011”;A<=“010”;
WHEN 3 =>Q<=“01001111”;A<=“011”;
WHEN 4 =>Q<=“01100110”;A<=“100”;
WHEN 5 =>Q<=“01101101”;A<=“101”;
WHEN 6 =>Q<=“01111101”;A<=“110”;
WHEN 7 =>Q<=“01111111”;A<=“111”;
WHEN OTHERS =>NULL;
END CASE;END PROCESS;END a;实验十一
彩灯控制器设计(提高型实验)
实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握VHDL语言的进行系统设计的方法和步骤。
3、培养学生综合应用能力。实验内容:
1、了解各类节日彩灯的显示方式(主要是动态方式)(上街观察);
2、将你所了解的情况,画出你的设计思想框图;
3、根据框图画出电路框图(用EDA技术);
4、用VHDL语言编程实现;
5、完成课程设计报告(约2000字)
实验
十二、红绿交通灯控制系统
实验目的及要求:
1、掌握VHDL语言的基本结构及编程思想。
2、掌握VHDL语言的进行系统设计的方法和步骤。
3、培养学生综合应用能力。实验内容:
设计一个简易十字路口交通灯控制器。要求:
1、每个路口有红、绿、黄三个指示灯指示交通运行情况。红灯亮,禁止车辆通行;绿灯亮,车辆正常通行。
2、利用两位数码管显示通行到计时时间。
3、用VHDL语言编程实现;
4、完成课程设计报告 实验步骤:
1、红绿黄灯秒计数选择控制电路(traffic_mux)SING_STATE:
00
绿灯20秒(横向路口);
01
黄灯5秒(横向路口)
绿灯20秒(直向路口)
黄灯5秒(直向路口)
RECOUNT:重新计数信号。=„1‟,发送倒计时时间数据; =„0‟,正常倒计时; LIBRARY IEEE;
USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;
USE IEEE.std_logic_arith.all;entity traffic_mux is
port(reset,clk_1Hz,recount: in std_logic;
sign_state: in std_logic_vector(1 downto 0);
load: out integer range 255 downto 0);end;
begin
process(reset,clk_1s)
begin
if reset='1' then
load<=“00000000”;
elsif(clk_1Hz'event and clk_1Hz='1')
then
if
recount = '1‘
then
CASE sign_state IS
WHEN “00” => load <= 20;
WHEN “01” => load <= 5;
WHEN “10” => load <= 20;
WHEN “01” => load <= 5;
WHEN OTHERS =>null;
END CASE;
end if;
end if;end process;end BEHAVIOR;
2、倒计时控制电路(count_down)library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity count_down is port(reset,clk_1Hz: in std_logic;recount:in std_logic;load: in integer range 255 downto 0;seg7:out std_logic_vector(15 downto 0);next_state: out std_logic);end;architecture BEHAVIOR of count_down is signal cnt_ff: integer range 255 downto 0;begin process(clk_1Hz,reset)begin if(reset='1')then cnt_ff<=“00000000”;seg7<=“***0”;elsif(clk_1Hz'event and clk_1Hz='1')then if recount='1‘ then cnt_ff<=load-1;else cnt_ff<=cnt_ff-1;end if;end if;end process;process(cnt_ff)begin case cnt_ff is when 0=>seg7<=“***1”;when 1=>seg7<=“***0”;when 2=> seg7<=“***1”;when 3=> seg7<=“***1”;when 4=> seg7<=“***0”;when 5=> seg7<=“***1”;when 6=> seg7<=“***1”;when 7=> seg7<=“***1”;when 8=> seg7<=“***1”;when 9=> seg7<=“***1”;when 10=> seg7<=“***1”;when 11=> seg7<=“***0”;when 12=> seg7<=“***1”;when 13=> seg7<=“***1”;when 14=> seg7<=“***0”;when 15=> seg7<=“***1”;when 16=> seg7<=“***1”;when 17=> seg7<=“***1”;when 18=> seg7<=“***1”;when 19=> seg7<=“***1”;when 20=> seg7<=“***1”;when 21=> seg7<=“***0”;when 22=> seg7<=“***1”;when 23=> seg7<=“***1”;when 24=> seg7<=“***0”;when 25=> seg7<=“***1”;when 26=> seg7<=“***1”;when 27=> seg7<=“***1”;when 28=> seg7<=“***1”;when 29=> seg7<=“***1”;when others=> seg7<=“***1”;end case;end process;next_state <= '1' when cnt_ff=1 else '0';end BEHAVIOR;
3、红绿灯信号控制电路(traffic_fsm)LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;entity traffic_FSM is port(reset,clk,clk_1Hz,flash_1Hz: in std_logic;a_m:in std_logic;next_state: in std_logic;recount: out std_logic;sign_state: out std_logic_vector(1 downto 0);red: out std_logic_vector(1 downto 0);green: out std_logic_vector(1 downto 0);yellow: out std_logic_vector(1 downto 0));end;architecture BEHAVIOR of traffic_FSM is type Sreg0_type is(r0g1, r0y1, g0r1, y0r1, y0y1, y0g1, g0y1, r0r1);signal state : Sreg0_type;signal light: std_logic_vector(5 downto 0);begin if(reset='1')then state<=r0g1;
----设定当前为横向红灯亮,竖向绿灯亮 sign_state<=“01”;------选择20秒倒计时
recount<=‘1’;------装入计数初值并启动倒计时 else if(clk'event and clk='1')then case STATE is when r0g1 => if(a_m='1' and clk_1Hz='1')then if(next_state = ‘1’)then--当前计数完毕,转入下一种计时
recount<='1';state<=r0y1;sign_state <= “01”;else recount<=‘0’;state<=r0g1;----否则,继续倒计时 end if;when r0y1 =>--now state: red0 on yellow1 flash if(a_m='1' and clk_1Hz='1')then if(next_state = '1')then recount<='1';state<=g0r1;sign_state <= “10”;else recount<='0';state<=r0y1;end if;when g0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1Hz='1')then if(next_state = '1')then recount<='1';state<=y0r1;sign_state <= “11”;else recount<='0';state<=g0r1;end if;when y0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1Hz='1')then if(next_state = '1')then recount<='1';state<=r0g1;sign_state <= “00”;else recount<='0';state<=y0r1;--red=2'b10;green=2'b00;yellow=2'b01;end if;when others => state<=r0g1;recount<='0';sign_state <= “00”;end case;end if;end if;end process;--light: r(10)y(10)g(10)light <= “010010” when(state=r0g1)else “011000” when(state=r0y1)else “100001” when(state=g0r1)else “100100” when(state=y0r1)else “110000”;red <= light(5 downto 4);yellow <= light(3 downto 2)and(flash_1Hz & flash_1Hz);green <= light(1 downto 0);end BEHAVIOR;
第三篇:EDA技术基础实验教案
实验一 2选1多路选择器VHDL设计
一、实验目的:
熟悉利用MAX+plusⅡ的VHDL文本设计流程全过程,学习简单组合逻辑电路的设计、多层次电路的设计、仿真和硬件测试。
二、实验内容:
按照MAX+plusⅡ的文本输入设计方法与流程完成2选1多路选择器的输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形图。最后在实验系统上进行硬件测试,实际验证本项设计的功能。
三、实验步骤:
1、根据2选1多路选择器的工作原理,编写2选1的VHDL源程序,并输入计算机,mux21a.vhd文件名将源程序存盘。2选1多路选择器的参考程序如下:
【例1-1】
ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT;BEGIN d <= a AND(NOT S);e <= b AND s;y <= d OR e;END ARCHITECTURE one;
【例1-2】
ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y <=(a AND(NOT s))OR(b AND s);END ARCHITECTURE one;
【例1-3】 ENTITY mux21a IS PORT(a, b, s: IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS(a,b,s)BEGIN IF s = '0' THEN y <= a;ELSE y <= b;END IF;END PROCESS;END ARCHITECTURE one;
2、对mux21a.vhd文件编译后,再进行波形仿真,完成输入信号a、b、s 输入电平的设置,启动仿真器Simulator,观察输出波形的情况。
3、锁定引脚、编译并编程下载。参选实验电路模式5和附表一,键
1、键
2、键3为输入信号a、b、s分别锁定在EP1K30/50144-PIN TQFP 目标芯片的8、9、10引脚,输出信号y锁定在目标芯片的20引脚。
4、硬件实测2选1多路选择器的逻辑功能。按动GW48实验板上的高低电平输入键
1、键
2、键3,得到不同的s、b、a输入组合;观察输出发光二极管D1的亮灭,检查2选1多路选择器的设计结果是否正确。
思考题
用以上同样的方法设计4选1数据选择器mux41a.vhd,并仿真设计结果。
实验报告要求:
写出实验源程序,画出仿真波形。分析实验结果,以及它们的硬件测试实验结果写进实验报告。写出心得体会。
实验二 D触发器的VHDL设计
一、实验目的:
熟悉利用MAX+plusⅡ的VHDL文本设计流程全过程,学习简单时序电路的设计、仿真和硬件测试。
二、实验内容:
按MAX+plusⅡ的文本输入设计方法与流程完成D触发器的VHDL设计、软件编译、仿真分析、硬件测试及详细实验过程。
D触发器的VHDL设计的参考程序如下:
【例2-1】
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF1 IS BEGIN SIGNAL Q1 : STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D;END IF;Q <= Q1;--将内部的暂存数据向端口输出 END PROCESS;END bhv;
三、实验步骤:
1、打开文本编辑器,输入D触发器的VHDL源程序,并用D_ff.vhd文件名将源程序存盘。
2、选择目标器件EP1K30/50144-PIN TQFP。
3、对D_ff.vhd文件编译后,再进行波形仿真,完成输入信号d、clk输入电平的设置,启动仿真器Simulator,观察输出波形的情况。
4、锁定引脚、编译并编程下载。参选实验电路模式5和附表一,键1为输入信号d锁定在EP1K30/50144-PIN TQFP 目标芯片的8引脚,输出信号q和nq锁定在目标芯片的20和21引脚。
实验报告要求:
写出实验源程序,画出仿真波形。分析实验结果,以及它们的硬件测试实验结果写进实验报告。写出心得体会。
实验三 含异步清0同步时钟使能的4位加法计数器设计
一、实验目的:
学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验原理:
图4-1 含计数使能、异步复位和计数值并行预置功能4位加法计数器
图4-1是一含计数使能、异步复位和计数值并行预置功能4位加法计数器,例4-1是其VHDL描述。由图4-1所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3..0]是4位数据输入端。当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将“0000”加载于锁存器。
三、实验内容:
1、按照VHDL文本输入设计方法和步骤,在MAX+plusII上对例4-1 进行编辑、编译、综合、适配、仿真。说明例4-1中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
[例4-1] LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B IS PORT(CLK : IN STD_LOGIC;RST : IN STD_LOGIC;ENA : IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC);END CNT4B;ARCHITECTURE behav OF CNT4B IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P_REG: PROCESS(CLK, RST, ENA)BEGIN IF RST = '1' THEN CQI <= “0000”;ELSIF CLK'EVENT AND CLK = '1' THEN IF ENA = '1' THEN CQI <= CQI + 1;END IF;END IF;
OUTY <= CQI;END PROCESS P_REG;--进位输出
COUT<=CQI(0)AND CQI(1)AND CQI(2)AND CQI(3);END behav;
2、引脚锁定以及硬件下载测试。
建议选实验电路模式5,用键8(PIO7)控制RST;用键7(PIO6)控制ENA;计数溢出COUT接发光管D8(PIO15);OUTY是计数输出,接数码1(PIO19-PIO16,低位靠右);时钟CLK接clock0(引脚号为54),通过短路帽选择4Hz信号。引脚锁定窗后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。
结合第五章例题使学生能够提高对具有计数使能、异步复位和计数值并行预置功能功能的计数器中各功能的实现的认识、并能完成设计。
思考题1:
在例4-1 中是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即 : OUTY <= OUTY + 1 ?
思考题2:
修改例4-1,用进程语句和IF语句实现进位信号的检出。
实验报告要求:
写出实验源程序,画出仿真波形。分析实验结果,以及它们的硬件测试实验结果和附加内容实验情况写进实验报告。写出心得体会。
实验四 7段数码显示译码器设计
一、实验目的:
学习7段数码显示译码器设计;学习多层次设计方法。
二、实验原理:
7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用VHDL译码程序在FPGA或CPLD中实现。本项实验很容易实现这一目的。例5-1作为7段BCD码译码器的设计,输出信号LED7S的7位分别接如图5-1数码管的7个段,高位在左,低位在右。例如当LED7S输出为 “1101101” 时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1,接有高电平的段发亮,于是数码管显示“5”。
三、实验内容:
1、说明例5-1中各语句的含义,以及该例的整体功能。在MAX+plusII上对以下该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形(提示:用输入总线的方式给出输入信号仿真数据)。
[例5-1] LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DecL7S IS PORT(A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DecL7S IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F”0 WHEN “0001” => LED7S <= “0000110”;--X“06”1 WHEN “0010” => LED7S <= “1011011”;--X“5B”2 WHEN “0011” => LED7S <= “1001111”;--X“4F”3 WHEN “0100” => LED7S <= “1100110”;--X“66”4 WHEN “0101” => LED7S <= “1101101”;--X“6D”5 WHEN “0110” => LED7S <= “1111101”;--X“7D”6 WHEN “0111” => LED7S <= “0000111”;--X“07”7 WHEN “1000” => LED7S <= “1111111”;--X“7F”8 WHEN “1001” => LED7S <= “1101111”;--X“6F”9 WHEN “1010” => LED7S <= “1110111”;--X“77”10 WHEN “1011” => LED7S <= “1111100”;--X“7C”11 WHEN “1100” => LED7S <= “0111001”;--X“39”12 WHEN “1101” => LED7S <= “1011110”;--X“5E”13 WHEN “1110” => LED7S <= “1111001”;--X“79”14 WHEN “1111” => LED7S <= “1110001”;--X“71”15 WHEN OTHERS => NULL;END CASE;END PROCESS;END;
2、引脚锁定以及硬件下载测试。建议选实验电路模式6,用数码8显示译码输出(PIO46--PIO40),键
8、键
7、键
6、键5四位控制输入,硬件验证译码器的工作性能。
3、用VHDL例化语句(参考实验1中的1位全加VHDL文本输入设计)按图5-2 的方式,以例4-1和例5-1为底层元件,完成顶层文件设计,并重复以上实验过程。注意图5-2中的tmp是4位总线,led是7位总线。对于引脚锁定和实验,建议仍选实验电路模式6,用数码8显示译码输出,用键3作为时钟输入(每按2次键为1个时钟脉冲),或直接时钟信号clock0。
实验报告要求:
写出实验源程序,画出仿真波形。分析实验结果,以及它们的硬件测试实验结果写进实验报告。写出心得体会。
实验五 2位数的十进制计数器的设计
一、实验目的:
通过实验让读者掌握复杂时序逻辑电路的EDA原理图输入设计法和文本输入设计法,通过电路仿真,进一步了解有时钟使能的2位十进制计数器的功能和特性。
二、实验原理:
有时钟使能的2位十进制计数器是频率计的核心元件之一,这里用2个74162来设计完成。
三、实验内容:
1.用文本输入设计方法编写2位十进制计数器的VHDL源程序,并用twin10_g.vhd文件名存盘,参考程序如下: LIBRARY ieee;
USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY twin10_v IS PORT(Clrn,Ent1,Enp,Clk : IN STD_LOGIC;
Qa,Qb
: OUT STD_LOGIC_VECTOR(3 downto 0);
Co
: OUT STD_LOGIC);END twin10_v;ARCHITECTURE a OF twin10_v IS SIGNAL Ent2 : STD_LOGIC;BEGIN
PROCESS(Clk)
VARIABLE tmpa,tmpb :STD_LOGIC_VECTOR(3 downto 0);
BEGIN IF(Clk'event AND Clk='1')THEN
IF Clrn='0' THEN tmpa := “0000”;tmpb := “0000”;
ELSIF(Ent1 AND Enp)='1' THEN
IF tmpa=“1001” THEN
tmpa:=“0000”;
IF tmpb=“1001” THEN tmpb:=“0000”;
ELSE tmpb:= tmpb+1;
END IF;
ELSE tmpa := tmpa+1;
END IF;
END IF;
END IF;
Qa <= tmpa;Ent2<=tmpa(0)AND tmpa(3)AND Ent1;
Qb <= tmpb;Co<= tmpb(0)AND tmpb(3)AND Ent2;END PROCESS;END a;2.同样编译后再进行波形仿真
按照波形仿真的操作步骤,对2位十进制计数器进行波形仿真。
3.锁定引脚、编译并编程下载。参选实验电路模式5和附表一,引脚锁定目标芯片为EP1K30/50144-PIN TQFP 实验报告要求:
写出实验源程序,画出仿真波形。对设计的2位十进制计数器进行实验结果的分析,以及硬件测试实验结果写进实验报告。写出心得体会。
第四篇:集成电路EDA技术
题
目
可编程逻辑器件与集成电路设计
姓
名
**
所在学院
理学院
专业班级
思源0901
学
号
09274027
指导教师
**
日
期
20**
年
**
月
日
可编程逻辑器件与集成电路设计
摘要:本文简述了集成电路的传统设计方法和现代设计方法,并对两者的区别进行了比较,以实例为基础介绍了集成电路的设计过程。对可编程逻辑器件的定义、分类、功能等进行详尽的阐述,介绍了可编程逻辑器件的设计过程,以可编程逻辑器件软件设计平台QuartusII为例,介绍了可编程逻辑器件软件设计平台的功能及使用方法,并对其他种类软件平台作出比较。对国内外集成电路设计公司作简要介绍,分析了PLD和FPGA芯片上的文字信息。
关键字:集成电路设计;可编程逻辑器件;软件设计平台;QuartusII;PLD;FPGA
1.集成电路的设计方法
1.1手工传统设计方法
传统的集成电路设计方法是指20世纪50-60年代的手工设计时代。
传统的集成电路设计方法的基本步骤是1.根据设计要求划分功能模块;2.确定输入和输出的关系,画出真值表,写出逻辑表达式;4.利用公式或卡诺图进行人工化简;5.根据化简后的逻辑表达式画出电路原理图;6.在面包板上进行实验,验证电路的正确性;7.若无错误,再在透明薄膜上用贴图符号贴PCB图;8.检查后送制板厂制板;9.对PCB板进行安装、调试,若有大的错误,修改设计,重复以上过程,重新制板。
传统集成电路设计方法的特点是采用自下而上(Bottom
Up)的设计方法,采用通用型逻辑器件搭积木式的方式,在系统硬件设计的后期进行仿真和调试,主要设计文件是电路原理图。
图1
1.2
EDA技术与现代设计方法
计算机出现后,人们可以借助计算机进行集成电路的辅助设计,这样就进入了20世纪70-80年代的CAD(计算机辅助)时代,利用计算机及其图形设备帮助集成电路设计人员进行设计工作,大大减少了手工设计时代的工作量,提高了集成电路的设计效率。到了80年代后期,CAD技术日渐成熟,集成电路的设计真正跨越到了EDA(电子设计自动化)的现代设计方法时代。
20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
EDA技术为电子系统设计带来了很大的变化:设计效率提高,设计周期缩短;设计质量提高;设计成本降低;能更充分地发挥设计人员的创造性;设计成果的重用性大大提高,省去了不必要的重复劳动。
现代的数字系统设计采用PLD,利用EDA开发工具,通过芯片设计来实现系统功能。普遍使用自顶向下(Top—Down)的设计方法,这里的“顶”就是指系统的功能;“向下”就是指将系统由大到小、由粗到精进行分解,直至可用基本模块实现。自顶向下设计方法的一般过程大致上可以分为四步,如下图所示。
Top-Down设计图
明确系统功能
确定总体方案
子系统具体实现
系统仿真实现
图2
明确系统功能:对要设计的系统的任务、要求、原理以及使用环境等进行充分调研,进而明确设计目标、确定系统功能,是一件至关重要的事。因为只有把它做好了,后面的设计工作才有意义,才有效率。
确定总体方案:明确了设计目标、确定系统功能之后,接下来要做的工作就是根据系统功能确定出系统设计的总体方案。
系统具体实现:系统方案确定以后.再从结构上对系统进行逻辑划分,导出系统的结构框图。一般把系统从逻辑上划分为数据子系统和控制子系统两部分。然后,再将各自划分为多个子系统模块,各模块的输入、输出信号要明确,有利于团队工作。这些子系统就可以依据基础的数字设计确定具体电路实现。系统如果有控制算法也包括选择控制算法及实现。
系统仿真实现:系统设计完成之后,最好先采用EDA软什对所设计的系统进行仿真后再用具体器件搭电路.以保证系统设计的正确性和可靠性。电路实现时,一般按自底向上的顺序进行。这样做不仅行利于单个电路的调试,而且也利于整个系统的联调。
因此,严格地讲,现代数字系统的完整设计过程应该是“自顶向下设计。自底向上集成”。
1.3从传统到现代设计方法的区别
从传统设计方法到现代设计方法,集成电路设计技术有了长足的进步。传统的集成电路设计方法,从根据设计目标得到真值表,到最后完成系统后的测试与调试,所有的工作均需人工完成。可以想象,随着数字集成电路的发展,从小规模集成电路(SSI)的小于10个逻辑门,到中规模集成电路(MSI)的几百个逻辑门,再到大规模集成电路的(LSI)几万门,最后甚至到超大规模集成电路(VLSI),甚大规模集成电路(ULSI)的几十万、几百万门电路,集成电路迅速的大规模化,使得传统设计方法根本无法完成得到真值表画出卡诺图等工作。它表现出了效率低下,一切手工完成,设计周期很长;容易出错;芯片种类多,数量大,受市场的限制;设计灵活性差;产品体积大等缺点。同时后续的电路调试和设计也需要很高的电路布局和布线的技巧,总而言之,这样的设计对于复杂数字系统来讲效率太低了。
现代的设计方法,自顶向下,可以实现具体任务的分工完成,并且用软件的方式设计硬件,从软件设计的硬件系统到硬件系统的转换是由EDA软件自动完成的,设计过程中可用软件进行各种仿真,现场可编程,在线升级,而且整个系统集成在一块儿很小的芯片上,体积小,功耗低,可靠性高,容易检查错误,便于修改,设计周期短、成功率很高,这些优点都是传统方法无法比拟的,大大提高了集成电路设计的效率。
所以说从传统方法到现代方法,集成电路的设计有了一个很大的跨越。
表1
2.可编程逻辑器件
2.1可编程逻辑器件定义
可编程逻辑器件英文全称为:programmable
logic
device
即
PLD。PLD是做为一种通用集成电路产生的,他的逻辑功能按照用户对器件编程来确定。一般的PLD的集成度很高,足以满足设计一般的数字系统的需要。这样就可以由设计人员自行编程而把一个数字系统“集成”在一片PLD上,而不必去请芯片制造厂商设计和制作专用的集成电路芯片了。
图3
PLD的基本结构如上图所示,图中与阵列和或阵列是PLD的主体。与阵列用以产生有关与项,或阵列把所有与项构成与或形式的逻辑函数。任何组合逻辑函数均可表示为与或表达式,因而用与门-或门两级电路可实现任何组合电路,又因为任何时序电路是由组合电路加上存储元件构成的,因而PLD的与或结构对实现数字电路具有普遍的意义。
2.2可编程逻辑器件分类及功能
可编程逻辑器件按集成度分类如下图。
图4
简单可编程逻辑器件有PROM、PLA、PAL、GAL。
PROM:与阵列固定,或阵列可编程的逻辑器件,最主要特征是只允许数据写入一次,如果数据输入错误只能报废。
PLA:
与或阵列均可编程,在可编程逻辑器件中,它的灵活性最高。由于它
具有与或阵列均能编程的特点,在实现函数时,只需形成所需的乘机项,使这列规模比输入数相同的与阵列固定、或阵列可编程的PROM小得多。但是目前PLA的编程缺少高质量的支持软件和编程工具,且器件价格偏高,门的利用率不高,因而未得到广泛应用。
PAL、GAL:与阵列可编程,或阵列固定的代表器件。这种结构中,或阵列固定若干个乘积项输出
。PAL和GAL门阵列结构把PROM器件的成本低、速度高、编程容易以及PLA器件的灵活性等优点结合在一起,成为早起实现可编程ASIC的主要器件
复杂可编程逻辑器件的两种主要类型是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
FPGA:提供了最高的逻辑密度、最丰富的特性和最高的性能。
现在最新的FPGA器件,可提供八百万“系统门”(相对逻辑密度)。
这些先进的器件还提供诸如内建的硬连线处理器、大容量存储器、时钟管理系统等特性,并支持多种最新的超快速器件至器件信号技术。
FPGA被应用于范围广泛的应用中,从数据处理和存储,以及到仪器仪表、电信和数字信号处理等。
CPLD:提供的逻辑资源少得多,最高约1万门。
但是,CPLD提供了非常好的可预测性,因此对于关键的控制应用非常理想。
而且CPLD器件需要的功耗极低。
2.3可编程逻辑器件设计过程
采用自顶向下(Top—Down)的设计方法确定各个子系统后,就需要借助于EDA软件进行系统设计实现。下图是基于EDA软件的PLD开发流程框图,由框图可见设计主要包括设计输入、设计处理、功能仿真和时序仿真、器件编程或下载和系统测试五个部分
FPGA
/
CPLD设计流程
设计准备
设计输入
Ø
图形输入
Ø
硬件描述语言HDL
设计处理
Ø
编译、优化综合Ø
适配、分割
Ø
布局、布线
器件编程(下载)
系统测试
时序仿真
功能仿真
HDL:
VHDL(IEEE)
Verilog
(IEEE)
AHDL
ABEL
EDA工具自动实现
对CPLD产生Pof文件
对FPGA产生Sof文件
图5
设计输入:采用原理图或硬件描述语言(HDL),描述出输入和输出的逻辑关系,将整个原理图或程序输入到计算机中。
设计处理:EDA工具可自动进行逻辑综合,将功能描述转换为门级描述,或转换成具体PLD的网表文件,将网表文件自动适配到具体芯片中进行布局布线。
功能仿真和时序仿真:在软件平台进行硬件仿真。
编程下载:到实际芯片中,在实验台上进行验证;
系统测试:测试成型系统,在每一阶段若有问题,可在计算机上直接修改设计,重复以上过程。
3.可编程逻辑器件软件设计平台
可编程逻辑器件的软件平台,都是由PLD/FPGA芯片厂家提供,基本都可以完成所有的设计输入(原理图或HDL),仿真,综合,布线,下载等工作。
3.1常用可编程逻辑器件软件设计平台比较
Altera公司:
QuartusII软件平台:
Quartus
II
是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
MaxplusII
E+MAX:免费PLD开发软件,界面与标准版的MaxplusII完全一样,只支持MAX7000和MAX3000系列器件,本身支持不复杂的VHDL和Verilog综合。
MaxplusII
Baseline:免费PLD开发软件,界面与标准版的MaxplusII完全一样,但需要通过使用MAX+PLUSII
Advanced
Synthsis插件才能支持VHDL/Verilog。支持MAX7000/3000和部分FLEX/ACEX芯片。
Xilinx公司
ISE软件平台: ISE是使用XILINX的FPGA的必备的设计工具,它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。
WebFITTER:免费PLD开发软件,不需下载,可在线编译,结果用e-mail发送到信箱。使用简单,但要求较快的联网速度。支持XC9500
和
CoolRunner系列。
WebPACK
ISE:免费PLD开发软件,支持XC9500,coolrunner,Spartan/II,部分Virtex/E/II器件。
Lattice公司
ispDesignEXPERT:PLD开发软件,目前最新软件改名为:ispLEVER
ispLEVER
Starter:免费PLD开发软件,支持600个宏单元以下的Lattice芯片的设计。
3.2
QuartusII软件设计平台简介
QuartusII是美国Altera公司自行设计的第四代PLD开发软件可以完成PLD的设计输入、逻辑综合、布局与布线、仿真、时序分析、器件编程的全过程,同时还支持SOPC(可编程片上系统)设计开发。
QuartusⅡ提供了方便的设计输入方式、快速的编译和直接易懂的器件编程。能够支持逻辑门数在百万门以上的逻辑器件的开发,并且为第三方工具提供了无缝接口。QuartusⅡ支持的器件有:Stratix
Ⅱ、Stratix
GX、Stratix、Mercury、MAX3000A、MAX
7000B、MAX
7000S、MAX
7000AE、MAX
Ⅱ、FLEX6000、FLEX10K、FLEX10KA、FLEX10KE、Cyclone、Cyclone
Ⅱ、APEX
Ⅱ、APEX20KC、APEX20KE和ACEX1K系列。QuartusⅡ软件包的编程器是系统的核心,提供功能强大的设计处理,设计者可以添加特定的约束条件来提高芯片的利用率。
Quartus
II软件的设计过程主要包括:
1.建立项目;
2.输入设计电路;
3.设计编译;
4.设计仿真
5.设计下载
其中QuartusII的输入可以有三种方式,(1)原理图输入方式:适用于对系统及各部分电路很熟悉的场合。(2)硬件描述语言输入方式:硬件描述语言是用文本方式描述设计,硬件描述语言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成为IEEE标准。(3)波形输入方式
当在Quartus
Ⅱ中完成设计后,就应当将所设计的电路下载到CPLD芯片中,结合用户系统进行统一的调试。CPLD编程下载的方式较多,按计算机的接口可分为:串口下载(BitBlaster或MasterBlaster)、并口下载(ByteBlaster)、USB接口下载(MasterBlaster或APU)等方式。按器件可分为:CPLD编程(MAX3000、MAX5000、MAX7000、MAX
9000),FPGA下载(FLEX6000、FLEX8000、FLEX
10K、ACEX
1K、APEX
20K),存储器编程EPC1、EPC2等。
4.集成电路设计公司简介
4.1国内集成电路设计公司介绍
大唐微电子技术有限公司:作为目前国内规模最大的集成电路设计企业之一,大唐微电子积累了丰富的集成电路设计经验。多年来,公司在移动通信智能卡领域中,凭借独具特色的产品与服务,引领了中国国内移动通信智能卡市场稳健、快速的发展。大唐微电子是目前全球智能卡领域中生产规模最大、产业链最完整、生产设备最先进的智能卡企业之一;是全球唯一一家能够同时在芯片级、模块级、卡片级向客户提供全方位产品、服务与解决方案的企业;也是国家指定的中国第二代居民身份证专用集成电路设计和模块加工企业。目前,公司模块年生产能力达4亿枚,智能卡年发行能力超过2亿张。
炬力集成电路设计有限公司:是一家致力于集成电路设计与制造的大型半导体技术集团,美国的纳斯达克上市公司,总部设在环境优美的海滨城市珠海,旗下拥有三家子公司——炬力集成电路设计有限公司、炬才微电子(深圳)有限公司、北京炬力北方微电子有限公司。公司目前共有700多人,其中本科以上研发人员占80%以
4.2国外集成电路设计公司介绍
Xilinx(赛灵思):是全球领先的可编程逻辑完整解决方案的供应商。Xilinx研发、制造并销售范围广泛的高级集成电路、软件设计工具以及作为预定义系统级功能的IP(Intellectual
Property)核。客户使用Xilinx及其合作伙伴的自动化软件工具和IP核对器件进行编程,从而完成特定的逻辑操作。Xilinx公司成立于
1984年,Xilinx首创了现场可编程逻辑阵列(FPGA)这一创新性的技术,并于1985年首次推出商业化产品。目前Xilinx满足了全世界对
FPGA产品一半以上的需求。Xilinx产品线还包括复杂可编程逻辑器件(CPLD)。在某些控制应用方面CPLD通常比FPGA速度快,但其提供的逻辑资源较少。
Xlinx主要FPGA产品:Xilinx的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Spartan系列;还有一种侧重于高性能应用,容量大,性能能满足各类高端应用,如Virtex系列,用户可以根据自己实际应用要求进行选择。
在性能可以满足的情况下,优先选择低成本器件。
*
Spartan-3/3L:
新一代FPGA产品,结构与VirtexII类似,全球第一款90nm工艺FPGA,1.2v内核,于2003年开始陆续推出。
*
Spartan-3E:基于Spartan-3/3L,对性能和成本进一步优化
*
Spartan-6:xilinx最新推出的低成本FPGA
*
Virtex-II:2002年推出,0.15um工艺,1.5v内核,大规模高端FPGA产品
*
Virtex-II
pro:
基于VirtexII的结构,内部集成CPU和高速接口的FPGA产品
*
Virtex-4:
xilinx最新一代高端FPGA产品,包含三个子系列:LX,SX,FX
*
Virtex-5:65nm工艺的产品
*
Virtex-6:最新的高性能FPGA产品,45nm
*
Virtex-7:20**年推出的超高端FPGA产品。
Altera:自二十年前发明世界上第一个可编程逻辑器件开始,Altera公司秉承了创新的传统,是世界上“可编程芯片系统”(SOPC)解决方案倡导者。Altera结合带有软件工具的可编程逻辑技术、知识产权(IP)和技术服务,在世界范围内为14,000多个客户提供高质量的可编程解决方案。新产品系列将可编程逻辑的内在优势——灵活性、产品及时面市——和更高级性能以及集成化结合在一起,专为满足当今大范围的系统需求而开发设计。
Altera可编程解决方案包括:业内最先进的FPGA、CPLD和结构化ASIC技术;全面内嵌的软件开发工具;最佳的IP内核;可定制嵌入式处理器;现成的开发包;专家设计服务。
Altera主要FPGA产品:Altera的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Cyclone,CycloneII;还有一种侧重于高性能应用,容量大,性能能满足各类高端应用,如Startix,StratixII等,用户可以根据自己实际应用要求进行选择。在性能可以满足的情况下,优先选择低成本器件。
*
Cyclone(飓风):Altera中等规模FPGA,2003年推出,0.13um工艺,1.5v内核供电,与Stratix结构类似,是一种低成本FPGA系列,是目前主流产品,其配置芯片也改用全新的产品。
*
CycloneII:Cyclone的下一代产品,2005年开始推出,90nm工艺,1.2v内核供电,属于低成本FPGA,性能和Cyclone相当,提供了硬件乘法器单元
*
Stratix
:altera大规模高端FPGA,2002年中期推出,0.13um工艺,1.5v内核供电。集成硬件乘加器,芯片内部结构比Altera以前的产品有很大变化。
*
StratixII:
Stratix的下一代产品,2004年中期推出,90nm工艺,1.2v内核供电,大容量高性能FPGA。
*StrtratixV为altera目前的高端产品,采用28-nm工艺,提供了28G的收发器件,适合高端的FPGA产品开发
5.PLD及FPGA片上文字信息分析
图6
如上图FPGA芯片,左上角XILINX文字为设计生产该芯片的公司名称,KINTEX-7为芯片型号,Kintex-7
系列是赛灵思公司一种新型
FPGA,能以不到
Virtex-6
系列一半的价格实现与其相当性能,性价比提高了一倍,功耗降低了一半。下边文字为此芯片的具体型号等,最下方TAIWAN为芯片的产地。
参考文献
【1】
侯建军
《数字电子技术基础》高等教育出版社,2007年
【2】
朱明程
《可编程逻辑器件及应用》
西安电子科技大学出版社,2004年
【3】
百度百科
《PLD》
《FPGA》
《Xilinx》
《Altera》
【4】
陈忠平、高金定、高见芳
《基于Quartus
II的FPGA/CPLD设计与实践》
电子工业出版社
2007年
第五篇:EDA技术Verilog密码锁
电 子 科 技 大 学
实
验
报
告
学生姓名:吴成峰
学 号:2014070906016
指导教师:黄志奇
一、实验室名称: 主楼C2-514
二、实验项目名称:
密码锁
三、实验原理:
利用FPGA开发班上的3个按钮开关btn[2:0]来输入4位数字的密码。例如,输入“2-0-1-2”打开门锁。将用拨位开关sw[7:0]来设置密码,通过按钮开关btn[2:0]来输入密码。其中,btn[0]、btn[1]和btn[2]分别对应的有效输入为“00”(十进制0)、“01”(十进制1)和“10”(十进制2),sw[7:6]、sw[5:4]、sw[3:2]和sw[1:0] 分别对应密码的1、2、3、4位。
用sw[7:0]设置密码的同时,通过7段数码管复用电路,将其显示到7段数码管上。注意:需将8位输入扩展成16位,即,x[15:0]={2’b00,sw[7:6], 2’b00,sw[5:4], 2’b00,sw[3:2], 2’b00,sw[1:0]} 输入4位数字后,才能知道所输入的密码是否正确。如果密码是正确的,led[1]亮起;如果密码错误,led[0]将亮起。图1给出了设计的顶层模块。当按下btn[0]、btn[1]、btn[2]中任何一个按钮时,将会产生一个时钟脉冲。当分别按下按钮btn[0]、btn[1]、btn[2]时,锁模块对应的2位输入bn[1:0]为“00”、“01”和“10”。输入的密码与拨位开关上设置的密码相比较,产生图2所示的状态转移图。注意:即使密码输入错误,也必须完成完整的4位密码输入,才能进入“fail”状态E4。
图1.门锁电路的顶层模块
图2.门锁电路的状态转移图
四、实验目的:
熟悉利用HDL代码输入方式进行组合逻辑电路的设计和仿真的流程,掌握Verilog语言的基本语法。并通过一个密码锁的设计把握利用EDA软件(Xilinx ISE 10.1)进行HDL代码输入方式的电子线路设计与仿真的详细流程,熟悉摩尔状态机。
五、实验内容:
1)利用HDL代码输入方式在Xilinx ISE 10.1平台上实现一个密码锁设计,可以设定密码并显示,输入密码以解锁; 2)设计密码锁的顶层模块,使用模块实例语句连接前面所设计的密码锁模块;
3)生成比特流文件下载到开发板上进行验证。
六、实验器材(设备、元器件): 1)计算机(安装Xilinx ISE 10.1软件平台);
2)BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)。
七、实验步骤:
1、在Xilinx ISE 10.1平台中,新建一个工程lock。我们选用的BASYS2 FPGA开发板采用的是Spartan3E XA3S100E芯片和CPG132封装,设置好器件属性,如图3所示。
图3.设置器件属性
2、在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“lock”。
ISE会自动创建一个Verilog的模板,并在源代码编辑区打开,接下来的工作就是将代码编写完整。完整代码如下: module lock(input clk,input clr,input [7:0] sw,input [1:0] bn,output reg pass,output reg fail);
reg [3:0] pre_s,nex_s;
parameter S0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;
//state registers
always@(posedge clk or posedge clr)
begin
if(clr==1)
pre_s<=S0;
else
pre_s<=nex_s;
end
//C1
always@(*)
begin
case(pre_s)
S0:if(bn==sw[7:6])
nex_s<=S1;
else
nex_s<=E1;
S1:if(bn==sw[5:4])
nex_s<=S2;
else
nex_s<=E2;
S2:if(bn==sw[3:2])
nex_s<=S3;
else
nex_s<=E3;
S3:if(bn==sw[1:0])
nex_s<=S4;
else
nex_s<=E4;
S4:if(bn==sw[7:6])
nex_s<=S1;
else
nex_s<=E1;
E1:nex_s<=E2;
E2:nex_s<=E3;
E3:nex_s<=E4;
E4:if(bn==sw[7:6])
nex_s<=S1;
else
nex_s<=E1;
default:nex_s<=S0;
endcase
end
//C2
always@(*)
begin
if(pre_s==S4)
pass=1;
else
pass=0;
if(pre_s==E4)
fail=1;
else
fail=0;
end
endmodule
3、建立分频模块“clkdiv”,过程如上,代码如下:
module clkdiv(input mclk, input clr, output clk190);
reg [24:0] q;
always@(posedge mclk or posedge clr)
begin
if(clr==1)
q<=0;
else
q<=q+1;
end
assign clk190=q[17];//190Hz endmodule
4、建立时钟脉冲模块“clock_pulse”,代码如下:
module clock_pulse(input inp,input cclk,input clr,output outp);
reg delay1;
reg delay2;
reg delay3;
always@(posedge clr or posedge cclk)
begin
if(clr==1)
begin
delay1<=0;
delay2<=0;
delay3<=0;
end
else
begin
delay1<=inp;
delay2<=delay1;
delay3<=delay2;
end
end
assign outp=delay1&delay2&~delay3;endmodule
5、建立七段数码管复用模块“hex7seg”,代码如下:
module hex7seg(input [15:0] x, input clk, input clr, output reg [6:0] a_to_g, output reg [3:0] an, output dp);wire [1:0] s;reg [3:0] digit;wire [3:0] aen;reg [19:0] clkdiv;
assign dp=1;assign s=clkdiv[19:18];
assign aen[3]=1;assign aen[2]=1;assign aen[1]=1;assign aen[0]=1;
//四位四选一 always@(*)case(s)0:digit=x[3:0];1:digit=x[7:4];2:digit=x[11:8];3:digit=x[15:12];default:digit=x[3:0];endcase
//数码管显示 always@(*)case(digit)0:a_to_g=7'b0000001;1:a_to_g=7'b1001111;2:a_to_g=7'b0010010;3:a_to_g=7'b0000110;4:a_to_g=7'b1001100;5:a_to_g=7'b0100100;6:a_to_g=7'b0100000;7:a_to_g=7'b0001111;8:a_to_g=7'b0000000;9:a_to_g=7'b0000100;'hA:a_to_g=7'b0001000;'hB:a_to_g=7'b1100000;'hC:a_to_g=7'b0110001;'hD:a_to_g=7'b1000010;'hE:a_to_g=7'b0110000;'hF:a_to_g=7'b0111000;default:a_to_g=7'b0000001;endcase
//digit select always@(*)begin
an=4'b1111;if(aen[s]==1)
an[s]=0;end
//时钟分频器
always@(posedge clk or posedge clr)begin
if(clr==1)
clkdiv<=0;
else
clkdiv<=clkdiv+1;end endmodule
6、顶层模块lock_top设计。代码如下:
module lock_top(input mclk,input [7:0] sw,input [3:0] btn,output [1:0] led,output [6:0] seg,output [3:0] an,output dp);wire clr,clk190,clkp,btn012;wire [1:0] bn;wire [15:0] x;
assign x={2'b00,sw[7:6],2'b00,sw[5:4],2'b00,sw[3:2],2'b00,sw[1:0]};assign clr=btn[3];assign btn012=btn[0]|btn[1]|btn[2];assign bn[1]=btn[2];assign bn[0]=btn[1];
clkdiv U1(.mclk(mclk),.clr(clr),.clk190(clk190));
clock_pulse U2(.inp(btn012),.cclk(clk190),.clr(clr),.outp(clkp));
lock U3(.clk(clkp),.clr(clr),.sw(sw),.bn(bn),.pass(led[1]),.fail(led[0]));
hex7seg U4(.x(x),.clk(mclk),.clr(btn[3]),.a_to_g(seg),.an(an),.dp(dp));Endmodule
7、将工程编译、综合与实现。在工程管理区的“Source for”中选取“Implementation”选项,然后在进程管理区双击“Synthesize-XST”进行综合,如图4所示。
图4.综合进程与源程序结构
综合完成以后是实现,实现主要分为三个步骤:翻译逻辑网表、映射到器件单元和布局布线,如图4所示。注意的是,在实现前还必须为模块中的输入/输出信号添加引脚约束,即添加UCF文件。开发板BASYS2的UCF文件可以在其网站上www.xiexiebang.com上下载,当然也可以自己编辑UCF文件。实验所用的UCF文件如图5所示。
图5.BASYS2开发板所需的UCF文件
6、器件配置。首先生成可以下载到硬件中的二进制比特文件。双击图10中的“Generate Programming File”的选线,ISE就会为设计生成相应的二进制比特文件。
BASYS2开发板提供了非常方便的JTAG配置方案,使用USB-miniUSB线缆结合Digilent Adept软件实现FPGA的配置,配置界面如图6所示。这里我们对FPGA进行配置,配置成功状态栏会显示“Programming Successful”信息,如图6所示。然后可在器件上验证设计。
图6.Digilent Adept 界面与配置
八、实验数据及结果分析:
图7.设定密码为2012
图8.输入密码0000,led[0]亮,输入错误
图8.输入密码2012,led[1]亮,输入正确
九、实验结论: 由上面实验结果可得,实验仿真结果证明了设计的正确性,该设计是合理的,能够满足实验所需的,完成了题设要求。
十、总结及心得体会: 此次实验结合了前几次的学习的成果,将七段数码管复用的部分结合进来,并通过分频电路和时钟脉冲电路来实现通过按键对时序系统的输入,而密码锁本身即是时序电路摩尔机的利用。至此,我们完整的梳理了一遍这个学期的所学,组合电路设计,时序电路设计合为一体,更能深刻的理解Verilog语言和EDA,收获良多。
报告评分:
指导教师签字: