新書推薦:
《
王氏之死(新版,史景迁成名作)
》
售價:HK$
54.9
《
敢为天下先:三年建成港科大
》
售價:HK$
77.3
《
长高食谱 让孩子长高个的饮食方案 0-15周岁儿童调理脾胃食谱书籍宝宝辅食书 让孩子爱吃饭 6-9-12岁儿童营养健康食谱书大全 助力孩子身体棒胃口好长得高
》
售價:HK$
47.0
《
身体自愈力:解决内在病因的身体智慧指南
》
售價:HK$
98.6
《
非言语沟通经典入门:影响人际交往的重要力量(第7版)
》
售價:HK$
123.1
《
山西寺观艺术壁画精编卷
》
售價:HK$
1680.0
《
中国摄影 中式摄影的独特魅力
》
售價:HK$
1097.6
《
山西寺观艺术彩塑精编卷
》
售價:HK$
1680.0
|
編輯推薦: |
本书配套有教学课件(PPT)、网络公开教学视频、设计文件源代码和学习交流群等,构建了立体化的学习生态系统。
(1) 知识融合:将数字逻辑(电路)的基础理论和Xilinx*的Vivado集成开发环境进行系统化深度融合。书中内容涵盖了数字逻辑和复杂数字系统设计所要求的全部知识点。通过对数字系统设计理论和设计方法的系统讲解,为后续深入学习计算机硬件课程及数字信号处理课程打下坚实的基础。(2) 知识权威:介绍数字逻辑电路基本知识点时,参考了国外数字逻辑设计领域的权威书籍。在介绍HDL语法时,参考了*的IEEE相关标准。书中所有的设计实例经过严格测试和验证。通过系统化的讲解及规范化的设计实例,帮助读者培养良好的数字系统设计习惯,掌握*的数字系统设计方法和设计理念。(3) 知识涵盖:晶体管、开关系统、数字器件特性、数字集成电路基本知识、逻辑代数基础、组合逻辑电路、时序逻辑电路、有限自动状态机、可编程逻辑器件原理、HDL硬件描述语言、基本数字逻辑单元设计、Vivado设计流程、IP核封装和调用、数字系统设计高级方法、ADC和DAC原理、数模混合系统设计。(4) 实例丰富:针对每个知识点,都提供了大
|
內容簡介: |
本书是为高等学校电子信息类及其相关专业编写的数字系统设计教材。本书共分为11章,主要内容包括数字逻辑基础、可编程逻辑器件工艺和结构、Vivado集成开发环境IP设计流程、Vivado集成开发环境VHDL设计流程、VHDL语言规范、基本数字单元VHDL描述、VHDL数字系统设计和实现、创建和封装用户IP设计和实现、Vivado调试工具原理及实现、数字系统高级设计方法及数模混合系统设计。 本书以Xilinx Artix7系列FPGA器件和Xilinx最新一代的Vivado 2015.4集成开发环境为设计平台,根据数字系统设计课程的教学要求以及作者多年的教学经验,将本科传统的数字电子技术数字逻辑课程与复杂数字系统设计课程相融合,遵循循序渐进,由浅入深的原则,内容涵盖了晶体管、门电路、数字逻辑理论、组合逻辑和时序逻辑、可编程逻辑器件结构、Vivado集成开发环境设计流程、VHDL语言、VHDL复杂数字系统设计、IP封装与调用、在线逻辑分析仪工具以及数模混合系统设计等方面。 为了方便教师的教学和学生的自学,书中列举了大量的设计实例,并提供了配套教学资源详见书中的学习说明。本书可作为本科生和研究生学习数字系统设计相关课程的教材,也可作为从事Xilinx FPGA设计的工程技术人员的参考用书,同时也可作为Xilinx大学计划培训的授课教材。
|
關於作者: |
何宾 著名的嵌入式技术和EDA技术专家,长期从事电子设计自动化方面的教学和科研工作,与全球多家知名的半导体厂商和EDA工具厂商大学计划保持紧密合作。目前已经出版嵌入式和EDA方面的著作30余部,内容涵盖电路仿真、电路设计、可编程逻辑器件、数字信号处理、单片机、嵌入式系统、片上可编程系统等。典型的代表作有《Xilinx FPGA设计权威指南》《Xilinx All Programmable Zynq-7000 SoC设计指南》《Altium Designer 13.0电路设计、仿真与验证权威指南》《Altium Designer 15.0电路仿真、设计、验证与工艺实现权威指南》《Xilinx FPGA数字设计从门级到行为级的双重描述》《Xilinx FPGA数字信号处理权威指南从HDL、模型到C的描述》《模拟与数字系统协同设计权威指南-Cypress集成开发环境》《STC单片机原理及应用》《STC单片机C语言程序设计》等。
|
目錄:
|
序Ⅲ
前言Ⅴ
学习说明Ⅶ
第1章数字逻辑基础
1.1数字逻辑的发展史
1.2开关系统
1.2.10和1的概念
1.2.2开关系统的优势
1.2.3晶体管作为开关
1.2.4半导体物理器件
1.2.5半导体逻辑电路
1.2.6逻辑电路符号描述
1.3半导体数字集成电路
1.3.1集成电路的发展
1.3.2集成电路构成
1.3.3集成电路版图
1.4基本逻辑门电路分析
1.4.1基本逻辑门电路的描述
1.4.2逻辑门电路的传输特性
1.4.3基本逻辑门集成电路
1.4.4不同工艺逻辑门的连接
1.5逻辑代数理论
1.5.1逻辑代数中运算关系
1.5.2逻辑函数表达式
1.6逻辑表达式的化简
1.6.1使用运算律化简逻辑表达式
1.6.2使用卡诺图化简逻辑表达式
1.6.3不完全指定逻辑功能的化简
1.6.4输入变量的卡诺图表示
1.7毛刺产生及消除
1.8数字码制表示和转换
1.8.1数字码制表示
1.8.2数字码制转换
1.9组合逻辑电路
1.9.1编码器
1.9.2译码器
1.9.3码转换器
1.9.4数据选择器
1.9.5数据比较器
1.9.6加法器
1.9.7减法器
1.9.8加法器减法器
1.9.9乘法器
1.10时序逻辑电路
1.10.1时序逻辑电路类型
1.10.2时序逻辑电路特点
1.10.3基本SR锁存器
1.10.4同步SR锁存器
1.10.5D锁存器
1.10.6D触发器
1.10.7其他触发器
1.10.8普通寄存器
1.10.9移位寄存器
1.10.10存储器
1.11有限自动状态机
1.11.1有限自动状态机原理
1.11.2状态图表示及实现
1.11.3三位计数器
第2章可编程逻辑器件工艺和结构
2.1可编程逻辑器件的发展历史
2.2可编程逻辑器件工艺
2.3简单可编程逻辑器件结构
2.3.1PROM原理及结构
2.3.2PAL原理及结构
2.3.3PLA原理及结构
2.4CPLD原理及结构
2.4.1功能块
2.4.2宏单元
2.4.3快速连接矩阵
2.4.4输入输出块
2.5FPGA原理及结构
2.5.1查找表结构及功能
2.5.2可配置的逻辑块
2.5.3时钟资源
2.5.4时钟管理模块
2.5.5块存储器资源
2.5.6互联资源
2.5.7专用的DSP模块
2.5.8输入和输出块
2.5.9吉比特收发器
2.5.10PCIE模块
2.5.11XADC模块
2.6CPLD和FPGA比较
2.7Xilinx可编程逻辑器件
2.7.1Xilinx CPLD芯片介绍
2.7.2Xilinx FPGA芯片介绍
2.7.3Xilinx PROM芯片介绍
第3章Vivado集成开发环境IP核设计流程
3.1IP的基本概念
3.1.1IP核来源
3.1.2IP核的提供方式
3.1.3IP核优化
3.2Vivado工具设计流程
3.3Vivado IP数字系统的设计与实现
3.3.1建立新的设计工程
3.3.2修改工程设置属性
3.3.3创建块设计
3.3.4生成设计输出文件
3.4XDC文件原理及添加方法
3.4.1XDC的特性
3.4.2约束文件的使用方法
3.4.3约束顺序
3.4.4XDC约束命令
3.4.5添加XDC文件
3.5查看综合后的结果
3.6查看实现后的结果
3.7生成和下载比特流文件
3.7.1生成比特流文件
3.7.2下载比特流文件
3.8生成和下载PROM文件
第4章Vivado集成开发环境VHDL设计流程
4.1创建新的设计工程
4.2修改工程属性
4.3创建并添加一个新的设计文件
4.4RTL详细描述和分析
4.4.1详细描述的原理
4.4.2详细描述的过程
4.5设计综合和分析
4.5.1综合过程的关键问题
4.5.2执行设计综合
4.5.3综合报告的查看
4.6设计行为级仿真
4.7创建实现约束文件XDC
4.7.1实现约束的原理
4.7.2IO规划器功能
4.7.3实现约束过程
4.8设计实现和分析
4.8.1设计实现原理
4.8.2设计实现及分析
4.9设计时序仿真
4.10生成并下载比特流文件
4.10.1生成比特流文件
4.10.2下载比特流文件到FPGA
4.11生成并烧写PROM文件
第5章VHDL语言规范
5.1VHDL程序结构和配置
5.1.1VHDL程序结构框架
5.1.2VHDL实体
5.1.3VHDL结构体
5.1.4配置声明
5.2VHDL语言描述风格
5.2.1行为描述
5.2.2数据流描述
5.2.3结构化描述
5.3VHDL语言要素
5.3.1字符集
5.3.2语言要素、分隔符和分界符
5.3.3标识符
5.3.4抽象文字
5.3.5字符文字
5.3.6字符串文字
5.3.7比特字符串文字
5.3.8注释
5.3.9保留字
5.3.10允许的字符替换
5.4VHDL设计资源共享
5.4.1库的声明和调用
5.4.2子程序和函数声明
5.4.3函数体和子程序体
5.4.4子程序和函数重载
5.4.5解析函数
5.4.6包声明
5.4.7包体
5.5VHDL类型
5.5.1标量类型
5.5.2复合类型
5.5.3访问类型
5.5.4文件类型
5.5.5保护类型
5.6VHDL声明
5.6.1类型声明
5.6.2子类型声明
5.6.3对象
5.6.4属性声明
5.6.5元件声明
5.6.6组模板声明
5.6.7组声明
5.7VHDL说明
5.7.1属性说明
5.7.2配置说明
5.7.3断开说明
5.8VHDL名字
5.8.1简单名字
5.8.2选择名字
5.8.3索引名字
5.8.4切片名字
5.8.5属性名字
5.9VHDL表达式
5.9.1VHDL操作符
5.9.2VHDL操作数
5.10VHDL顺序描述语句
5.10.1wait语句
5.10.2断言和报告语句
5.10.3信号分配语句
5.10.4变量分配语句
5.10.5子程序调用语句
5.10.6if语句
5.10.7case语句
5.10.8loop语句
5.10.9next语句
5.10.10exit语句
5.10.11return语句
5.10.12null语句
5.11VHDL并发描述语句
5.11.1块语句
5.11.2进程描述语句
5.11.3并行过程调用语句
5.11.4并行断言语句
5.11.5并行信号分配语句
5.11.6元件例化语句
5.11.7生成语句
第6章基本数字逻辑单元的VHDL描述
6.1组合逻辑电路的VHDL描述
6.1.1逻辑门的VHDL描述
6.1.2编码器的VHDL描述
6.1.3译码器的VHDL描述
6.1.4多路选择器的VHDL描述
6.1.5数字比较器的VHDL描述
6.1.6总线缓冲器的VHDL描述
6.2数据运算操作的VHDL描述
6.2.1加法操作的VHDL描述
6.2.2减法操作的VHDL描述
6.2.3乘法操作的VHDL描述
6.2.4除法操作的VHDL描述
6.2.5算术逻辑单元的VHDL描述
6.3时序逻辑电路的VHDL描述
6.3.1触发器和锁存器的VHDL描述
6.3.2计数器的VHDL描述
6.3.3移位寄存器的VHDL描述
6.3.4脉冲宽度调制PWM的VHDL描述
6.4存储器的VHDL描述
6.4.1ROM的VHDL描述
6.4.2RAM的VHDL描述
6.5有限自动状态机的VHDL描述
6.5.1FSM设计原理
6.5.2FSM的分类及描述
第7章VHDL数字系统设计和实现
7.1设计所用外设的原理
7.1.1LED灯驱动原理
7.1.2开关驱动原理
7.1.3七段数码管驱动原理
7.1.4VGA显示器原理
7.1.5通用异步接收发送器原理
7.2系统设计原理
7.3创建新的设计工程
7.4VHDL数字系统设计流程
7.4.1设计分频时钟模块2
7.4.2设计和仿真计数器模块
7.4.3设计顶层模块
7.4.4设计和例化分频时钟模块1
7.4.5设计七段数码管模块
7.4.6设计和例化分频时钟模块3
7.4.7设计和例化通用异步收发器模块
7.4.8设计和例化分频时钟模块4
7.4.9设计和例化VGA控制器模块
第8章创建和封装用户IP设计和实现
8.1Vivado定制IP流程导论
8.2封装用户定义IP核设计流程
8.2.1创建新的封装IP设计工程
8.2.2添加VHDL设计源文件
8.2.3设置定制IP的库名和目录
8.2.4封装定制IP的实现
8.3调用用户自定义IP实现流程
8.3.1创建新的调用IP工程
8.3.2设置包含调用IP的路径
8.3.3创建基于IP的系统
8.4系统行为级仿真
8.5系统设计综合
8.6系统实现和验证
第9章Vivado调试工具原理及实现
9.1设计调试原理和方法
9.2FIFO IP的生成和调用
9.2.1创建新的工程
9.2.2添加FIFO IP核
9.2.3添加顶层设计文件
9.2.4添加XDC文件
9.3网表插入调试探测流程方法及实现
9.3.1网表插入调试探测流程的方法
9.3.2网表插入调试探测流程的实现
9.4使用添加VHDL属性调试探测流程
9.5使用VHDL例化调试核调试探测流程
第10章数字系统高级设计方法
10.1数字系统设计目标
10.2时序基本概念
10.2.1基本术语
10.2.2时序路径
10.2.3建立和保持松弛
10.2.4去除和恢复检查
10.3逻辑复制和复用
10.3.1逻辑复制
10.3.2逻辑复用
10.4并行和流水线
10.4.1并行设计
10.4.2流水线设计
10.5同步和异步单元处理
10.5.1同步单元处理
10.5.2异步单元处理
10.6逻辑结构处理
10.6.1逻辑结构设计方法
10.6.2if和case语句的使用
第11章数模混合系统设计
11.1模数转换器原理
11.1.1模数转换器的参数
11.1.2模数转换器的类型
11.2数模转换器原理
11.2.1数模转换器的参数
11.2.2数模转换器的类型
11.3基于XADC的信号采集和处理原理及实现
11.3.1XADC模块原理
11.3.2XADC原语
11.3.31602模块原理
11.3.4信号采集、处理和显示的实现
11.4基于DAC的信号发生器的设计原理及实现
11.4.1DA转换器工作原理
11.4.2函数信号产生原理
11.4.3设计实现
|
內容試閱:
|
前言
随着半导体技术的不断演进和发展,基于现场可编程门阵列field programmable gate array,FPGA的数字系统设计朝着系统化和集成化的方向发展。特别是,全球最大的可编程逻辑器件厂商美国赛灵思Xilinx公司不断推出新器件、新设计工具和新设计方法,这些都将进一步扩展FPGA在通信、人工智能和机器学习等复杂数据处理方面的应用,也将成为电子信息类专业学生必须掌握的一项专业技能。
目前,国内电子信息类专业学生所学的传统数字逻辑理论和设计方法远远不能应对这种挑战,因此国内很多高校的电子信息类专业在开设传统数字逻辑课程的基础上,又单独开设了基于硬件描述语言hardware description language,HDL的数字系统设计课程。这种授课方式不但不利于知识点之间的有机衔接,同时也加重了学生的学习负担。
现在,国内越来越多高校的电子信息类专业授课教师希望将传统数字逻辑课程和基于HDL的数字系统设计课程进行系统化融合。在这种需求背景下,作者根据多年的授课经验和学生实训成果,将传统的数字逻辑课程和基于HDL的数字系统设计课程进行系统化深度融合,编写了该教材。在编写教材的过程中,本着由浅入深,由易到难的原则,在参考国外已经出版的数字设计教材和作者已经出版的《Xilinx FPGA数字设计从门级到行为级双重HDL描述》教材基础上,对复杂数字系统设计所需要的知识点进行了系统化融合。本书内容涵盖晶体管、门电路、布尔逻辑、组合逻辑和时序逻辑、可编程逻辑器件结构、IP核封装和调用、Vivado集成开发工具设计流程、VHDL语言规范、VHDL复杂数字系统设计以及在线逻辑分析仪工具等,其目的是打通数字设计相关课程的知识通道,使学生能够系统、全面、扎实地掌握数字设计相关的理论知识和设计方法,为高等学校电子信息类数字设计相关课程的教学改革和课程整合提供教学素材。与作者已经出版的《Xilinx FPGA数字设计从门级到行为级双重HDL描述》一书相比,本书做了以下重要的改动:1 采用Xilinx 28nm工艺的Artix7系列FPGA和Xilinx最新的Vivado 2015.4集成开发环境为设计平台。2 突出以IP核为中心的设计思想,增加了IP核封装和IP核调用的内容。3 增加在线逻辑分析仪工具内容的讲解,使得读者能够更熟练地使用该工具对复杂数字系统进行调试。4 删除原书最后一章软核处理器PicoBlaze原理及应用的内容注:该部分内容将使用ARM公司CortexM0 MCU代替,并作为单独教材进行更系统的讲解。5 将原书中的VHDL和Verilog HDL语言语法和设计案例,以两个不同版本教材的形式分开介绍,更具有针对性。6 在介绍数模混合系统一章的内容时,使用Xilinx Artix7系列FPGA器件内集成的XADC模块,使得读者能更深刻地体会半导体技术的发展对未来电子系统设计方法的影响以及SoC器件的概念。通过对原书内容的更新和调整,本教材既涵盖了数字系统设计所必需的知识点,同时也反映了复杂数字系统设计的最新发展动态。
在讲授和学习本书内容时,教师和学生可以根据教学时数和内容侧重点的不同,适当将相关章节的内容进行调整和删减。为了让读者更好地掌握相关内容,本书还给出了大量设计示例程序和习题。本书不仅可以作为大学信息类专业讲授数字电子线路、数字逻辑和复杂数字系统设计相关课程的教学用书,也可作为从事相关课程教学和科研工作者的参考用书。为了方便老师的教学和学生的自学,本书还提供了相应的教学课件和所有设计实例的完整设计文件,这些设计资源可以在本书学习说明给出的网站上下载。值得注意的是,为与本书采用的Vivado集成开发环境一致,书中电子元器件外形没有采用国标。本书编写时引用和参考了许多著名学者和专家的研究成果,以及Xilinx公司的技术文档和手册。在本书的编写过程中,Xilinx的多位技术专家解答了作者所遇到的各种问题,在此特别向他们表示衷心的感谢; 作者的学生李宝隆、张艳辉、汤宗美、杨天翔和王中正负责第1章~第11章部分内容的编写和设计实例的验证工作,在此一并向他们表示感谢。在本书的出版过程中,得到了Xilinx大学计划、TI大学计划及RIGOL大学计划的大力支持和帮助,同时也得到了清华大学出版社各位编辑的帮助和指导,在此也表示深深的谢意。
由于编者水平有限,编写时间仓促,书中难免有疏漏之处,敬请读者批评指正。
作者2016年8月于北京
第3章
Vivado集成开发环境IP核设计流程
本书第1章详细讨论了数字逻辑的基本概念和小规模数字集成电路SSI器件。本书第2章系统地介绍了FPGA的内部结构,使读者知道在FPGA内提供了大量的逻辑设计资源。本章将在FPGA内通过IP核构建基本的数字功能单元,然后再通过调用这些IP核资源实现第1章所介绍的基本数字逻辑的功能。Xilinx于2012年推出的新一代集成开发环境Vivado强调系统级的设计思想,突出IP核在数字系统设计中的作用。与Xilinx以前的设计工具ISE相比,在Vivado中使用IP核设计的能力成为对设计者的最基本要求之一,因此就要求读者能熟练掌握Vivado环境中IP核的设计流程。本章主要介绍了IP的基本概念、Vivado工具设计流程、Vivado IP数字系统的设计与实现、XDC文件原理及添加方法、查看综合后的结果、查看实现后的结果、生成和下载比特流文件以及生成和下载PROM文件。
3.1IP的基本概念在几十年前,由于半导体设计方法和制造工艺的限制,构成数字系统基本使用小规模数字集成电路芯片,典型的如74LS系列。此外,这些数字系统功能也不算特别的复杂。随着电子设计自动化Electronic Design Automation,EDA工具功能的不断增强,以及半导体制造工艺的飞速发展,所设计的数字系统功能越来越复杂,数字系统采用了大规模的数字集成电路芯片,特别是采用了高性能的FPGA芯片。此外,所要求的设计周期越来越短,设计可靠性越来越高。因此,对于设计人员来说,他们不可能从头开始进行复杂数字系统的设计。目前采用的普遍方法是,在设计中尽可能使用已有的功能模块。当在设计中没有可用的现成模块时,设计人员才需要自己花时间和精力设计新的模块。在EDA领域内,人们把这些现成的模块通常称为知识产权Intellectual Property,IP核,这是因为这些IP核是别人设计成果的体现。在设计这些IP时,会消耗设计人员大量的时间、精力和设计费用等。
注: 为了帮助读者理解这个概念,从现在的观点来看,第1章所提到的小规模数字逻辑器件芯片可以看作是一个个功能比较简单的IP核,然后使用这些IP核就可以构成中等规模的数字系统。
IP核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中。到了片上系统System onchip,SoC阶段,IP核设计已成为ASIC设计公司和FPGA供应商非常特别重要的任务,因为这是它们所构建生态系统中最重要的一个内容。此外,厂商所能提供IP核的资源,也体现着厂商的软实力。在Xilinx新一代的集成开发工具Vivado中,提供了大量可用的IP设计资源。
注: 目前,IP核已经成为系统设计的基本单元,并作为独立设计成果被交换、转让和销售。
3.1.1IP核来源在数字系统设计领域,特别是在基于FPGA的数字系统设计中,IP核的来源主要包括:1 设计人员在前一个设计中所创建的模块。2 FPGA生产厂商。3 第三方IP厂商。注: 在Xilinx新一代的集成开发工具Vivado中,提供了强大的IP核封装和调用功能。
3.1.2IP核的提供方式
从IP核的提供方式上,通常将其分为软核、固核和硬核这3类。
1. 软核在EDA设计领域,软核是指综合前的RTL模型。在FPGA设计中,具体是指使用HDL对所设计的模块进行描述,包括逻辑描述、网表和帮助文档等。对于软核来说,只有经过功能仿真、综合以及布局布线以后才能使用。1 优点是灵活性高、可移植性强,允许用户自配置。2 缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP核中应用最广泛的形式。典型的,Xilinx提供了32位的MicroBlaze软核处理器。
2. 固核在EDA设计领域,固核是指带有平面规划信息的网表。在FPGA设计中,它可以看作是包含布局规划的软核,通常以RTL代码和对应具体工艺网表的混合形式提供。对于固核来说,将RTL描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。与软核相比,固核的设计灵活性稍差,但可靠性有较大提高。目前,固核也是IP核的主流形式之一。
3. 硬核在EDA设计领域,硬核是指经过验证的设计版图。在FPGA设计中,具体是指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其进行任何修改。不能修改硬核的原因如下:
1 系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图。2 保护知识产权的要求,不允许设计人员对其有任何改动。IP硬核的不允许修改的特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。典型的,在Xilinx最新的Zynq7000 SoC器件中,集成了ARM CortexA9双核硬核处理器。从上面的介绍可以得出下面的结论:1 从完成IP核所花费的成本来讲,硬核代价最大。2 从使用灵活性来讲,软核的可复用使用性最高。(3) 从性能来讲,硬核最高,软核最低。3.1.3IP核优化最常见到的情况就是IP核的厂商从RTL级开始对IP进行人工的优化。对于EDA设计人员来说,可以通过下面的几种途径购买和使用IP模块:1 未加密的RTL级IP在极少数的情况下,EDA设计人员可以购买未加密的源代码RTL级的IP模块,然后将这些IP模块集成到所设计的RTL级代码中。这些IP核已经经过了仿真、综合和验证。在一般情况下,EDA设计人员很难得到复杂IP核RTL级的描述。如果EDA设计人员想这样做的话,必须和IP核供应商签订一个不扩散Nondisclosure Agreements,NDA协议。对于该层次的IP核来说,EDA设计人员可以根据自己的需要修改最初的代码,以满足自己的设计要求。但是,与后面优化后的网表IP相比,资源需求和性能方面的效率会比较低。2 加密的RTL级IP可编程逻辑器件厂商Altera和Xilinx开发了自己的IP加密算法和工具,这样由FPGA厂商工具加密后的RTL代码只能由厂商自己的综合工具进行处理。
注: 可编程逻辑器件供应商Altera已经于2015年被Intel收购。
3 未布局布线的网表IP对于EDA设计人员来说,最普遍的就是使用未经加密布局布线的LUTCLB网表IP。这种网表进行了加密处理,采用EDIF格式或者PLD厂商自己的专用格式。厂商已经对IP进行了人工的优化,使得在资源利用和性能方面达到最优。但是,EDA设计人员不能根据自己的设计要求对核进行相应的裁减,并且IP模块同某一特定的PLD厂商和具体的器件联系。
4 布局布线后的网表级IP在一些情况下,EDA人员可能需要购买和使用布局布线后和加密的LUTCLB网表级IP。布局布线后的网表级IP可以达到最佳的性能。在一些情况下,LUT、CLB和其他构成IP核的部分,它们内部的位置相对固定,但是它作为一个整体可以放在PLD的任意部分,并且它们有IO引脚位置的限制。在这种情况下,用户只能对其进行调用,不得对其进行任何的修改。思考与练习31请说明IP核的分类,以及它们的特点。
3.2Vivado工具设计流程Xilinx于2012年推出了全新一代的集成开发环境Vivado,该工具的系统级设计流程如图3.1所示。除了传统上寄存器传输级RTL到比特流的FPGA设计流程外,Vivado设计套件新提供了系统级的设计集成流程,这个新的系统级设计的中心思想是基于知识产权核的设计。从图3.1中可以看出:
图3.1Vivado系统级设计流程
1 Vivado设计套件提供了一个环境,用于配置、实现、验证和集成IP。2 通过Vivado提供的IP目录,就可以快速地对Xilinx IP、第三方IP和用户IP进行例化和配置。IP的范围包括: 逻辑、嵌入式处理器、数字信号处理DSP模块或者基于C的DSP算法设计。一方面,将用户IP进行封装,并且使封装的IP符合IPXACT协议,这样就可以在Vivado IP目录中使用它; 另一方面,Xilinx IP利用AXI4互连标准,实现更快速的系统级集成。在设计中,可以通过RTL或者网表格式使用这些已经存在的IP。3 可以在设计流程的任意一个阶段,对设计进行分析和验证。4 对设计进行分析,包括: 逻辑仿真、IO和时钟规划、功耗分析、时序分析、设计规则检查DRC、设计逻辑的可视化、实现结果的分析和修改,以及编程和调试。5 通过AMBA AXI4互联协议,Vivado IP集成器环境使得设计者能够将不同的IP组合在一起。设计者可以使用块图风格的接口交互式的配置和连接IP,并且可以像原理图那样,通过绘制DRC正确地连接,很容易将整个接口连接在一起。然后,将这些IP块设计进行封装,将其作为单个的设计源。可以在一个设计工程或者在多个工程之间进行共享,来使用设计块。6 Vivado IP集成器环境是主要的接口,通过使用Zynq器件或者Microblaze处理器,创建嵌入式处理器设计。Vivado设计套件也集成了传统的XPS,用于创建、配置和管理MicroBlaze微处理器核,并在Vivado IDE环境中,集成和管理这些核。如果设计者选择编辑XPS的源设计,将自动启动XPS工具。设计者也可以将XPS作为一个单独的工具运行,然后将最终的输出文件作为Vivado IDE环境下的源文件。在Vivado IDE中,XPS不能用于Zynq器件。取而代之的是,在Vivado IDE环境中,使用新的IP集成器环境。7 对于数字信号处理方面的应用,Vivado提供了两种设计方法:①使用Xilinx System Generator建模数字信号处理。Vivado设计套件集成了Xilinx System Generator工具,用于实现DSP的功能。当设计者编辑一个DSP源设计时,自动启动System Generator。设计者可以使用System Generator作为一个独立运行的工具,然后将其最终的输出文件作为Vivado IDE的源文件。②使用高级综合工具HighLevel Synthesis,HLS建模数字信号处理。Vivado设计套件集成了Vivado HLS,提供了基于C语言的DSP功能。来自Vivado HLS的RTL输出,作为Vivado IDE的RTL源文件。在Vivado IP封装器中,将RTL的输出封装成IPXACT标准的IP,在Vivado IP目录中变成可用。设计者也可以在System Generator逻辑中使用Vivado HLS逻辑模块。
8 Vivado设计套件中包含: Vivado综合、Vivado实现、Vivado时序分析、Vivado功耗分析和比特流生成。设计者可通过使用下面方式之一运行整个设计流程:
①Vivado IDE; ②批处理Tcl脚本;③在Vivado设计套件的Tcl Shell;④Vivado IDE Tcl控制台下,输入Tcl命令。
9 设计者可以创建多个运行策略,利用不同的综合选项、实现选项、时序约束、物理约束、设计配置来进行尝试,这样可以帮助设计者改善最终的设计结果。
10 Vivado集成开发环境提供了IO引脚规划环境,使得IO端口分配到指定的封装引脚上,或者分配到内部晶圆的焊盘上。通过使用Vivado引脚规划器内的视图和表格,设计者可以分析器件和设计相关的IO数据。Vivado IDE提供了高级的布局规划能力,用于帮助改善实现的结果。将一个指定的逻辑,强迫放到某个芯片内的某个特殊区域,即为了后面的运行,通过交互的方式锁定到指定的位置或者布线。
11 Vivado IDE使设计者可以在设计处理的每个阶段,对设计进行分析、验证和修改。通过对处理过程中所生成的中间结果进行分析,可以提高设计的性能。在表示成RTL并综合和实现后,可以运行分析功能。
Vivado集成了Vivado仿真器,使得设计者可以在设计的每个阶段,运行行为级和结构级的逻辑仿真。仿真器支持Verilog和VHDL混合模式仿真,并且以波形的形式显示结果。设计者也可以使用第三方的仿真器。
在Vivado IDE内,在设计处理的每一个阶段,设计者都可以对结果进行交互分析。一些设计和分析特性包括: 时序分析、功耗估计和分析、器件利用率统计、DRC、IO规划、布局规划以及交互布局和布线分析。
12 当执行实现过程后,对器件进行编程,然后在Vivado lab工具环境中对设计进行分析。在RTL内或者在综合之后,很容易识别调试信号。在RTL或者综合网表中,插入和配置调试核。Vivado逻辑分析仪也可以进行硬件验证,将接口设计成与Vivado仿真器一致,两者共享波形视图。
思考与练习32请说明Vivado以IP核为中心的设计思想及其优势。
3.3Vivado IP数字系统的设计与实现本节将在Vivado集成开发环境中,实现第1章所介绍的三位八进制计数器。3.3.1建立新的设计工程本节将基于Vivado 2015.4建立新的设计工程,主要步骤包括:1 在Windows 7操作系统环境下,选择下面的一种方法启动Vivado集成开发环境。
① 在Windows 7操作系统主界面左下角,选择开始所有程序Xilinx Design ToolsVivado 2015.4Vivado 2015.4。② 在Windows 7操作系统的桌面上,找到并双击名为Vivado 2015.4的图标,如图3.2所示。2 在Vivado 2015.4主界面下,选择下面的一种方法创建新的工程。① 在Vivado主界面主菜单下,选择FileNew Project。② 在Vivado主界面Quick Start标题栏下,单击Create New Project图标,如图3.3所示。
图3.2桌面的Vivado 2015.4图标
图3.3Create New Project图标
3 出现New ProjectCreate a New Vivado Project界面。4 在该界面内,单击Next按钮。5 出现New ProjectProject Name对话框界面,如图3.4所示。设置参数如下:
① Project name: project_1。
图3.4输入工程名字和路径界面
② Project location: E: eda_verilogcounter_ip。③ 选中Create project subdirectory前面的复选框。
6 单击Next按钮。7 出现New ProjectProject Type对话框界面,如图3.5所示。在该界面中,选中RTL Project前面的复选框。
图3.5选择工程类型界面
8 单击Next按钮。9 出现New ProjectAdd Sources对话框界面。参数设置如下:① Target language: Verilog。② Simulator language: Mixed。10 单击Next按钮。11 出现New ProjectAdd Existing IPoptional对话框界面。12 单击Next按钮。13 出现New ProjectAdd Constraintsoptional对话框界面。14 单击Next按钮。15 出现New ProjectDefault Part对话框界面,如图3.6所示。在Select标题右侧单击图标。
图3.6选择器件界面
16 在Part窗口中选择xc7a75tfgg4841。注:① 本书配套使用的A7EDP1开发平台,搭载Xilinx的Artix7系列的xc7a75tfgg4841芯片。② 该开发平台由北京汇众新特科技有限公司开发,关于该平台的具体信息和设计资源可参见书中给出的学习说明。③ 在eda_vhdlcounter_ip目录下,也保存着该设计。当使用eda_vhdl路径时,下面的设计步骤均指向该路径。
17 单击Next按钮。18 出现New ProjectNew Project Summary对话框界面。19 单击Finish按钮。3.3.2修改工程设置属性本节将修改工程设置属性,通过修改工程设置属性,使得当前设计工程能找到Xilinx大学计划提供的最基本组合逻辑和时序逻辑元件IP核,修改工程设置属性的步骤主要包括:1 在Vivado当前设计工程主界面左侧的Project Manager窗口中,找到并展开Project Manager。在展开项中,找到并单击Project Settings条目。2 出现Project Settings对话框界面,如图3.7所示。在该界面左侧窗口中,单击IP符号。3 如图3.7所示,在右侧窗口中单击Repository Manager标签。
图3.7Project Settings设置界面
4 在该标签窗口界面下方IP Repositories窗口中,单击按钮。
5 出现IP Repositories对话框界面。在该界面中,将路径指向本书所提供资料的路径中读者可以根据自己的情况选择路径:
e: \eda_vhdl\XUP_LIB或e:\eda_Verilog\XUP_LIB
6 单击OK按钮。7 出现Add Repository对话框界面。8 单击OK按钮。9 可以看到在IP Repositories窗口下方,添加了所要使用的IP核路径。10 单击OK按钮,退出Project Settings对话框界面。
3.3.3创建块设计本节将创建块设计,并通过调用IP核实现三位八进制计数器。创建块设计的主要步骤包括:1 在Vivado当前设计界面左侧Project Manager窗口中,找到并展开IP Integrator。在展开项中,找到并单击Create Block Design。
图3.8查找IP对话框界面
2 出现Create Block Design对话框界面。在该界面中,使用默认的Design name: design_1。3 单击OK按钮。4 在Vivado当前设计界面中,出现名为Diagram的窗口界面。在该界面中,将完成系统设计。
5 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面,如图3.8所示。在该界面的Search右侧的文本框中输入xup_。在下面的窗口中,列出了Xilinx大学计划XUP提供的最基本的组合逻辑和时序逻辑元件IP。首先选择并单击XUP 2input AND,将名为xup_and2_0的两输入逻辑与IP核添加到Diagram设计界面中。
6 选择xup_and2_0并复制,在Diagram界面中再添加一个名为xup_and2_1的IP核。
7 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP 3input AND,将名为xup_and3_0的3输入逻辑与IP核添加到Diagram设计界面中。
8 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP 2input XOR,将名为xup_xor2_0的2输入逻辑异或IP核添加到Diagram设计界面中。9 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP 3input OR,将名为xup_x
图3.9添加元件后的布局
or3_0的3输入逻辑或IP核添加到Diagram设计界面中。10 调整这些IP核在Diagram的布局,如图3.9所示。
11 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP 1input INV,将名为xup_inv_0的逻辑非IP核添加到Diagram设计界面中。
12 选择xup_inv_0,并复制它两次,在Diagram界面中再分别添加名为xup_inv_1和xup_inv_2的IP核。
13 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP dff,将名为xup_dff _0的D触发器IP添加到Diagram设计界面中。
14 选择xup_dff_0,并复制它两次,在Diagram界面中再分别添加名为xup_dff_1和xup_dff_2的IP核。15 单击Diagram左侧一列工具栏中的按钮,出现查找IP对话框界面。在该界面Search右侧的文本框中输入xup_。在下面的窗口中,选择并单击XUP clk_divider,将名为xup_clk_divider _0的分频器IP添加到Diagram设计界面中。
16 在Diagram设计界面中,双击名为xup_clk_divider_0的块图符号。
17 出现Recustomize IPXUP clk_divider1.0对话框界面。在该界面中,在Size右侧输入100000000。
注: Size为分频因子。在该设计中,使用外部100MHz时钟,经过Size分频后,得到1Hz时钟,并提供给计数器。18 调整这些IP核在Diagram的布局,如图3.10所示。
图3.10调整的元件布局
19 当把鼠标光标放到IP符号的引脚上时,鼠标的光标会变成铅笔形状,然后拖曳鼠标一直到目标IP的引脚上,这样就能将不同的元件连接在一起。
20 将所有的元件,按照第1章1.11.3节给出的逻辑表达式进行连接,连接后的系统结构,如图3.11所示。
图3.11连接完成后的系统整体结构
21 把鼠标放到名为xup_dff_0 IP元件的q端口,右击,出现浮动菜单。在浮动菜单内,选择Make External。
22 可以看到,从q端口上自动引出一个名为q的端口。
23 再次选中引出的该端口,在Diagram左侧的External Port Properties窗口中,选择General标签。在该标签窗口界面Name右侧的文本框中输入q0,将该端口的名字改为q0。24 类似地,引出xup_dff_1的q端口,并将该端口的名字改为q1。25 类似地,引出xup_dff_2的q端口,并将该端口的名字改为q2。26 类似地,引出xup_clk_divider_0的clkin端口,并将该端口的名字改为clk。27 在Diagram设计界面左侧的一列的工具栏中,单击按钮,Vivado将自动重新调整布局。28 调整完成后的布局结构,如图3.12所示。
图3.12重新调整布局后的系统整体结构
29 按F6按键,对设计进行有效性验证。3.3.4生成设计输出文件本节将对前面的块设计进行进一步处理并生成输出文件,主要步骤包括:1 在Vivado设计界面的Block Design窗口中,单击Sources标签,如图3.13所示。
图3.13Sources窗口界面
2 在该窗口界面中,选中design_1,右击,出现浮动菜单。在浮动菜单内,选择Generate Output Products。3 出现Generate Output Products对话框界面。在该界面中,使用默认设置。4 单击Generate按钮。5 再次选中design_1,右击,出现浮动菜单。在浮动菜单内,选择Create HDL Wrapper。6 出现Create HDL Wrapper对话框界面。在该界面,使用默认设置Let Vivado manage wrapper and autoupdate。7 单击OK按钮。3.4XDC文件原理及添加方法本节将介绍XDC约束相关的语法规则。3.4.1XDC的特性Xilinx Vivado集成开发环境使用Xilinx设计约束Xilinx Design Constraints,XDC格式。XDC约束基于标准的Synopsys的设计约束Synopsys DesignConstraints,SDC格式。SDC已经使用和发展了20多年,使得它成为用于描述设计约束的流行和被验证过的格式。
1 XDC约束是以下约束的组合1 业界标准的Synopsys设计约束SDC V1.9;2 Xilinx专有的物理约束。
2 XDC文件具有以下特性
1 它们不是简单的字符串,而是遵循Tcl语法的命令;2 通过Vivado Tcl翻译器,就可以像理解其他Tcl命令那样理解它们;3 类似于其他Tcl命令那样,可以读取,然后按顺序地从语法上分析它们。
3 设计者可以在设计流程的不同阶段通过以下方式输入XDC约束
1 将约束保存在一个或者多个XDC文件中。可以通过下面的方法将XDC加载到存储器中:① 使用read_xdc命令;② 将它添加到其中一个设计工程约束集中。
XDC文件只接收内建的Tcl命令: set、list和expr。2 通过Tcl脚本生成约束。可以通过下面的方法运行Tcl脚本:① 运行source命令;② 将Tcl脚本添加到其中一个设计工程约束集中。
3.4.2约束文件的使用方法默认地,所有添加到约束集中的XDC文件和Tcl脚本都可用于综合和实现过程。通过在XDC文件中设置used_in_synthesis和used_in_implementation属性,或通过Tcl脚本来修改这种行为。属性值为TURE或者FALSE。注: DONT_TOUCH属性不会受到上面属性设置的影响,如果在综合时使用DONT_TOUCH,则将其传递到实现过程,与used_in_synthesis和used_in_implementation属性无关。在Vivado集成开发环境中,可以修改XDC的使用方法:
1 在源文件窗口中,选择相应的约束文件;2 在源文件属性窗口中,选择不选择Synthesis和Implementation前面的复选框。这样,设计者就可以控制在综合和实现的过程中,是否使用相应的约束文件。对应的Tcl命令如下:
set_property used_in_synthesis false [get_files xdc文件名]
set_property used_in_implementation false [get_files xdc文件名]
3.4.3约束顺序Vivado集成开发环境允许设计者使用一个或多个约束文件。虽然使用一个约束文件对于一个完整的编译流程来说看似更方便,但是在一些情况下,这会使得问题更加复杂,比如一个设计使用了不同的IP核或者由不同团队开发的模块。不管设计者在设计中,使用了一个还是多个XDC文件,Xilinx推荐设计者使用下面的顺序来组织约束。XDC文件的约束顺序如下:
## Timing Assertions Section
# Primary clocks
# Virtual clocks
# Generated clocks
# Clock Groups
# Input and output delay constraints
## Timing Exceptions Section sorted by precedence
# False Paths
# Max Delay Min Delay
# Multicycle Paths
# Case Analysis
# Disable Timing
## Physical Constraints Section
# located anywhere in the file, preferably before or after the timing constraints
# or stored in a separate XDC file
注:1 Xilinx推荐将时序约束和物理约束分别保存在两个不同的文件中。设计者也可以在一个单独的文件中对某个模块指定约束。2 如果在工程中,包含了一个IP,这个IP有自己的约束,则在约束集中,并不出现相应的约束文件,它将和IP源文件一起出现。
3 如果在工程中,包含了多个约束文件。一般来说,Vivado工具首先读取列表最上面的约束文件,最后读取最下面的约束文件。设计者可以在集成开发环境中,将约束文件移动到所期望的位置,用来修改约束文件在整个设计中的处理顺序。等效的Tcl命令格式为
Reorder_files -fileset constrs_1-before [get_files XDC文件名]\
[get_files XDC文件名]
在非工程模式下,read_xdc的调用顺序决定了xdc文件的评估顺序。4 如果存在IP约束文件,则先读取IP约束文件,然后再读取用户约束文件。设计者可以在源文件属性窗口修改读取IP约束文件的顺序。等效的Tcl命令格式为
set_property PROCESSING_ORDER EARLY [get_files XDC文件名]
3.4.4XDC约束命令在XDC文件中有效的命令,如表3.1所示。
表3.1XDC文件中有效的命令
时序约束物理约束网表对象查询create_clockadd_cells_to_pblockall_cpuscreate_generated_clockcreate_pblockall_dspsgroup_pathdelete_pblockall_faninset_clock_groupsremove_cells_from_pblockall_fanoutset_clock_latencyresize_pblockall_hsiosset_data_checkcreate_macroall_inputsset_disable_timingdelete_macrosall_outputsset_false_pathupdate_macroall_ramsset_input_delayall_registers
set_output_delay网表约束all_ffs
set_max_delayset_loadall_latchesset_min_delayset_logic_dcget_cellsset_multicycle_pathset_logic_oneget_netsset_case_analysisset_logic_zeroget_pinsset_clock_senseset_logic_unconnectedget_portsset_clock_uncertaintyget_debug_coresset_input_jitterget_debug_portsset_max_time_borrowset_propagated_clockset_system_jitterset_external_delay续表
器件对象查询时序对象查询通用
get_iobanksall_clockssetget_package_pinsget_path_groupsexprget_sitesget_clockslistget_bel_pinsget_generated_clocksfilterget_belsget_timing_arcscurrent_instanceget_nodesget_hierarchy_separatorget_pipsset_hierarchy_separatorget_site_pinsget_propertyget_site_pipsset_propertyget_slrsset_unitsget_tilesendgroupget_wiresstartgroup
3.4.5添加XDC文件本节将添加XDC文件,主要步骤包括:1 在Sources窗口中,选择Constraints文件夹,右击,出现浮动菜单。在浮动菜单内,选择Add Sources选项。2 出现Add Sources对话框界面。默认选中Add or Create Constaints前面的复选框。3 单击Next按钮。4 出现Add SourcesAdd or Create Constraints对话框界面。在该界面中,单击Create File按钮。5 出现Create Constraints File对话框界面。在该界面中,在File name右侧的文本框中输入top。
注: 该约束文件的名字为top.xdc。
6 单击OK按钮。7 单击Finish按钮。8 在Vivado主界面左侧的Project Manager对话框界面中,选择并展开Synthesis。在展开项中,单击Run Synthesis。Vivado开始对设计进行自动综合的过程。
注: 在Vivado中,综合Synthesis是将当前所得到的RTL代码转换成电路网表的过程。
9 等待综合完成后,出现Synthesis Completed对话框界面。在该界面中,选中Open Synthesized Design前面的复选框。10 单击OK按钮。11 在Vivado主界面下方出现IO Ports界面,如图3.14所示。在该界面中,展开Scalar ports。可以看到在展开项中,出现clk、q0、q1和q2四个端口。其中,clk为输入,q0、q1和q2为输出。
图3.14IO端口约束界面
注: 在该设计中,使用A7EDP1开发平台上的100MHz时钟作为clk输入; 使用A7EDP1开发平台上的三个LED灯,作为计数的输出。在A7EDP1开发平台上,时钟、LED灯和XC7A75T FG484 FPGA的连接关系,如表3.2所示。
表3.2时钟、LED灯和XC7A75TFG484 FPGA的连接关系
外设名称标号所对应的设计端口所连接FPGA的引脚时钟U3clkK19LED灯LED0q0Y17LED灯LED1q1Y16LED灯LED2q2AA16
12 在每行引脚所对应的Site下的文本框中,输入所连接FPGA引脚的位置,如图3.15所示。
图3.15约束完IO端口后的约束界面
13 在每行引脚所对应的IO Std列下面的下拉框中,选择LVCMOS33,如图3.15所示。14 按Ctrl S键。准备保存约束条件。15 出现Out of Date Design对话框界面。16 单击OK按钮。17 出现Save Constraints对话框界面。在该界面中,默认选中Select an existing file前面的复选框。注: 默认将约束条件保存到top.xdc文件。
18 单击OK按钮。
图3.16恢复默认布局选项
19 在Vivado主界面上方中间的下拉框中,选择Default Layout选项,如图3.16所示。注: 执行该步骤将使得Vivado主界面恢复到添加XDC文件以前的界面。
20 在Sources标签窗口中,找到并展开Constrs_1文件夹。在该文件夹中,找到并双击top.xdc,打开该文件。文件中的约束条件如代码清单31所示。代码清单31top.xdc文件
set_property PACKAGE_PIN K19 [get_ports clk]
set_property PACKAGE_PIN Y17 [get_ports q0]
set_property PACKAGE_PIN Y16 [get_ports q1]
set_property PACKAGE_PIN AA16 [get_ports q2]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports q0]
set_property IOSTANDARD LVCMOS33 [get_ports q1]
set_property IOSTANDARD LVCMOS33 [get_ports q2]
注: 由于在该设计中的clk没有使用Artix7上的专用时钟输入引脚,为了防止Vivado对设计进行后续处理时出错,需要在top.xdc文件中,添加下面的约束条件:
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
该约束条件告诉Vivado工具不使用时钟专用的布线资源。
21 保存并关闭该文件。
3.5查看综合后的结果本节将介绍查看综合后结果的方法,主要步骤包括:1 在Vivado当前主界面左侧的Flow Navigator窗口中,找到并展开Synthesis。在展开项中单击Run Synthesis。
2 由于前面已经进行过综合的过程,因此会弹出Run Synthesis对话框界面,在该界面中,提示是不是重新运行该过程。3 单击OK按钮。4 再次弹出Run Synthesis对话框界面。在该界面中,给出提示信息。5 单击OK按钮。6 当完成综合过程后,出现Synthesis Completed对话框界面。在该界面中,选择Open Synthesized Design前面的对话框。7 单击OK按钮。8 在Vivado主界面左侧的Flow Navigator窗口中,找到并展开Synthesis。在Synthesis展开项中找到并展开Synthesized Design。在Synthesized Design展开项中,找到并单击Schematic。9 在Vivado右侧出现Schematic窗口。在该界面中,给出了综合后的结构,如图3.17所示。
图3.17综合后的原理图
思考与练习33请双击图3.17中名为design_1的块图符号,打开内部结构,对内部结构进行分析。10 关闭Schematic界面。
3.6查看实现后的结果本节将查看实现后的结果,主要步骤包括:1 在Vivado当前主界面左侧的Flow Navigator窗口中,找到并展开Implementation。在展开项中,单击Run Implementation。注: Vivado会自动执行实现过程,该过程包括翻译、映射和布局布线。
2 当完成实现过程后,出现Implementation Completed对话框界面。在该界面中,默认选择Open Implemented Design前面的复选框。3 在Device窗口中,通过放大按钮观察器件内部的细节,如图3.18所示。
图3.18Device中的布局和布线
注: 在图中,蓝色表示所使用的逻辑资源,绿色表示所使用的连线资源。
思考与练习34分析三位八进制计数器在底层的布局布线的结果。
3.7生成和下载比特流文件本节将生成比特流文件,并将该文件下载到A7EDP1开发平台的xc75tfgg4841 FPGA器件中。
3.7.1生成比特流文件下面介绍生成比特流文件的方法,该文件将作为配置文件下载到A7EDP1开发平台的xc75tfgg4841 FPGA器件中,生成比特流文件的主要步骤包括:1 在Vivado左侧的Flow Navigator窗口中,找到并展开Program and Debug。在展开项中单击Bitstream Settings。
2 Vivado开始自动生成比特流的过程。3 当成功生成比特流文件后,出现Bitstream Generation Completed对话框界面。4 单击Cancel按钮。
3.7.2下载比特流文件当生成用于配置FPGA的比特流文件后,将比特流文件下载到目标FPGA器件。
Vivado集成工具允许设计者连接一个或多个FPGA进行编程,同时和这些FPGA进行交互。可以通过Vivado集成环境用户接口或使用Tcl命令连接FPGA硬件系统。在这两种方式下,连接目标FPGA器件的步骤都是相同的,包括:
1 打开硬件管理器Hardware Manager。2 通过运行在主机上的硬件服务器Hardware Server,打开硬件目标器件。3 给需要编程的目标FPGA器件,分配相应的比特流编程文件。4 编程或者下载编程文件到目标器件。使用Vivado硬件管理器编程FPGA的主要步骤包括:1 通过USB电缆,将A7EDP1开发平台上名为J12的USBJTAG插座与PC笔记本计算机上的USB接口进行连接。
2 将外部 5V电源连接到A7EDP1开发平台的J6插座。3 将A7EDP1开发平台上的J11跳线设置为EXT模式,即外部供电模式。4 将A7EDP1开发平台上的J10插座设置为JTAG,表示下面将使用JTAG下载设计。5 将A7EDP1开发平台上的SW8开关设置为ON状态,给开发平台供电。6 在Vivado主界面左侧的Flow Navigator窗口下方,找到并展开Program and Debug选项。在展开项中找到并左击Open Hardware Manager选项。7 在Vivado界面上方出现Hardware Managerunconnected界面,如图3.19所示。
图3.19启动硬件目标入口
8 单击Open target选项,出现浮动菜单。在浮动菜单内,选择Auto Connect选项。9 出现Auto Connect对话框界面,如图3.20所示。
图3.20正在连接服务器界面
10 当硬件设计正确时,在Hardware Manger窗口中,会出现所检测到的FPGA类型和JTAG电缆的信息,如图3.21所示。
图3.21检测到FPGA器件后的界面
11 在图3.21中,选中名为xc7a75t_0的一行,右击,出现浮动菜单。在浮动菜单内,选择Program Device。
12 出现Program Device对话框界面。在该界面中,默认将Bitstream file比特流文件的路径指向当前设计工程路径
E: eda_verilogcounter_ipproject_1project_1.runsimpl_1design_1_wrapper.bit
13 单击Program按钮。Vivado工具自动将比特流文件下载到FPGA中。思考与练习35观察A7EDP1开发平台上的LED2~LED0三个LED灯是否以1Hz频率按000111000这样的规律变化。
注: 当FPGA引脚输出逻辑0时,LED灯灭; 当FPGA引脚输出逻辑1时,LED灯亮。
3.8生成和下载PROM文件
本节将生成和下载PROM到A7EDP1开发平台上型号为N25Q32的Flash中。主要步骤包括:
注: 在执行以下步骤前,确保A7EDP1开发平台已正常上电,并正确连接USB电缆。
1 在Vivado主界面左侧的Flow Navigator窗口中,找到并展开Program and Debug。在展开项中找到并单击Bitstream Settings。
2 出现Project Settings对话框界面。在该界面左侧窗口中,默认选中Bitstream图标。在右侧窗口中,选中bin_file右侧的复选框。该选项表示在生成比特流文件的同时,生成bin文件。3 单击OK按钮,退出Project Settings对话框界面。4 在Program and Debug下面,找到并单击Generate Bitstream。重新生成比特流文件,并且也生成了bin文件。5 出现Bitstream Generation Completed对话框界面。在该界面中,选择Open Hardware Manager前面的复选框。6 单击OK按钮。7 在Hardware Manager窗口中,单击Open target,出现浮动菜单。在浮动菜单内,选择Auto Connect。8 当正确检测到FPGA器件后,在Hardware窗口中出现所检测到的器件信息。在该界面中,选中xc7a75t_0,右击,出现浮动菜单。在浮动菜单内,选择Add Configuration Memory Device。
9 出现Add Configuration Memory Device对话框界面,如图3.22所示。为了加快搜索Flash的速度,按图设置下面参数:
图3.22选择外部Flash类型界面
① Manufacturer: Micron。② DensityMb: 32。③ Type: spi。④ Width: x1_x2_x4。在下面的Select Configuration Memory Part列表中,选中名为n25q323.3vspix1_x2_x4的一行。10 单击OK按钮,退出Add Configuration Memory Device对话框界面。11 出现Add Configuration Memory Device Completed对话框界面。12 单击OK按钮,退出该对话框界面。
13 出现Program Configuration Memory Device对话框界面,如图3.23所示。在该界面中单击Configuration file: 右侧的按钮。
图3.23选择编程文件界面
14 出现Specify File对话框界面。在该界面中指向下面的当前工程路径:
E: eda_verilogcounter_ipproject_1project_1.runsimpl_1
在该路径下选中名为design_1_wrapper.bin的文件。15 单击OK按钮。退出Specify File对话框界面。16 在Program Configuration Memory Device对话框界面中添加了编程文件,其余按默认参数设置。17 单击OK按钮。Vivado开始将bin文件烧写到N25Q32存储器中。
注: 这个过程需要对SPI Flash进行擦除,需要等待几分钟才能完成该操作过程。
18 出现Program Flash对话框界面,该界面提示Flash programming completed successfully信息。19 单击OK按钮。20 给A7EDP1开发平台断电,然后将开发平台上名为J10的跳线设置到标记SPI的位置。
21 重新给A7EDP1开发平台上电。思考与练习36观察SPI Flash启动后,LED的变化规律是否满足设计要求。
|
|