教学课件·硬件描述语言与FPGA设计技术_第1页
教学课件·硬件描述语言与FPGA设计技术_第2页
教学课件·硬件描述语言与FPGA设计技术_第3页
教学课件·硬件描述语言与FPGA设计技术_第4页
教学课件·硬件描述语言与FPGA设计技术_第5页
已阅读5页,还剩297页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 EDA技术概述 EDA技术概述EDA技术概述EDA技术概述1.1硬件描述语言1.1硬件描述语言1.1硬件描述语言1.2 EDA设计流程EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构。 1.2 EDA设计流程 1.2.1设计输入1.2.1设计输入1.2.2综合与适配1.2.2综合与适配1.2.3时序仿真与功能仿真 1.2.3时序仿真与功能仿真1.2.4编程下载与器件测试 1.2.4编程下载与器件测试1.3 Quartus II 设计环境1.3 Quartus II 设计环境1.4 EDA技术开发中的IP核1.4 EDA技术开发中的IP核1.4 EDA技

2、术开发中的IP核1.4 EDA技术开发中的IP核第2章 可编程逻辑器件硬件基础 2.1 PLD可编程器件结构 2.2 可编程逻辑器件分类 2.3 PLD电路表示 2.3 PLD电路表示 2.2.1 逻辑元件符号表示 2.4 GAL器件结构原理 2.4 GAL器件结构原理2.4 GAL器件结构原理2.5 CPLD的结构原理 2.5 CPLD的结构原理 1. 逻辑阵列块LAB 2. 宏单元 3. 扩展乘积项 2.5 CPLD的结构原理 4. 可编程连线阵列PIA 2.5 CPLD的结构原理 5. I/O控制块 2.6 FPGA的结构原理 2.6.1 查找表逻辑结构 2.6.2 Cyclone II

3、I系列器件 的结构原理 2.4.2 Cyclone III系列器件的结构原理 2.6.2 Cyclone III系列器件的结构原理 2.6.2 Cyclone III系列器件的结构原理 2.4 FPGA的结构原理 2.4.2 Cyclone III系列器件的结构原理 2.6.2 Cyclone III的结构原理 Cyclone III系列器件的结构原理 2.6 .2 Cyclone III系列器件的结构原理 2.6 .2 Cyclone III系列器件的结构原理 2.7 CPLD/FPGA的编程与配置目前常见的大规模可编程逻辑器件的编程工艺有三种:基于电可擦除存储单元的EEPROM或Flash

4、技术。CPLD般使用此技术进行编程。基于SRAM查找表的编程单元。对该类器件,编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。因此该类器件的编程一般称为配置。大部分FPGA采用该种编程工艺。基于一次性可编程反熔丝编程单元。Actel的部分FPGA采用这种结构。 2.7 CPLD/FPGA的编程与配置 (1)基于电可擦除存储单元的EEPROM或Flash技术。 ( 2)基于SRAM查找表的编程单元。 (3)基于一次性可编程反熔丝编程单元。 2.7.1 CPLD在系统编程JTAG边界扫描 2.7.1 CPLD在系统编程2.7.2 FPGA的配置

5、方式 用JTAG进行FPGA的配置 2.7 CPLD/FPGA的编程与配置 FPGA专用配置器件 2.7 CPLD/FPGA的编程与配置 FPGA配置时序2.7 CPLD/FPGA的编程与配置 使用单片机配置FPGA 第3章 VHDL组合电路设计 3.1 多路选择器及其VHDL描述 图3-3 max21a电路时序图3.1 多路选择器及其VHDL描述 3.1 多路选择器及其VHDL描述电路的VHDL描述由三大部分组成:1使用库和程序包的声明:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;2以关键词ENTITY引导,END ENTITY mux21a结尾的语

6、句部分,称为实体。VHDL的实体描述了电路器件的外部情况及各信号端口的基本性质,如信号流动的方向,流动在其上的信号结构方式和数据类型等。图3-1可以认为是实体的图形表达。3以关键词ARCHITECTURE引导,END ARCHITECTURE one结尾的语句部分,称为结构体。结构体负责描述电路器件的内部逻辑功能或电路结构。图3-2是此结构体的某种可能的原理图表达。3.1 多路选择器及其VHDL描述3.1 多路选择器及其VHDL描述3.1 多路选择器及其VHDL描述例3-1中的逻辑描述是用WHEN_ELSE结构的并行语句表达的。它的含义是,当满足条件s=0,即s为低电平时,a输入端的信号传送至

