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时序仿真与功能仿真时
2、序仿真与功能仿真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技术开发中的技术开发中的IP核核1.4 EDA技术开发中的技术开发中的IP核核第第2章章 可编程逻辑器件硬件基础可编程逻辑器件硬件基础 2.1 PLD可编程器件结构可编程器件结构 2.2 可编程逻辑器件分类可编程逻辑器件分类 2.3 PLD电路表示电路表示 2.3 PLD电路表示电路表示 2
3、.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.1 查找表逻辑结构查找表逻辑结构 2.6.2 Cyclone III2.6.2 Cyclo
4、ne III系列器件系列器件 的结构原理的结构原理 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
5、系列器件系列器件的结构的结构原理原理 2.7 CPLD/FPGA的编程与配置的编程与配置 目前常见的大规模可编程逻辑器件的编程工艺有三种:基于电可擦除存储单元的EEPROM或Flash技术。CPLD般使用此技术进行编程。基于SRAM查找表的编程单元。对该类器件,编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。因此该类器件的编程一般称为配置。大部分FPGA采用该种编程工艺。基于一次性可编程反熔丝编程单元。Actel的部分FPGA采用这种结构。2.7 CPLD/FPGA的编程与配置的编程与配置(1)基于电可擦除存储单元的)基于电可擦除存储单元的
6、EEPROM或或Flash技术。技术。(2)基于)基于SRAM查找表的编程单元。查找表的编程单元。(3)基于一次性可编程反熔丝编程单元。)基于一次性可编程反熔丝编程单元。2.7.1 CPLD在系统编程在系统编程JTAG边界扫描边界扫描 2.7.1 CPLD在系统编程在系统编程2.7.2 FPGA的配置方式的配置方式 用用JTAG进行进行FPGA的配置的配置 2.7 CPLD/FPGA的编程与配置的编程与配置 FPGA专用配置器件专用配置器件 2.7 CPLD/FPGA的编程与配置的编程与配置 FPGA配置时序配置时序2.7 CPLD/FPGA的编程与配置的编程与配置 使用单片机配置使用单片机配
7、置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结尾的语句部分,称为实体实体。VHDL的实体描述了电路器件的外部情况及各信号端口的基本性质,如信号流动的方向,流动在其上的信号结构方式和数据类型等。
8、图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输入端的信号传送至y,否则(即s为高电平时)b 输入端的信号传送至y。也可以用其他的语句形式
9、来描述以上相同的逻辑行为。例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所定义的九种数据的含义是:U表示未初始化的;X表示强未知的;0表强逻辑0;
10、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 DOWNTO 0);-B是8位位宽的矢量
11、或总线端口信号 3.2 IEEE库预定义库预定义标准逻辑位与标准逻辑位与矢量数据类型矢量数据类型 B的赋值方式如下:B=01100010;-B(7)为0 B(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 标准库,所以在使用其库中
12、内容前,必须事先给予声明。一般地,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(实体实体)语句结构和语句结构和语法含义语法含义 实体描述的是电路器件的端口构成和信号属性,其最简表达式一般为:E
13、NTITY e_name IS PORT(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:输入端口,定义的通道为单向只读模式。规定数据只能通过此端口被读入实体中
14、。OUT:输出端口,定义的通道为单向输出模式。规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。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(结
15、构(结构体体)语语句结构和语法含义句结构和语法含义 arch_name是结构体名,是标识符。说明语句包括在结构体中,用以说明和定义数据对象、数据类型、元件调用声明等。说明语句并非是必须的,功能描述语句则不同,结构体中必须给出相应的电路功能描述语句,可以是并行语句、顺序语句或它们的混合。3.5.1 赋值符号和数据比较符号赋值符号和数据比较符号 表达式y=a表示输入端口 a的数据向输出端口 y传输;y=a也可以解释为信号a向信号y赋值。VHDL要求赋值符两边的信号的数据类型必须一致。3.5.1 赋值符号和数据比较符号赋值符号和数据比较符号 条件判断语句WHEN_ELSE通过测定表达式s=0的比较结
16、果,以确定由哪一端口向y赋值。条件语句WHEN_ELSE的判定依据是s=0输出的结果。表达式中的等号没有赋值等号没有赋值的含义,只是一种数据比较符号。其输出结果的数据类型是布尔数据类型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 on
17、e;3.5.3 条件语句条件语句 结构体中IF_THEN_ELSE是VHDL顺序语句,首先判断如果s 为低电平,则执行y=a语句,否则(当s为高电平),执行语句y=b。由此可见VHDL的顺序语句同样能描述并行运行的组合电路。IF语句必须以语句END IF结束。3.5.4进程语句和顺序语句进程语句和顺序语句 由PROCESS引导的语句称为进程语句。顺序语句IF_THEN_ELSE_ENDIF是放在由PROCESSEND PROCESS引导的语句中的。在VHDL中,所有合法的顺序描述语句都必须放在进程语句中。3.5.4进程语句和顺序语句进程语句和顺序语句 PROCESS语句结构的一般表达格式如下
18、进程标号:PROCESS (敏感信号参数表)IS 进程说明部分 BEGIN 顺序描述语句 END PROCESS 进程标号;3.5.4进程语句和顺序语句进程语句和顺序语句 PROCESS(a,b,s)括号内容为进程的敏感信号表,通常要求将进程中所有的输入信号都放在敏感信号表中。PROCESS语句的执行依赖于敏感信号的变化(或称发生事件),当某一敏感信号(如a)从原来的1跳变到0,或者从原来的0跳变到1时,就将启动此进程语句 3.5.4进程语句和顺序语句进程语句和顺序语句 在一个结构体中可以包含任意个进程语句结构,所有的进程语句都是并行语句,由任一进程PROCESS引导的语句(包含在其中的语句)
19、结构属于顺序语句。3.5.4进程语句和顺序语句进程语句和顺序语句3.5.5 IF语句语句 IF语句是VHDL设计中最重要和最常用的顺序语句,IF语句的语法结构有以下4种(1)IF 条件句 THEN 顺序语句 END IF;(2)IF 条件句 THEN 顺序语句 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线优先编码器
20、真值表 3.6 8-3线优先编码器线优先编码器VHDL设计设计例3-5正是利用了IF语句中各条件向上相与这一功能,以简洁的描述完成了一个8-3优先编码器的设计3.7文件文件保存与文件名保存与文件名 3.8 1位二进制全加器的位二进制全加器的VHDL描述描述 通过一个全加器的设计流程,给出含有层次结构的VHDL程序,其中包含两个重要的语句:元件调用声明语句和元件例化语句。3.8 1位二进制全加器的位二进制全加器的VHDL描述描述图3-4 全加器f_adder电路图及其实体模块 3.8.1半加器的半加器的VHDL描述描述 3.8.1半加器的半加器的VHDL描述描述 3.8.1半加器的半加器的VHD
21、L描述描述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变量变量VARIABLE 3.9.2信号信号SIGNAL 3.9.3进程中的信号与变量赋值进程中的信号与
22、变量赋值特特点点 信号信号SIGNAL变量变量VARIABLE基本用法基本用法用于作为电路中的信号连线用于作为电路中的信号连线用于作为进程中局部数据存储单元用于作为进程中局部数据存储单元适用范围适用范围在整个结构体内都能适用在整个结构体内都能适用只能在所定义的进程中使用只能在所定义的进程中使用行为特性行为特性在进程的最后才对信号赋值在进程的最后才对信号赋值立即赋值立即赋值3.9.4 FOR_LOOP循环语句循环语句 3.9.4 FOR_LOOP循环语句循环语句硬件乘法器的VHDL程序乘法器仿真图 3.10参数传递说明语句参数传递说明语句 3.11整数类型整数类型 3.12 VHDL操作符操作符
23、 算术操作符算术操作符3.12.1移位操作符移位操作符3.12.1移位操作符移位操作符3.12.2省略赋值操作符省略赋值操作符 3.12.3逻辑操作符逻辑操作符 VHDL操作符优先级操作符优先级3.12.4关系操作符关系操作符 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】
24、D触发器的触发器的VHDL描述描述 4.1.1上升沿检测表达式和信号上升沿检测表达式和信号属性函数属性函数EVENT 例4-1中的条件语句的判断表达式:nCLKEVENT AND CLK=1是用于检测时钟信号CLK的上升沿的,即如果检测到CLK的上升沿,此表达式将输出“true”。关键词EVENT是信号属性函数,用来获得信号行为信息的函数称为信号属性函数。nVHDL通过以下表达式来测定某信号的跳变情况:EVENT4.1.2不完整条件语句与时序电路不完整条件语句与时序电路4.1.3 VHDL实现时序电路的其他实现时序电路的其他表述方法表述方法 4.2 计数器的计数器的VHDL设计设计 4.2.1
25、 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、移位相加乘法器、移位相加乘法器V
26、HDL设计设计4.4、移位相加乘法器、移位相加乘法器VHDL设计设计4.4、移位相加乘法器、移位相加乘法器VHDL设计设计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用户定义
27、属性用户定义属性 4.5.5用户定义属性用户定义属性第第5章章 FPGA开发环境开发环境Quartus应用基础应用基础5.1 Quartus II文本输入设计方法文本输入设计方法 5.1.1 编辑和输入设计文件编辑和输入设计文件 新建一个文件夹。新建一个文件夹。输入源程序。输入源程序。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.1 编辑和输入设计文件编辑和输入设计文件 新建一个文件夹。新建一个文件夹。输入源程序。输入源程序。文件存盘。文件存盘。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.2 创建工程创建工程 打开并建立新工程管理窗口。打开并建立新
28、工程管理窗口。将设计文件加入工程中。将设计文件加入工程中。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.2 创建工程创建工程 选择目标芯片。选择目标芯片。工具设置。工具设置。结束设置。结束设置。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.3 全程编译前约束项目设置全程编译前约束项目设置 选择选择FPGA目标芯片。目标芯片。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.3 全程编译前约束项目设置全程编译前约束项目设置 选择配置器件的工作方式。选择配置器件的工作方式。选择配置器件和编程方式。选择配置器件和编程方式。选择目标器件引脚
29、端口状态。选择目标器件引脚端口状态。对双功能引脚进行设置。对双功能引脚进行设置。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.4 全程综合与编译全程综合与编译 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 仿真测试仿真测试 波形文件存盘。波形文
30、件存盘。将工程将工程MULT4B的端口信号节点选入波形编辑器中。的端口信号节点选入波形编辑器中。5.1.5 仿真测试仿真测试 总线数据格式设置和参数设置。总线数据格式设置和参数设置。5.1 Quartus II文本输入设计方法文本输入设计方法5.1 Quartus II文本输入设计方法文本输入设计方法5.1.5 仿真测试仿真测试 编辑输入波形数据编辑输入波形数据(输入激励信号输入激励信号)。5.1 Quartus II文本输入设计方法文本输入设计方法5.1.5 仿真测试仿真测试 仿真器参数设置。仿真器参数设置。启动仿真器。启动仿真器。观察仿真结果。观察仿真结果。5.1 Quartus II文本
31、输入设计方法文本输入设计方法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 器件器件引脚引
32、脚锁定与程序下载锁定与程序下载5.2.3 JTAG间接编程模式间接编程模式 1.将将SOF文件转化为文件转化为JTAG间接配置文件间接配置文件 5.2 器件器件引脚引脚锁定与程序下载锁定与程序下载5.2.3 JTAG间接编程模式间接编程模式 1.将将SOF文件转化为文件转化为JTAG间接配置文件间接配置文件 5.2 器件器件引脚引脚锁定与程序下载锁定与程序下载5.2.3 JTAG间接编程模式间接编程模式 2.下载下载JTAG间接配置文件。间接配置文件。5.2 器件器件引脚引脚锁定与程序下载锁定与程序下载5.2.4 USB-Blaster驱动程序安装方法驱动程序安装方法 5.4 嵌入式嵌入式逻逻
33、辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.4 嵌入式嵌入式逻逻辑分析仪使用方法辑分析仪使用方法5.5 Quartus II原理图输入设计方法原理图输入设计方法 1.建立原理图文件工程和仿真建立原理图文件工程和仿真 5.5 Quartus II原理图输入设计方法原理图输入设计方法1.建立原理图文件工程和仿真建立原理图文件工程和
34、仿真 5.5 Quartus II原理图输入设计方法原理图输入设计方法2.将设计项目设置成可调用的元件将设计项目设置成可调用的元件 5.5 Quartus II原理图输入设计方法原理图输入设计方法3.设计全加器顶层文件设计全加器顶层文件 5.5 Quartus II原理图输入设计方法原理图输入设计方法4.对设计项目进行时序仿真对设计项目进行时序仿真 5.硬件测试硬件测试 实实 验验 7段数码显示译码器设计段数码显示译码器设计 实实 验验 4十六进制十六进制7段数码显示译码器设计段数码显示译码器设计 第第6章章 宏功能模块与宏功能模块与IP应用应用LPM是Library of Parameter
35、ized Modules(参数可设置模块库)的缩写,Altera提供的可参数化宏功能模块和LPM函数均基于Altera器件的结构做了优化设计。在许多实际情况中,必须利用宏功能模块才可以使用一些Altera特定器件的硬件功能。例如各类片上存储器、DSP模块、LVDS驱动器、嵌入式PLL以及SERDES和DDIO 电路模块等。这些可以以图形或硬件描述语言模块形式方便调用的宏功能块,使得基于EDA技术的电子设计的效率和可靠性有了很大的提高。6.1 LPM存储器设计存储器设计接下页6.1.1 ROM模块设计模块设计1建立初始化数据文件建立初始化数据文件 初始化数据文件即写入初始化数据文件即写入ROM中
36、的波形数据文件。中的波形数据文件。QuartusII能接受的能接受的LPM_ROM模块中的初始化数据文件的格式有两种:模块中的初始化数据文件的格式有两种:nMemory Initialization File(.mif)格式)格式nHexadecimal(Intel-Format)File(.hex)格式。)格式。实际应用中只要使用其中一种格式的文件即可。实际应用中只要使用其中一种格式的文件即可。(1)建立.mif格式文件 Quartus II mif文件编辑器 mif文件 2.LPM_ROM设计 LPM_ROM设计首先利用 MegaWizard Plug-In Manager定制正弦信号数据
37、ROM宏功能块,并将以上的波形数据加载于此ROM中。设计步骤如下:(1)打开MegaWizard Plug-In Manager初始对话框。(2)选择ROM控制线、地址线和数据线。(3)选择指定路径上的文件sin2.mif。在图 6-8 的“Do you want to.”栏选择“Yes,use this file for the memory content data”项,并按Browse钮,选择指定路径上的文件sin2.mif。设计完成的LPM_ROM模块 6.1.2 RAM模块设计模块设计选择LPM_RAM宏功能块并指定存放路径和文件名 RAM模块的仿真波形 6.1.3 FIFO(先进先
38、出存储器先进先出存储器)模块模块设计设计首先新建目录,然后编辑FIFO模块 定制完成后,直接测试可进行以下操作 退出定制界面,file-new,调入定制的文本文件(VHDL)-save as(这样可方便生成工程)-产生工程,以下过程与新建project相同 FIFO模块的仿真波形 6.2 DSP模块构建乘法器模块构建乘法器乘法器仿真波形 6.3 正弦信号发生器设计正弦信号发生器设计作为LPM_ROM的应用实例,利用前面设计完成的LPM_ROM构成一个正弦信号发生器。正弦信号发生器的结构由四个部分组成:(1)计数器或地址发生器(这里选择7位)。(2)正弦信号数据ROM(7位地址线,8位数据线),
39、含有128个8位数据(一个正弦周期)。(3)电路顶层设计模块。(4)8位D/A(硬件系统中可用DAC0832模数转换器件)。正弦信号发生器结构图 正弦信号发生器顶层模块 up counterclockclk_enaclrq6.0coutCOUNTE7inst8 bits128 wordsBlock type:AUTOaddress6.0inclockq7.0sin2_rominst2VCCCLKINPUTVCCCLK_ENINPUTVCCRSTINPUTCOUTOUTPUTQ7.0OUTPUTADDR6.0OUTPUTCLKOUTOUTPUT电路模块仿真波形 6.3.2使用嵌入式逻辑分析仪测试
40、使用嵌入式逻辑分析仪测试数据波形数据波形 用嵌入式逻辑分析仪SignalTap II对FPGA内部信号进行分析测试。这里SignalTap II的参数设置为:采样深度是4K;采用时钟是信号源的时钟 CLK;触发信号是计数时钟使能信号CLK_EN,触发模式是E=1上升沿触发采样。SignalTap II 实时测试输出数据 SignalTap II测试正弦信号发生器波形 6.4在系统存储器数据读写编辑器在系统存储器数据读写编辑器应用应用 利用Quartus II的在系统(In-System)读写编辑器,对于CycloneII/III等系列的FPGA,只要对使用的LPM_ROM或LPM_RAM模块适
41、当设置,就能直接通过JTAG口读取或改写 FPGA内处于工作状态的存储器中的数据,读取过程不影响FPGA的正常工作。6.4.1打开在系统存储单元编辑窗打开在系统存储单元编辑窗口口6.4.2读取读取ROM中的波形数据中的波形数据 从FPGA中ROM读取的波形数据 6.4.3 ROM写入数据写入数据ROM数据修改后SignalTap II的釆样波形 6.5 IP核核NCO数控振荡器设计数控振荡器设计 基于Quartus II和DSP Builder的MegaCore有多种,如FIR数字滤波器、FFT离散 信号快速傅里叶变换器、NCO数控振荡器(可作为实现DSP、数字调制解调器、FSK 的重要部件)
42、,PCI总线核、CSC色彩格式变换器核(用于电视与VGA色彩编码方式相 互变换)、Viterbi译码器(最大相似译码器,用于对卷积码的解码)IP核等。下面以数控振荡器NCO(Numerically Controlled Oscillators)核的设置使用为例,介绍利用Quartus II使用IP核的方法。IP核NCO选择界面 IP核NCO选择界面 NCO参数设置窗 NCO Implementation参数设置窗 6.5.4生成仿真文件生成仿真文件6.5.5加入加入IP授权文件授权文件 加入NCO授权文件和Quartus II授权文件。这里设授权文件位置路径:C:altera90license
43、.DAT。有了授权文件,在Option对话框的Licensed AMPP/MegaCore functions 栏中可以看到FIR、PCI、NCO等IP的授权码,这样就可以编译出能够写Flash的SOF文件。也可以先转变为间接配置编程文件写入EPCS Flash。6.5.6编译与功能检测编译与功能检测 phi_inc_i23.0clkreset_nclkenphase_mod_i9.0freq_mod_i9.0fsin_o9.0fcos_o9.0out_validMNCO32inst010C0inst129110C32inst2119304524C16inst3VCCCLKINPUTVCCRS
44、TINPUTVCCENINPUTFS9.0OUTPUTFC9.0OUTPUT NCO32模块的测试电路 嵌入式逻辑分析仪测试波形 6.6 LPM嵌入式锁相环设计嵌入式锁相环设计 Altera 的FPGA器件CycloneII/III/IV及StraixII/III/IV等系列中含有高性能的嵌入式模拟锁相环,其性能远优于普通数字锁相环。这些锁相环PLL可以与一输入的时钟信号同步,并以其作为参考信号实现锁相,从而输出一至多个同步倍频或分频的片内时钟,以供逻辑系统应用。与直接来自外部的时钟相比,这种片内时钟可以减少时钟延时和时钟变形,减少片外干扰;还可以改善时钟的建立时间和保持时间,是系统稳定工作的
45、保证。6.6.1建立嵌入式锁相环元件建立嵌入式锁相环元件设置锁相环输入参考时钟inclk0为20MHz选择控制信号 选择输出频率c0为0.00258MHz 嵌入式锁相环时钟正弦信号发生器电路 VCCCLKINPUTVCCCLK_ENINPUTVCCRSTINPUTCOUTOUTPUTQ7.0OUTPUTADDR6.0OUTPUTup counterclockclk_enaclrq6.0coutCOUNTE7inst8 bits128 wordsBlock type:AUTOaddress6.0inclockq7.0sin2_rominst2Cyclone IIIinclk0 frequency
46、:20.000 MHzOperation Mode:NormalClk RatioPh(dg)DC(%)c0129/10000000.0050.00inclk0c0PLL20inst1CLKOUTOUTPUT6.6.2锁相环仿真测试和硬件特性锁相环仿真测试和硬件特性 锁相环仿真波形 部分Cyclone系列FPGA的下限至上限的频率范围:Cyclone系列FPGA的PLL:20MHz至270MHz;CycloneII系列FPGA的PLL:10MHz至400MHz;CycloneIII系列FPGA的PLL:2KHz至1300MHz;CycloneIV系列FPGA的PLL:2KHz至1000MHz。
47、其中从CycloneIII系列FPGA起,嵌入式PLL的输出频域大幅度扩展,为高质量的数字系统设计提供了很好的支持。6.7 8051单片机单片机IP软核应用软核应用 已经广为熟悉的89C51或与其兼容的单片机基本配置有ROM和RAM。在FPGA中,调用8051软核并接上ROM和RAM后就成为一个完整的51单片机,本节以此为例介绍8051软核在FPGA中的设计与使用方法。基本8051CPU核应用电路 VCCCLKINPUTVCCRSTINPUTVCCMTINPUTVCCNOINPUTPOE7.0OUTPUTCOUTOUTPUTP07.0OUTPUTP27.0OUTPUTVCCdata7.0wre
48、naddress7.0inclockq7.0ram256inst6NOTinst3MTNOX1X2RESETNEANESFRALEIPSEIP0I7.0P1I7.0P2I7.0P3I7.0RAMdaO7.0ROMdaO7.0DOUTNMOENMWEDLMALEPSENALENFWEFOESFRWESFROEIDLEXOFFP0O7.0P1O7.0P2O7.0P3O7.0P0E7.0P1E7.0P2E7.0P3E7.0RAMadr7.0RAMdaI7.0ROMadr15.0POE7.0CPU8051V1instaddress11.0inclockq7.0rom4kbinst5WENROMa15.
49、0ROMa11.0单片机片内4KB ROM单片机片内256B RAM锁相环89C51单片机核WENVCCP0I7.0INPUTVCCP3I7.0INPUTCycloneinclk0 frequency:20.000 MHzOperation Mode:NormalClk Ratio Ph(dg)DC(%)c09/20.0050.00inclk0c0pll50inst17LPM_RAM参数设置 LPM_ROM设置 单片机双向端口电路 NOTinstTRIinst1WIREinst2P1I7.0P1E7.0P1O7.0VCCP17.0BIDIR设置FPGA的总线口输出为上拉 LPM_ROM初始化文
50、件路径 6.8 LPM模块的文本调用模块的文本调用 参数设置好的LPM宏功能模块可以在图形方式中调用,也可以采用文本方式调用,这就是宏功能模块进行例化。6.8.1在在Quartus II中对宏功能模块中对宏功能模块进行例化进行例化 对宏功能模块例化的途径有多种,如可以在Block Editor中直接例化;在HDL代码中例化(通过端口和参数定义例化,或使用MegaWizard Plug-In Manager对宏功能模块进 行参数化并建立包装文件),也可以通过界面,在Quartus II中对Altera宏功能模块和LPM 函数进行例化。6.8.2 LPM模块的模块的VHDL文本方式文本方式调用调用