第2 章 QUARTUS II 使用教程.............................................................................................. 2 2.1 Quartus II 的安装............................................................................................................... 2 2.1.1 安装Quartus II.......................................................................................................... 2 2.1.2 安装License.............................................................................................................. 2 2.2 FIFO 设计实例.................................................................................................................. 2 2.2.1 新建工程................................................................................................................... 3 2.2.2 创建设计文件........................................................................................................... 3 2.2.3 编译过
程................................................................................................................... 6 2.2.4 编译报告与延时分析............................................................................................... 6 2.2.5 运行仿真................................................................................................................... 7 2.3 设计流程.......................................................................................................................... 10 2.3.1 设计输入................................................................................................................. 10 2.3.2 编译......................................................................................................................... 17 2.3.3 延时分析................................................................................................................. 19 2.3.4 仿
真......................................................................................................................... 20 2.4 系统级设计...................................................................................................................... 20 2.4.1 SOPC 设计............................................................................................................... 20 2.4.1 DSP 设计.................................................................................................................. 21 2.5 设计实例.......................................................................................................................... 22 2.5.1 UART 控制器........................................................................................................... 22 2.5.2 I 2 C 总线控制器........................................................................................................ 24 2.5.3 USB2.0 控制器........................................................................................................ 26 2 第2 章 QUARTUS II 使用教程 本章以Quartus II 4.1 版本为例。所选实例使用的CPLD/FPGA 器件为Cyclone 系列 CP1C20F400C7。 2.1 Quartus II 的安装 Quartus II 的安装需要较高的系统配置,建议256M以上内存,奔腾II 以上的CPU; 配置过低将使得编译过程十分缓慢。 2.1.1 安
装Quartus II 安装QuartusII 之前建议浏览一下 安装文件夹下的帮助文件及注意 事项。 运行Install.exe 选 择 Install Quartus II Software,以后全部“Next” Finish 结束 2.1.2 安装License 第一次运行 Quartus II 会要求授 权码验证,选择菜单 Tools/License Setup,弹出图 2.1 所示对话框,点击 “…”按钮选择License.dat 文件即可。 如果不安装License,也可以试用,但 不能使用仿真等功能。 2.2 FIFO 设计实例 本节以 FIFO(First-In-First-Out 先进先出)缓冲存储器为例,介绍一下 Quarstus II 的软件设计基本流程。 图2.2 新建项目 3 2.2.1 新建工程 选择菜单File\\ New Project Wizard,弹出新建项目向导对话框(如图2.2)。对话框中 第一项是项目保存的位置(路径),第二项是项目名称,第三项是项目顶层实体(entity) 名。建议工程名称和顶层实体名一样,需要注意的是,实体名必须和设计中实际的顶层 实体名称一致。本例中,项目所有的 文件都保存到 E:/qdesign/Fifo 文件夹 下。 点击Next,询问该目录不存在是 否要创建,选择是。如图2.3。 图2.3 创建工作目录 紧接着的两页不用设置,在第四 页,选择所用的PLD(FPGA)系列, 这里选 Cyclone,如图 2.4。在图 2.5 中,选择器件为CP1C20F400C7。 点击Next,出现新建项目的设置 信息,检查无误后点击 Finish 按钮结 束。 2.2.2 创建设计文件 点击工具栏中“New”按钮(或 者选择菜单 File\\New),选择 VHDL File。如图2.6。 图2.4 器件系列 输入Fifo 的VHDL 代码。如下: -- a first-in first out memory, uses a synchronising clock -- generics allow fifos of different sizes to be instantiated library IEEE; use IEEE.Std_logic_1164.all; entity FIFO is generic(m, n : Positive := 8); --m is fifo depth, n is fifo width 图2.5 器件名称 4 port(RESET, WRREQ, RDREQ, CLOCK : in Std_logic; DATAIN : in
Std_logic_vector((n-1) downto 0); DATAOUT : out Std_logic_vector((n-1) downto 0); FULL, EMPTY : inout Std_logic); end FIFO; architecture V2 of FIFO is type Fifo_array is array(0 to (m-1)) of Bit_vector((n-1) downto 0); signal Fifo_memory : Fifo_array; signal Wraddr, Rdaddr, Offset : Natural range 0 to (m-1); signal Rdpulse, Wrpulse, Q1, Q2, Q3, Q4 : Std_logic; signal Databuffer : Bit_vector((n-1) downto 0); 图2.6 设
计输入文件 begin --pulse synchronisers for WRREQ and RDREQ --modified for Synplify to a process sync_ffs : process begin wait until rising_edge(CLOCK); Q1 <= WRREQ; Q2 <= Q1; Q3 <= RDREQ; Q4 <= Q3; end process; --concurrent logic to generate pulses Wrpulse <= Q2 and not(Q1); Rdpulse <= Q4 and not(Q3); Fifo_read : process begin 5 wait until rising_edge(CLOCK); if RESET = '1' then Rdaddr <= 0; Databuffer <= (others => '0'); elsif (Rdpulse = '1' and EMPTY = '0') then Databuffer <= Fifo_memory(Rdaddr); Rdaddr <= (Rdaddr + 1) mod m; end if; end process; Fifo_write : process begin wait until rising_edge(CLOCK); if RESET = '1' then Wraddr <= 0; elsif (Wrpulse = '1' and FULL = '0') then Fifo_memory(Wraddr) <= To_Bitvector(DATAIN); Wraddr <= (Wraddr + 1) mod m; end if; end process; Offset <= (Wraddr - Rdaddr) when (Wraddr > Rdaddr) else (m - (Rdaddr - Wraddr)) when (Rdaddr > Wraddr) else 0; EMPTY <= '1' when (Offset = 0) else '0'; FULL <= '1' when (Offset = (m-1)) else '0'; DATAOUT <= To_Stdlogicvector(Databuffer) when RDREQ = '0' else (others => 'Z'); end V2; 对上述程序做以下几点说明:
RESET 信号用于复位,仿真或运行开始时应使 RESET 保持至少一个时钟周期 高电平(使CLOCK 上升沿可以检测到RESET 信号)。
RDREQ 为请求读信号,在数据缓冲区非空
情况下(EMPTY=0),RDREQ 的下 降沿会发出读操作请求(Rdpulse = 1),在下一个CLOCK 上升沿到来之后会引 6 发读操作,DATAOUT 数据线上会出现数据。
WRREQ
为请 求写信号,在 数据缓冲区非 满 情 况 下 (FULL=0), WRREQ 的下 降沿会发出写 操 作 请 求 ( Wrpulse = 1),在下一个 CLOCK 上升 沿到来之后会 引发写操作,将 图2.7 编译后的界面 DATAIN 数据线上出现的数据写入缓冲区。 2.2.3 编译过程 保存此VHDL 文件,点击工具栏中“Start Compilation”(或者选择菜单Processing\\ Start Compilation)进行编译。如图2.7。 编译完毕会弹出对话框显示0 个error,但有几个warning,可以暂时不用理会它。 2.2.4 编译报告与延时分析 编译完后会产生 一个编译报告栏,见 图 2.8 。图中 Flow Summary 页显示此设 计共占用的逻辑单元 LE(logic
elements) 为 116 个(2%)。LE 是最小的逻辑单元, 每个 LE 含有四个查 找表(LUT,四输入 变量的快速逻辑产生 器)、一个带有同步使 能的可编程触发器、 一个进位链和一个级联 图2.8 编译报告 7 链。另外,占用引脚22 个,存储单元和PLL(phase-locked loop 锁相环)都为0。 在图 2.8 编译报 告中,展开左边一栏 中Timing Analyer 项, 选择Timing Analyzer Summary,查看延时 分析总结(如图2.9)。 该总结显示最差情况 的时延,其中包括tsu (输入建立时间)、th (输入保持时间)、tco (时钟到输出的时 间)、tpd(引脚到引脚 的延时)等等。 图2.9 延时分析报告 在图 2.8 编译报告中,展开左边一栏中 Timing Analyer 项,选择 Timing Analyzer Summary,查看延时分析总结(如图 2.9)。该总结显示最差情况的时延, 其中包括tsu(输入建立时间)、th(输 入保持时间)、tco(时钟到输出的时 间)、tpd(引脚到引脚的延时)等等。 可以在 Assignments 菜单中选择 Timing Setting 命令,对项目的延时要 求进行设定。 2.2.5 运行仿真 点击工具栏中“New”按钮新建 文件,选择Other Files 栏中Vector 图2.10 新建向量波形文件 WaveForm File。如图 2.10 所示。保存此新 建 的 波 形 文 件 为 fifo.vwf。 在图 2.11 所示文 件中的左栏位置点击 右键,选择Insert Node or Bus。 出现图 2.12 所示的对话框,点击 Node Finder 按钮。 图2.11 打开插入节点对话框 8 在出现的Node Finder 对话框中,选 择Filter 为“Pins:all”,点击List 按钮, 左栏出现列表,再点击“>>”按钮,将 左栏中所有的节点选入到右栏。点击OK 关闭对话框。 现在要给定输入信号,首先是时钟 信号,在图2.14 中,选定CLOCK 信号, 点击 按钮,出现如图 2.15 所示的对 话框,保持默认设置,确定后出现CLOCK 信号。 图2.12 插入节点 图2.13 载入所有节点 设定DATAIN 信号,选择 DATAIN,点击 按钮,保持 默认设置点击 OK 按钮, DATAIN会出现递增的计数信 号。 设定RDREQ 信号,选定 RDREQ,点击 按钮,修改 Count 参数为40ns,如图2.16。 设定RDREQ 信号,选定 WRREQ,点击 按钮,修改 Count 参数为20ns。 图2.14 设置输入波形信号 9 设定 RDREQ 信号,选定 RESET,点击 按钮,在 RESET 开始处设定 5ns 的高电 平。 图2.15 Clock 设置图 2.16 设置RDREQ 信号 点击工具栏中“Start Simulation”按钮 进
行仿真,仿真结果如图2.17。 下面对仿真结果进行分析,结果如下: 以后,经过大约2.5 时钟周期EMPTY变为低电平(数据已写入)。
WRREQ下降沿 RDREQ 下降沿以
后,经过大约1.5 个时钟周期,DATAOUT 总线上出现数据(读 出)。 因为写数据比读数据快,过一段时间FULL 信号变为高电平(缓冲区满),写数据请求不 再有效,直到读出一个数据,FULL 变低电平后才重新有效。 图2.17 仿真结果 10 2.3 设计流程 本节将详细介绍各个设计环节。 2.3.1 设计输入 (1) 多种设计输入方法
Quartus II 自带
设计输入 1) 原理图式图形设计输入; 2) 文本编辑:AHDL、VHDL、Verilog; 3) 内存编辑:Hex、Mif 第三方工具 4) EDIF 5) HDL 6) VQM 其他如混合设计格式;利用LPM和宏功能模块来加速设计输入 各种输入文件格式如图2.18 所示: 图2.18 设计输入文件 (2) 图表与原理图编辑器 该编辑器既可以编辑图表模块,又可以编辑原理图。
图表模块编辑是主要的顶层设计的主要方法
原理图编辑是传统的设计输入
方法 11 用户可以利用加入 Quartus II 提供的 LPMs,宏功能等 函数以及用户自己的库函数 来设计
提供“智能”的模块连接和 映射 图表模块的设计流程如下:
产
生一个新的模块设计文件 1) 画出图表模块或输入设 计单元符号 图2.19 新建bdf 文件 2) 输入接口和参数信息 3) 连接各个设计单元(利用单连线,总线等) 保存设计,文件的后缀名为.bdf(Block Diagram/Schematic File) HDL 文件或图 形编辑文件
顶层模块可以是用户 产生的
从顶层设计可以产生 设计单元,头文件,或 转化成
Verilog/VHDL 文件 下面介绍一下如何设计一个 顶层图表文件,以及如何根据此文 件产生设计文件。
新建bdf 文件,如图2.19。 图2.21 设置I/O 口
创建模块及其I/O
端口 下面创建一个模块 block1,它有四个输入口,一个输出口,一个 8 位的双向 口。 1) 点击 按钮(Block Tool),在文件中拖出一 个方框创建模块。 2) 右击该模块,选菜单Block Properties。 3) 在General 栏中设置Name 为“block1”,I/Os 栏中添加 I/O 接口如图 2.21。点击“确定” 按钮后,模块如图2.22。
“智能”连接和映射
图2.22 模块结果 根据以上的方法,设计另一个模块block2,它有CLK 和SEL 两个输入口,一 个DATA[2..0]输出口,使用直角管道工具(Orthogonal Conduit Tool) 连接两
模 12 块以及输入输出端口,如图2.23 所示。 图2.23 管道工具 管道工具会自动根据名称连接,右键单击管道,选择 Property,打开 Conduit Property 对话框,选择Signals 页,查看连接关系,如图 2.24。其中Signal 代表输入端 口,inst 代表 block1,inst3 代表block2。 Quartus II 提供各种逻 辑功能符号,包括图元 (Primitive)、LPM(Library of Parameterized Modules)函 数和宏功能(Macrofuncion) 符号。其.bdf 文件既能包含模 块符号,又能包括原理图符号。 图2.24 管道属性 下面,我们在上图的基础上,增加一个乘法器,将block1 和block2 的数据相 乘。利用MegaWizard Plug-In Manager 输入宏功能符号和LPM库函数的步骤如下: 图2.25 输入符号名 13 1) 在.bdf 文件上(图2.23 的空白部分)双击,弹出如图2.25 所示的对话框, 在Name 框输入lpm_mult。 2) 点击OK 后,出现如图2.26 所示对话框,对乘法器进行 配置。选择VHDL,则此乘 法器将产生 VHDL 的设计 文件。 3) 点击 Next 进入下一页,设 置dataa 数据宽度为8,datab 数据宽度为3。如图2.27 所 示。点击Finish 结束。鼠标 处会出现乘法器的符号,放 图2.26 MegaWizard Plug-In 设置对话框 到合适的位置即可。 图2.27 设置乘法器的输入数据宽度 现在要把block1 和block2 的数据线连接到乘法器上,因 为名称不匹配,需要明确告诉 管道对应关系。利用直角管道 工具 将block1、block2 分别 与乘法器相连,在block1 与管 道之间出现 符号,它表示 block1 与管道之间的映射关 系,双击它,打开映射属性对 话框,进入 Mapping 页,设置 映射关系如图2.28 所示。 图2.28 设置映射关系 点击确定后, 引出一个方框显示此映射关系。同样的方法设置block2 与管 道的映射。最终结果如图2.29 所示。 14 图2.29 信号映射
产生设
计文件 给模块定义并产生模块所代表的设计文件。以block1 为例,右键单击block1 模块,选择 Create Design File from Selected Block,弹出 图2.30 所示对话框。 设置如图。 确定后,会创建 出一个Block1.vhd文 件,它包括输入输出 口的定义,需要用户 增加内部实现。其产 生的 VHDL 代码如 下: 图2.30 设置输出设计文件 LIBRARY ieee; USE ieee.std_logic_1164.all; -- Entity Declaration ENTITY block1 IS --
{{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! PORT ( CS : IN STD_LOGIC; /WR :
IN STD_LOGIC; CLK : IN STD_LOGIC; /RD : IN STD_LOGIC; 15 BUSY : OUT STD_LOGIC; DATA : INOUT STD_LOGIC_VECTOR(7 downto 0) ); --
{{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END block1; -- Architecture Body ARCHITECTURE block1_architecture OF block1 IS BEGIN END block1_architecture; (3) 支持的第三方工具 支持的综合工具包括:(*表示支持内部链接) Leonardo Spectrum Design Compiler FPGA Compiler II Standard*& Altera Edition* FPGA Express* Synplicity Synplify* 支持的仿真工具有:
ModelSim*
ModelSim OEM* Cadence Verilog-XL Innoveda BLAST Prime Time* Synopsys VCS Synopsys VSS Quartus II 驱动支持内部链接的第三方EDA 工具输入文件的流程。在Assignmens 菜 单中选择EDA Tool Settings,出现如图2.31 所示的对话框。第三方EDA 工具也可以驱动 Quartus II 的设计输入。 16 图2.31 第三方综合工具 Quartus II 驱动不支持内部链接的第三方EDA 工具输入文件的流程。在Project 菜单 中选择EDA Tool Settings,出现如图3.32 所示对话框。如果用一个非内部链接的EDA 工 具产生VHDL、Verilog、EDIF 文件,就需要阐明.lmf 文件来给定文件格式。 图2.32 第三方仿真工具 17 2.3.2 编译 Quartus II 编译器的功能包括设计错误检查、逻辑综合、Altera 适配器件以及为仿真、 定时分析和器件编程产生的输入文件。 1. 编译类型 (1) 只是综合并输出网表 就停止了
编译设计文件,综合产生门级代码
编译器只运行到综合这步
编译器只产生估算的延时数值 (2) 完全的编译,包括编译,网表输出,综
编译器除了完成以上的步骤,还要将设计配置到ALTERA 的器件中去
合,配置器件
编译器根据器件特性产生真正的延时时间和给器件的配置文件 2. 编译设置向导 选择菜单Assignmens\\ Wizards\\ Compiler Settings Wizard,打开编译设置向导对话框, 在第2 页中包括两项设置,其一为编译方式:一般编译(Normal compilation,较少空间 较多编译时间)和优化编译(Smart compilation,较多空间较少编译时间);其二为是否 削减接点(Node)名字。如图2.33 所示。 图2.33 编译设置向导 3. 设置 选择菜单Assignmens\\ Settings,打开设置管理器,该管理器包括了编译、延时分析、 18 仿真等
各项设置。此处介绍和编译相关的设置。 (1) 分析综合(Analysis & Synthesis)设置,如图2.34 图2.34 分析综合设置 (2) 配置(Fitter)设置,如图2.35 图2.35 适配设置 19 2.3.3 延时分析 1. 特点 (1) Quartus II 支持对单个时钟或多个时钟的延时分析 (2) 单个时钟的延时分析
Fmax (最大时钟频率) Tsu, Th, Tco (建立时间,保持时
间,时钟到输出时间) 整个系统的Fmax (包括引脚上的输入输出延时) (3) 多个时钟的延时分析
可以支持客户分析由不同时钟控制的寄存器之间的延时
Quartus II 会自动检测组合逻辑电路
没有布局步线的延时信息
运用Slack 进 单个时钟的
行分析 (4) 组合逻辑电路检测
延时分析 (5) 不同类型的延时信息 时信息
经过布局步线的延
混合的树状层次型设计 (6) 在缺省情 况下,在编译 之后一般自动 调用延
时分析 (也可以禁止 调用) (7) 生成的延 时信息也可以 以 VHDL , Verilog 或 标 准延时文件 (SDF)的格 式输出到第三 方的EDA 工具中 图2.36 延时分析报告 2. 延时分析报告 所有的延时分析信息都包含在编译报告中。如图2.36 所示。详细信息在第一章已有 说明。 20 2.3.4 仿真 1. 支持多种仿真方法
波形方式输入.vwf(向量波形文
件):Quartus II 中最主要的波形文件.vec (向量文件):MAX+PLUS II 中的文件. 主要是为了向下兼容.tbl (列表 文件):用来将MAX+PLUS II 中的.scf 文件输入到Quartus II 中
支持Testbench(Tcl/TK 脚本文件)
第三方的仿真工 具(Verilog/VHDL
Model Technology (ModelSim)
Testbench) 2. 利用第三方的仿真工 具进行仿真 Cadence (VERILOG-XL) Synopsys (VCS)
Synopsys (VSS) 3. 阐明仿真器 图
2.37 选择仿真工具 选择菜单 Assignmens\\ Settings,打开设置管理器,展开 EDA Tool Settings,打开 Simulation 页,选择仿真工具。如图2.37 所示。 4. 第三方仿真工具 (1) VHDL 仿真器
利用Quartus II 产生.VHO 和.SDO 文件
利 用 在 sim_lib 目
录 中 的 APEX20K_ATOMs.VHD 和 APEX20K_ COMPONENTS.VHD 文件 (2) Verilog 仿真器
利用Quartus II 产生.VO 和.SDO 利用在sim_lib
APEX20K_ATOMS.VO 2.4 系统级设计 2.4.1 SOPC 设计 本节将利用SOPC Builder 软件设计Nios 系统模块。 21 1. 打开为Nios 开发板定制的Quartus II 项目 项目所在位
置为:D:\\altera\\kits\\nios\utorials\\Nios_HW_Tutorial_Cyclone_1C20,打开 此文件夹下.quartus 文件,如图2.38。 3. 生成一个Nios 系统模块 这一部分介绍如何使用SOPC Builder 创建Nios 嵌入式处理器,配置系统外设,连接 您的组件生 成一个Nios 系统。下一 步 在 BDF 文 件 中 将 Nios 系统的 端 口 和 FPGA 器件 的 引 脚 连 接,使Nios 开发板上的 FPAG 的物 理引脚与硬 件组建的相 对应。 这一部 分包括如下 的几个步骤: 图2.38 BDF 文件 指定文件地址
启动SOPC Builder 加入 CPU 和外设(Peripherals)
BDF 文件中加入系统模块符号 具体的内容见
生成系统模块
SOPC 硬件设计一章。 2.4.1 DSP 设计 22 2.5 设计实例 2.5.1 UART 控制器 串行通信是实现远程测控的重要手段。采用VHDL 语言在CPLD 上实现了串行通信, 完全可以脱离单片机使用。 1. 串口结构及内容 本设计所采用的是异步通信方式,可以规定传输的一个数据是10 位,其中最低位为 启动位(逻辑0 低电平),最高位为停止位(逻辑1 高电平),中间8 位是数据位。为了方便 对数据进行正确控制,选取发送(接受)每位数据用4 个时钟周期。为了能够达到串行通信 的波特率,例如4800B/s,则需把时钟频率设为19.2kHz。系统结构如图2.39 所示: 2. 系统原理 首先介绍串行通信发送器的 工作原理。6 位计数器用于判断发 送的数据是否发送完毕及在发送 完毕后装入新的数据,其 VHDL 语言程序如下: process(carry) begin if carry'event and carry='1'then if counter40=\"100111\"then load<='1'; counter40<=\"000000\"; else
counter40<=counter40+1; load<='0'; end if; 图2.39 Uart 结构 end if; end process; 由于本设计中选取一位数据4 个时钟周期,因此当计数到“100111”时,表示10 位 数据发送完毕;此时将加载信号“load”置 1,则向移位寄存器加载 10 位数据。此计数 器的时钟信号由3 位计数器的进位信号提供,3 位计数器程序为如下: process(clk) begin if clk'event and clk='1'then if counter4=\"0011\"then counter4<=\"0000\"; 23 carry<='1'; else counter4<=counter4+1; carry<='0'; end if; end if; end process; 当计数脉冲为 3 时,计数器清零并发出进位信号“carry”,“carry”既是 6 位计数器 的时钟信号,又是移位寄存器的移位脉冲,移位寄存器实际上在发送器中是一个并串转 换器,
其程序为如下: process(load,carry) begin if load='1'then reg10(9 downto 0)<=regin(9 downto 0); else if carry'event and carry='1' then din<=reg10(0); reg10(8 downto 0)<=reg10(9 downto 1);
因篇幅问题不能全部显示,请点此查看更多更全内容