7、y,否则(即s为高电平时)b 输入端的信号传送至y。也可以用其他的语句形式来描述以上相同的逻辑行为。例3-2中的功能描述语句都用了并行语句,是用布尔方程表达式来描述的。其中的AND、OR、NOT分别是与、或、非的逻辑操作符号。例3-3则给出了用顺序语句IF_THEN_ELSE表达的功能描述。 3.2 IEEE库预定义标准逻辑位与矢量数据类型 BIT 数据类型定义:TYPE BIT IS ( 0 , 1 ); -只有两种取值STD_LOGIC 标准逻辑位数据类型定义:TYPE STD_LOGIC IS ( U , X , 0, 1,Z, W, L, H, -); -有九种取值STD_LOGIC所

8、定义的九种数据的含义是:U表示未初始化的;X表示强未知的;0表强逻辑0;1表示强逻辑1;Z表示高阻态;W表示弱未知的;L表示弱逻辑0;H表示弱逻辑1;-表示忽略。 3.2 IEEE库预定义标准逻辑位与矢量数据类型STD_LOGIC_VECTOR标准逻辑矢量数据类型STD_LOGIC_VECTOR被定义为标准一维数组,数组中的每一个元素的数据类型都是标准逻辑位STD_LOGIC 使用STD_LOGIC_ VECTOR可以表达电路中并列的多通道端口或节点,或者总线BUS。在使用STD_LOGIC_ VECTOR中,必须注明其数组宽度(位宽),如:B:OUT STD_LOGIC_VECTOR (7

9、DOWNTO 0);-B是8位位宽的矢量或总线端口信号 3.2 IEEE库预定义标准逻辑位与矢量数据类型B的赋值方式如下:B = 01100010 ; -B(7)为0B (4 DOWNTO 1) = 1101 ; - B(4)为1 3.3设计库和标准程序包 使用库和程序包的一般定义表达式如下:LIBRARY ;USE .ALL ;STD_LOGIC与STD_LOGIC_VECTOR数据类型定义在被称为STD_LOGIC_1164的程序包中,此包由IEEE 定义,而且此程序包所在的程序库的库名被取名为IEEE。 3.3设计库和标准程序包由于IEEE库不属于VHDL 标准库,所以在使用其库中内容前

10、,必须事先给予声明。一般地,VHDL程序开始的两句语句可以是:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;3.3设计库和标准程序包LIBRARY是关键词,LIBRARY IEEE表示打开IEEE库;第二句的USE 和ALL是关键词,USE IEEE.STD_LOGIC_1164.ALL表示允许使用IEEE库中STD_LOGIC_1164程序包中的所有内容(.ALL),如类型定义、函数、过程、常量等。 3.4 ENTITY(实体)语句结构和语法含义 实体描述的是电路器件的端口构成和信号属性,其最简表达式一般为:ENTITY e_name ISPORT (

11、 p_name : port_m data_type;p_namei : port_mi data_type );END ENTITY e_name; 3.4.1实体名e_name是实体名,是标识符,具体取名由设计者自定。由于实体名实际上表达的是该设计电路的器件名,所以最好根据相应电路的功能来确定 3.4.2端口语句和端口信号名 描述电路的端口及其端口信号必须用端口语句PORT引导,并在语句结尾处加分号“;”。p_name是端口信号名, 3.4.3端口模式 IN:输入端口,定义的通道为单向只读模式。规定数据只能通过此端口被读入实体中。OUT:输出端口,定义的通道为单向输出模式。规定数据只能通过

12、此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。INOUT:定义的通道确定为输入输出双向端口。 3.4.4数据类型VHDL数据类型有INTEGER类型、BOOLEAN类型、STD_LOGIC类型和BIT类型等 3.5 ARCHITECTURE(结构体)语句结构和语法含义 结构体的一般表达下:ARCHITECTURE arch_name OF e_name IS 说明语句BEGIN(功能描述语句)END ARCHITECTURE arch_name ; 3.5 ARCHITECTURE(结构体)语句结构和语法含义arch_name是结构体名,是标识符。说明语句包括在结构体中,用以说明

13、和定义数据对象、数据类型、元件调用声明等。说明语句并非是必须的,功能描述语句则不同,结构体中必须给出相应的电路功能描述语句,可以是并行语句、顺序语句或它们的混合。 3.5.1 赋值符号和数据比较符号 表达式y= a表示输入端口 a的数据向输出端口 y传输;y= a也可以解释为信号a向信号y赋值。VHDL要求赋值符两边的信号的数据类型必须一致。3.5.1 赋值符号和数据比较符号条件判断语句WHEN_ELSE通过测定表达式s=0的比较结果,以确定由哪一端口向y赋值。条件语句WHEN_ELSE的判定依据是s=0输出的结果。表达式中的等号没有赋值的含义,只是一种数据比较符号。其输出结果的数据类型是布尔

14、数据类型BOOLEAN,此类型的取值分别是:true(真)和false(伪) 3.5.2 逻辑操作符3.5.3 条件语句 顺序语句描述2选1多路选译器电路行为,其结构描述部分为: ARCHITECTURE one OF mux21a IS BEGINPROCESS ( a, b , s ) BEGINIF s = 0 THENy = a ; ELSEy = b ;END IF;END PROCESS;END ARCHITECTURE one ;3.5.3 条件语句结构体中IF_THEN_ELSE是VHDL顺序语句,首先判断如果s 为低电平,则执行y=a语句,否则(当s为高电平),执行语句y=b

15、。由此可见VHDL的顺序语句同样能描述并行运行的组合电路。IF语句必须以语句END IF结束。 3.5.4进程语句和顺序语句 由PROCESS引导的语句称为进程语句。顺序语句IF_THEN_ELSE_ENDIF是放在由PROCESSEND PROCESS引导的语句中的。在VHDL中,所有合法的顺序描述语句都必须放在进程语句中。 3.5.4进程语句和顺序语句PROCESS语句结构的一般表达格式如下 进程标号: PROCESS ( 敏感信号参数表 ) IS进程说明部分 BEGIN 顺序描述语句END PROCESS 进程标号;3.5.4进程语句和顺序语句PROCESS(a,b,s)括号内容为进程的

16、敏感信号表,通常要求将进程中所有的输入信号都放在敏感信号表中。 PROCESS语句的执行依赖于敏感信号的变化(或称发生事件),当某一敏感信号(如a)从原来的1跳变到0,或者从原来的0跳变到1时,就将启动此进程语句 3.5.4进程语句和顺序语句在一个结构体中可以包含任意个进程语句结构,所有的进程语句都是并行语句,由任一进程PROCESS引导的语句(包含在其中的语句)结构属于顺序语句。 3.5.4进程语句和顺序语句3.5.5 IF语句 IF语句是VHDL设计中最重要和最常用的顺序语句,IF语句的语法结构有以下4种(1)IF 条件句 THEN 顺序语句 END IF;(2)IF 条件句 THEN 顺

17、序语句 ELSE 顺序语句 END IF; 3.5.5 IF语句(3)IF 条件句 THEN 顺序语句 IF 条件句 THEN END IF; END IF;(4)IF 条件句 THEN 顺序语句 ELSIF 条件句 THEN 顺序语句 ELSE 顺序语句 END IF;3.6 8-3线优先编码器VHDL设计 8-3线优先编码器真值表 3.6 8-3线优先编码器VHDL设计例3-5正是利用了IF语句中各条件向上相与这一功能,以简洁的描述完成了一个8-3优先编码器的设计3.7文件保存与文件名 3.8 1位二进制全加器的VHDL描述 通过一个全加器的设计流程,给出含有层次结构的VHDL程序,其中包

18、含两个重要的语句:元件调用声明语句和元件例化语句。 3.8 1位二进制全加器的VHDL描述图3-4 全加器f_adder电路图及其实体模块 3.8.1半加器的VHDL描述 3.8.1半加器的VHDL描述 3.8.1半加器的VHDL描述3.8.2 CASE语句 3.8.3 并置操作符&3.8.4全加器VHDL描述3.8.4全加器VHDL描述3.8.4全加器VHDL描述3.8.5元件例化语句 3.8.5元件例化语句3.9 硬件乘法器VHDL设计 3.9 硬件乘法器VHDL设计统计输入8位矢量中含1的个数的VHDL描述。其中新的语法现象是:变量及循环语句 将变量与信号作一比较 3.9.1变量VARI

19、ABLE 3.9.2信号SIGNAL 3.9. 3进程中的信号与变量赋值特点 信号SIGNAL变量VARIABLE基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元适用范围在整个结构体内都能适用只能在所定义的进程中使用行为特性在进程的最后才对信号赋值立即赋值3.9.4 FOR_LOOP循环语句 3.9.4 FOR_LOOP循环语句硬件乘法器的VHDL程序乘法器仿真图 3.10参数传递说明语句 3.11整数类型 3.12 VHDL操作符算术操作符3.12.1移位操作符3.12.1移位操作符3.12.2省略赋值操作符 3.12.3逻辑操作符 VHDL操作符优先级3.12.4关系操作符

20、3.12.5求和操作符 3.12.6求积操作符 3.12.7符号操作符 3.12.8混合操作符 3.13 数据类型转换函数3.14参数传递映射语句 3.14参数传递映射语句第4章 VHDL时序电路设计 4.1 基本时序元件的VHDL表述 【例4-1】D触发器的VHDL描述 4.1.1上升沿检测表达式和信号属性函数EVENT 例4-1中的条件语句的判断表达式:CLKEVENT AND CLK=1是用于检测时钟信号CLK的上升沿的,即如果检测到CLK的上升沿,此表达式将输出“true”。关键词EVENT是信号属性函数,用来获得信号行为信息的函数称为信号属性函数。VHDL通过以下表达式来测定某信号的

21、跳变情况: EVENT4.1.2不完整条件语句与时序电路4.1.3 VHDL实现时序电路的其他表述方法 4.2 计数器的VHDL设计 4.2.1 16进制加法计数器4.2.1 16进制加法计数器16进制加法计数器时序图4.2.2 10进制加法计数器 4.2.2 10进制加法计数器4.2.2 10进制加法计数器10进制计数器的时序仿真波形 4.3 移位寄存器的VHDL设计 4.3 移位寄存器的VHDL设计4.3 移位寄存器的VHDL设计 移位寄存器时序仿真波形 4.4、移位相加乘法器VHDL设计 4.4、移位相加乘法器VHDL设计4.4、移位相加乘法器VHDL设计4.4、移位相加乘法器VHDL设

22、计4.4、移位相加乘法器VHDL设计4.4、移位相加乘法器VHDL设计4.4、移位相加乘法器VHDL设计4.4、移位相加乘法器VHDL设计乘法操作时序仿真图 4.5属性描述与定义语句 4.5.1信号类属性 4.5.2数据区间类属性 4.5.3数值类属性 4.5.3数值类属性4.5.4数组属性 4.5.5用户定义属性 4.5.5用户定义属性第5章 FPGA开发环境Quartus应用基础5.1 Quartus II文本输入设计方法 5.1.1 编辑和输入设计文件 新建一个文件夹。 输入源程序。 5.1 Quartus II文本输入设计方法5.1.1 编辑和输入设计文件 新建一个文件夹。 输入源程序

23、。 文件存盘。 5.1 Quartus II文本输入设计方法5.1.2 创建工程 打开并建立新工程管理窗口。 将设计文件加入工程中。 5.1 Quartus II文本输入设计方法5.1.2 创建工程 选择目标芯片。 工具设置。 结束设置。 5.1 Quartus II文本输入设计方法5.1.3 全程编译前约束项目设置 选择FPGA目标芯片。 5.1 Quartus II文本输入设计方法5.1.3 全程编译前约束项目设置 选择配置器件的工作方式。 选择配置器件和编程方式。 选择目标器件引脚端口状态。 对双功能引脚进行设置。 5.1 Quartus II文本输入设计方法5.1.4 全程综合与编译

24、5.1 Quartus II文本输入设计方法5.1 Quartus II文本输入设计方法5.1.5 仿真测试 打开波形编辑器。 5.1 Quartus II文本输入设计方法5.1.5 仿真测试 设置仿真时间区域。 5.1 Quartus II文本输入设计方法5.1.5 仿真测试 波形文件存盘。 将工程MULT4B的端口信号节点选入波形编辑器中。 5.1.5 仿真测试 总线数据格式设置和参数设置。 5.1 Quartus II文本输入设计方法5.1 Quartus II文本输入设计方法5.1.5 仿真测试 编辑输入波形数据(输入激励信号)。 5.1 Quartus II文本输入设计方法5.1.5

25、 仿真测试 仿真器参数设置。 启动仿真器。 观察仿真结果。 5.1 Quartus II文本输入设计方法5.1.6 RTL图观察器应用 5.2 器件引脚锁定与程序下载 5.2.1 引脚锁定 5.2 器件引脚锁定与程序下载5.2.1 引脚锁定 5.2 器件引脚锁定与程序下载5.2.2 编译文件下载 (1)打开编程窗和配置文件。 5.2 器件引脚锁定与程序下载5.2.2 编译文件下载 (2)设置编程器。 (3)硬件测试。 5.2 器件引脚锁定与程序下载5.2 器件引脚锁定与程序下载5.2.3 JTAG间接编程模式 1. 将SOF文件转化为JTAG间接配置文件 5.2 器件引脚锁定与程序下载5.2.

26、3 JTAG间接编程模式 1. 将SOF文件转化为JTAG间接配置文件 5.2 器件引脚锁定与程序下载5.2.3 JTAG间接编程模式 2. 下载JTAG间接配置文件。 5.2 器件引脚锁定与程序下载5.2.4 USB-Blaster驱动程序安装方法 5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.4 嵌入式逻辑分析仪使用方法5.5 Quartus II原理图输入设计方法 1. 建立原理图文件工程和仿真 5.5 Quartus II原理图输入设计方

27、法1. 建立原理图文件工程和仿真 5.5 Quartus II原理图输入设计方法2. 将设计项目设置成可调用的元件 5.5 Quartus II原理图输入设计方法3. 设计全加器顶层文件 5.5 Quartus II原理图输入设计方法4. 对设计项目进行时序仿真 5. 硬件测试 实 验 7段数码显示译码器设计 实 验 4十六进制7段数码显示译码器设计 第6章 宏功能模块与IP应用LPM是Library of Parameterized Modules( 参数可设置模块库)的缩写,Altera提供的可参数化宏功能模块和LPM函数均基于Altera器件的结构做了优化设计。在许多实际情况中,必须利用

28、宏功能模块才可以使用一些Altera特定器件的硬件功能。例如各类片上存储器、DSP模块、LVDS驱动器、嵌入式PLL以及SERDES和DDIO 电路模块等。这些可以以图形或硬件描述语言模块形式方便调用的宏功能块,使得基于EDA技术的电子设计的效率和可靠性有了很大的提高。 6.1 LPM存储器设计接下页6.1.1 ROM模块设计1建立初始化数据文件 初始化数据文件即写入ROM中的波形数据文件。QuartusII能接受的LPM_ROM模块中的初始化数据文件的格式有两种:Memory Initialization File(.mif)格式Hexadecimal (Intel-Format)File(

29、.hex)格式。 实际应用中只要使用其中一种格式的文件即可。 (1)建立.mif格式文件 Quartus II mif文件编辑器 mif文件 2. LPM_ROM设计LPM_ROM设计首先利用 MegaWizard Plug-In Manager定制正弦信号数据ROM宏功能块,并将以上的波形数据加载于此ROM中。设计步骤如下: (1)打开MegaWizard Plug-In Manager初始对话框。(2)选择ROM控制线、地址线和数据线。 (3)选择指定路径上的文件sin2.mif。在图 6-8 的 “Do you want to.” 栏选择 “Yes,use this file for t

30、he memory content data” 项,并按Browse钮,选择指定路径上的文件sin2.mif。设计完成的LPM_ROM模块 6.1.2 RAM模块设计选择LPM_RAM宏功能块并指定存放路径和文件名 RAM模块的仿真波形 6.1.3 FIFO(先进先出存储器)模块设计首先新建目录,然后编辑FIFO模块 定制完成后,直接测试可进行以下操作退出定制界面,file-new,调入定制的文本文件(VHDL)-save as(这样可方便生成工程) -产生工程,以下过程与新建project相同 FIFO模块的仿真波形 6.2 DSP模块构建乘法器乘法器仿真波形 6.3 正弦信号发生器设计作为

31、LPM_ROM的应用实例,利用前面设计完成的LPM_ROM构成一个正弦信号发生器。正弦信号发生器的结构由四个部分组成:(1)计数器或地址发生器(这里选择7位)。(2)正弦信号数据ROM(7位地址线,8位数据线),含有128个8位数据(一个正弦周期)。(3)电路顶层设计模块。(4)8位D/A(硬件系统中可用DAC0832模数转换器件)。正弦信号发生器结构图 正弦信号发生器顶层模块 电路模块仿真波形 6.3.2使用嵌入式逻辑分析仪测试数据波形用嵌入式逻辑分析仪SignalTap II对FPGA内部信号进行分析测试。这里SignalTap II的参数设置为:采样深度是4K;采用时钟是信号源的时钟 C

32、LK;触发信号是计数时钟使能信号CLK_EN,触发模式是E=1上升沿触发采样。 SignalTap II 实时测试输出数据 SignalTap II测试正弦信号发生器波形 6.4在系统存储器数据读写编辑器应用利用Quartus II的在系统(In-System)读写编辑器,对于CycloneII/III等系列的FPGA,只要对使用的LPM_ROM或LPM_RAM模块适当设置,就能直接通过JTAG口读取或改写 FPGA内处于工作状态的存储器中的数据,读取过程不影响FPGA的正常工作。 6.4.1打开在系统存储单元编辑窗口6.4.2读取ROM中的波形数据 从FPGA中ROM读取的波形数据 6.4.

33、3 ROM写入数据ROM数据修改后SignalTap II的釆样波形 6.5 IP核NCO数控振荡器设计基于Quartus II和DSP Builder的MegaCore有多种,如FIR数字滤波器、FFT离散 信号快速傅里叶变换器、NCO数控振荡器(可作为实现DSP、数字调制解调器、FSK 的重要部件),PCI总线核、CSC色彩格式变换器核(用于电视与VGA色彩编码方式相 互变换)、Viterbi译码器(最大相似译码器,用于对卷积码的解码)IP核等。下面以数控振荡器NCO(Numerically Controlled Oscillators)核的设置使用为例,介绍利用Quartus II使用I

34、P核的方法。 IP核NCO选择界面 IP核NCO选择界面 NCO参数设置窗 NCO Implementation参数设置窗 6.5.4生成仿真文件6.5.5加入IP授权文件加入NCO授权文件和Quartus II授权文件。这里设授权文件位置路径:C:altera90license.DAT。有了授权文件,在Option对话框的Licensed AMPP/MegaCore functions 栏中可以看到FIR、PCI、NCO等IP的授权码,这样就可以编译出能够写Flash的SOF文件。也可以先转变为间接配置编程文件写入EPCS Flash。 6.5.6编译与功能检测 NCO32模块的测试电路 嵌

35、入式逻辑分析仪测试波形 6.6 LPM嵌入式锁相环设计 Altera 的FPGA器件CycloneII/III/IV及StraixII/III/IV等系列中含有高性能的嵌入式模拟锁相环,其性能远优于普通数字锁相环。这些锁相环PLL可以与一输入的时钟信号同步,并以其作为参考信号实现锁相,从而输出一至多个同步倍频或分频的片内时钟,以供逻辑系统应用。与直接来自外部的时钟相比,这种片内时钟可以减少时钟延时和时钟变形,减少片外干扰;还可以改善时钟的建立时间和保持时间,是系统稳定工作的保证。 6.6.1建立嵌入式锁相环元件设置锁相环输入参考时钟inclk0为20MHz选择控制信号 选择输出频率c0为0.0

36、0258MHz 嵌入式锁相环时钟正弦信号发生器电路 6.6.2锁相环仿真测试和硬件特性 锁相环仿真波形 部分Cyclone系列FPGA的下限至上限的频率范围: Cyclone系列FPGA的PLL:20MHz至270MHz;CycloneII系列FPGA的PLL:10MHz至400MHz;CycloneIII系列FPGA的PLL:2KHz至1300MHz;CycloneIV系列FPGA的PLL:2KHz至1000MHz。其中从CycloneIII系列FPGA起,嵌入式PLL的输出频域大幅度扩展,为高质量的数字系统设计提供了很好的支持。 6.7 8051单片机IP软核应用已经广为熟悉的89C51或

37、与其兼容的单片机基本配置有ROM和RAM。在FPGA中,调用8051软核并接上ROM和RAM后就成为一个完整的51单片机,本节以此为例介绍8051软核在FPGA中的设计与使用方法。 基本8051CPU核应用电路 LPM_RAM参数设置 LPM_ROM设置 单片机双向端口电路 设置FPGA的总线口输出为上拉 LPM_ROM初始化文件路径 6.8 LPM模块的文本调用 参数设置好的LPM宏功能模块可以在图形方式中调用,也可以采用文本方式调用,这就是宏功能模块进行例化。 6.8.1在Quartus II中对宏功能模块进行例化对宏功能模块例化的途径有多种,如可以在Block Editor中直接例化;在

38、HDL代码中例化(通过端口和参数定义例化,或使用MegaWizard Plug-In Manager对宏功能模块进 行参数化并建立包装文件),也可以通过界面,在Quartus II中对Altera宏功能模块和LPM 函数进行例化。6.8.2 LPM模块的VHDL文本方式调用可以使用MegaWizard Plug-In Manager建立宏功能模块或自定义宏功能模块变量。 再利用MegaWizard Plug-In Manager建立包含宏功能模块实例的VerilogHDL或VHDL 包装文件,然后,可以在设计中使用此文件。对于VHDL宏功能模块,MegaWizard Plug-In anage

39、r还建立组件申明文件。可以提供使用端口和参数定义,采用或调用任何其他模块或组件相类似方法调用函数,直接在VerilogHDL或 VHDL设计中对宏功能模块进行例化。在VHDL中,还需要使用组件申明。在VHDL 中例化方法如下: 1.打开LPM模块文本并测试定制好LPM模块后应将其设置成工程进行仿真测试,以确保其功能的可靠,并熟悉该元件的时序情况。对于LPM_ROM应当通过仿真了解数据文件是否己被加载进去。【例6-2】正弦波形数据ROM文件LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera

40、_mf_components.all; -使用宏功能库中的所有元件ENTITY sin2_rom ISPORT (address : IN STD_LOGIC_VECTOR (5 DOWNTO 0); inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END sin2_rom;ARCHITECTURE SYN OF sin2_rom ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT altsyncram -例化altsyncram元件,调用了LPM

41、模块altsyncram GENERIC ( -参数传递语句intended_device_family: STRING; -类属参量数据类型定义 width_a: NATURAL; widthad_a: NATURAL;numwords_a: NATURAL; operation_mode: STRING;outdata_reg_a: STRING; address_aclr_a: STRING;outdata_aclr_a: STRING; width_byteena_a: NATURAL;init_file: STRING; lpm_hint: STRING;lpm_type: STRI

42、NG);PORT (clock0: IN STD_LOGIC ; -altsyncram元件接口声明 address_a: IN STD_LOGIC_VECTOR (5 DOWNTO 0); q_a: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT;BEGINq Cyclone, -参数传递映射 width_a = 8, -数据线宽度8widthad_a = 6, -地址线宽度6numwords_a = 64, -数据数量64operation_mode = ROM, -LPM模式ROMoutdata_reg_a = UNREGISTERE

43、D, -输出无锁存address_aclr_a = NONE, -无异步地址清0outdata_aclr_a = NONE, -无输出锁存异步清0width_byteena_a = 1, - byteena_a输入口宽度1init_file = ./wave_edit/SIN2.mif, -ROM初始化数据文件lpm_hint = ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=NONE, lpm_type = altsyncram ) -LPM类型PORT MAP ( clock0 = inclock, address_a = address,q_a = sub_

44、wire0 ); END SYN; 2.编写VHDL顶层设计文件并仿真LIBRARY IEEE; -正弦信号发生器源文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SIN_LPM_ROM IS PORT ( CLK : IN STD_LOGIC; -信号源时钟 DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );-8位波形数据输出END;ARCHITECTURE BHV OF SIN_LPM_ROM ISCOMPONENT sin2_rom -调用波形数据存储器LPM_R

45、OM文件:data_rom.vhd声明 PORT(address : IN STD_LOGIC_VECTOR (6 DOWNTO 0);-7位地址信号 inclock : IN STD_LOGIC ;-地址锁存时钟 q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END COMPONENT; SIGNAL Q1 : STD_LOGIC_VECTOR (6 DOWNTO 0); -设定内部节点作为地址计数器 BEGINPROCESS(CLK ) -LPM_ROM地址发生器进程 BEGINIF CLKEVENT AND CLK = 1 THEN Q1Q1, q = DO

46、UT,inclock=CLK);-例化END; 正弦波数据仿真结果 第7章 状态机设计数字系统设计中的重要内容之一是有限状态机FSM(Finite State Machine)理论及其设计技术。状态机是实现高效率高可靠逻辑控制的重要途径。 7.1数字系统中的状态机应用特性7.2 有限状态机的设计 状态机在VHDL设计中可以不同表达方式实现不同的实用功能,然而它们都有相对固定的语句和程序表达方式,只要掌握了这些固定的语句表达部分,就能根据实际需要设计出各种不同风格和面向不同实用目的的VHDL状态机。 7.2.1数据类型定义语句自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYPE实

47、现的。TYPE语句的用法如下:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;或:TYPE 数据类型名 IS 数据类型定义;下面的例子说明了两种不同的定义方式:TYPE st1 IS ARRAY (0 TO 15) OF STD_LOGIC;TYPE week IS (sun, mon, tue, wed, thu, fri, sat);7.2.2有限状态机的设计VHDL状态机可以有多种形式,从状态机的信号输出方式上分有Mealy型和 Moore型两种状态机;从结构上分,有单进程状态机和多进程状态机;从状态表达方式上分有符号化状态机和确定状态编码的状态机;从编码方式上分有顺序编码

48、状态机、一位热码编码状态机或其他编码方式状态机。常用的状态机通常包含数据类型定义、时序进程、组合进程等部分。(1)数据类型定义: 数据类型定义一般放在结构体的ARCHITECTURE和BEGIN之间,例如:ARCHITECTURE . ISTYPE FSM_ST IS (s0,sl,s2,s3);SIGNAL current_state, next_state: FSM_ST;其中新定义的数据类型名是“FSM_ST”,其类型的元素分别为s0、sl、s2、s3,表达状态机的四个状态。定义为信号SIGNAL的状态变量是current_state和 next_state,它们的数据类型被定义为FSM

49、_ST。 (2)时序进程: 时序进程是使状态机运转和在时钟驱动下进行状态转换的进程。状态机是随外部时钟信号、以同步时序方式工作的。因此,状态机中必须包含一个对工作时钟信号敏感的进程。当时钟发生有效跳变时,状态机的状态才发生变化。状态机向下一状态(包括再次进入本状态)转换的实现仅仅取决于时钟信号的到来。 (2)时序进程: 一般地,时序进程不提供下一状态的具体状态取值,如s0、si、s2、S3中的某一状态值。当时钟的有效跳变到来时,时序进程只是机械地将代表次态的信号next_state中的内容送入现态的信号current_state中,而信号next_state中的内容完全由其他的进程根据实际情况

50、来决定,当然时序进程中也可以放置一些同步或异步清零或置位方面的控制信号。 (3)组合进程: 组合进程是根据当前状态的状态,或/和外部输入的控制信号,确定下一状态取值内容(如取next_state=s1等),并确定对外输出或对内部其他组合或时序进程输出控制信号的内容。这里的外部输入控制信号包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序进程的信号。组合进程又称为状态译码进程。状态机应用1:ADC0809采样控制器设计ADC0809器件引脚及时序图 ADC0809采样控制状态图 采样控制状态机电路结构图 ADC080采样控制VHDL程序library ieee;use ieee.st

51、d_logic_1164.all;entity adciny is port ( data_in : in std_logic_vector(7 downto 0); clock1:in std_logic; end_conv : in std_logic; lock1: out std_logic; add_lock: out std_logic; adc_start: out std_logic; output_en: out std_logic; add_sel : out std_logic; data_out : out std_logic_vector(7 downto 0);st

52、ate:out std_logic_vector(3 downto 0);end adciny;architecture behav of adciny istype states is (t0,t1,t2,t3,t4); signal next_state: states :=t0; signal regl :std_logic_vector(7 downto 0); signal data_lock :std_logic; begin add_sel = 1; data_out =regl;lock1 add_lock = 0;adc_start=0; output_en =0;data_

53、lock = 0; state=0000;next_state add_lock = 1;adc_start=1; output_en =0;data_lock = 0; state=0001;next_state add_lock = 0;adc_start=0; output_en =0;data_lock = 0; if (end_conv=1)then state=0011;next_state = t3; else state=0010;next_state add_lock=0;adc_start=0;data_lock=0;output_en=1; state=0100;next

54、_state add_lock=0;adc_start=0;data_lock=1;output_en=1;next_state state=0000;next_state = t0; end case;end process com;reg: process(clock1) begin if(clock1event and clock1=1) then s= next_state; end if; end process reg;reg: process(clock1) begin if(clock1event and clock1=1) then s= next_state; end if

55、; end process reg;采样控制状态机时序仿真图 2. 状态机应用2:序列检测器设计 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出C,否则输出F由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。 序列检测器 VHDL程序library ieee;use ieee.std_logic_1164.all;entity psdet is port(din,clk,RST : in std

56、_logic; c_f : out std_logic_vector(3 downto 0);end psdet;architecture behav of psdet is type st is (s0,s1,s2,s3,s4,s5,s6,s7,s8); signal cst,nst : st:=s0; signal d : std_logic_vector(7 downto 0);begin d if din = d(7) then nst=s1; else nst if din = d(6) then nst=s2; else nst if din = d(5) then nst=s3;

57、 else nst if din = d(4) then nst=s4; else nst if din = d(3) then nst=s5; else nst if din = d(2) then nst=s6; else nst if din = d(1) then nst=s7; else nst if din = d(0) then nst=s8; else nst if din = d(5) then nst=s3; else nst nst = s0; end case; end process;REG: process(clk,RST) begin if RST=1 then cst=S0; elsif clkevent and clk=1 then cst=nst; end if; end process

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论