您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
FPGA现代数字系统设计 基于Xilinx可编程逻辑器件与Vivado平台
装帧: 平装
出版社: 清华大学出版社
作者: 孟宪元、钱伟康
出版日期: 2019-04-01
商品条码: 9787302499138
版次: 1
开本: 其他
页数: 503
出版年份: 2019
定价:
¥79
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
编辑推荐
遵循摩尔定律的发展规律,FPGA技术已经进入到异构多核处理器和异构并行计算的崭新阶段,本书以FPGA的发展阶段讲述器件的架构和特性,以Verilog语言作为硬件描述语言讲述数字系统的设计,保证设计功能通过仿真验证的正确性,在Vivado设计套件中通过RTL分析、综合和布局布线的实现等进程达到时序收敛,性能上满足设计要求,本书也介绍了有关同步设计的技巧和要点,高级综合等特性。DSP系统和嵌入式系统的设计流程和方法也作了介绍,最后以多个设计实例对前述的设计方法作了详尽的说明。 ? 内容全面 涵盖FPGA及Vivado的基本功能,及其在数字系统中的多种设计流程。 ? 技术前沿 基于当前的Vivado设计套件版本,论述了FPGA主流设计技术。 ? 易于实践 全书结合大量实例论述,图文并茂、操作性强,便于快速动手实践。
内容简介
本书是以Xilinx公司全可编程FPGA和SoC为基础,针对近期新的设计工具软件——Vivado介绍FPGA设计理论与设计方法。 全书分为8章,包括现代数字系统设计技术概论、可编程逻辑器件、Verilog HDL硬件描述语言、Vivado设计流程、数字系统的设计与综合、基于FPGA的DSP系统设计、Zynq嵌入式系统设计技术和EGO1综合性设计项目举例。各章都安排了针对性强的已验证过的设计实例,并附有Verilog HDL手册、EGO1开发板资料,供师生在教学中选用。 本书可作为高等院校电子、通信、自动化、计算机等专业本科教学参考书,也可作为信息类专业研究生和数字系统设计人员的参考书。
作者简介
孟宪元 清华大学电子工程系教授,长期从事EDA相关技术和课程教学和科研工作,具有超过20年的FPGA技术研究和项目开发经历,亲历了FPGA技术的发展历程,积累了丰富实践经验,曾出版《新一代FPGA设计套件Vivado应用指南》等畅销教材。
目录
第1章现代数字系统设计概论 1.1概述 1.2数字系统的层次化结构 1.2.1开关电路级的基础——CMOS反相器 1.2.2逻辑级的门电路 1.2.3寄存器传输级的有限状态机 1.2.4数字系统的系统级构成 1.2.5复杂系统的算法级设计 1.3数字系统设计的描述方法 1.3.1原理图设计 1.3.2程序设计法 1.3.3IP模块的使用 1.3.4基于模型的设计技术 1.3.5高层次综合——HLS设计 1.3.6脚本设计技术 1.4IP技术 1.4.1IP知识产权模块 1.4.2IP模块的种类与应用 1.4.3片上系统和IP核复用 1.5全可编程FPGA/SoC实现智能化系统 1.5.1软件智能化和硬件很好化 1.5.2在线可重构技术 1.5.3可重配置加速堆栈 本章小结 习题 第2章可编程逻辑器件 2.1概述 2.1.1可编程逻辑器件概述 2.1.2可编程逻辑器件分类 2.2CPLD的结构和工作原理 2.2.1简单可编程逻辑器件原理 2.2.2CPLD的结构和工作原理 2.3FPGA的结构和工作原理 2.3.1SRAM查找表类型 2.3.2反熔丝多路开关类型 2.4逻辑级FPGA的结构和工作原理 2.4.1可编程逻辑 2.4.2可编程互连线 2.4.3可编程I/O 2.5系统级FPGA的结构和工作原理 2.5.1片上存储器及接口 2.5.2数字时钟管理 2.5.3时钟资源 2.5.4系统级I/O 2.6平台级FPGA的结构和工作原理 2.6.1DSP模块 2.6.2高速串行接口 2.7全可编程FPGA的特性和结构 2.7.1采用统一的7系列架构 2.7.2高性能和低功耗结合的工艺 2.8ASIC架构的UltraScale系列 2.8.1UltraScale架构 2.8.2SSI互连技术 2.9FPGA的配置 2.9.1编程原理简介 2.9.2编程模式 2.9.3典型的配置电路 2.9.4编程流程 2.9.5部分重配置 本章小结 习题 第3章Verilog硬件描述语言 3.1硬件描述语言概述 3.1.1硬件描述语言特点 3.1.2层次化设计 3.2Verilog HDL程序的基本结构 3.2.1模块结构分析 3.2.2模块的实例化 3.3Verilog HDL词法、数据类型和运算符 3.3.1词法约定 3.3.2数据类型 3.3.3运算符 3.4Verilog HDL行为语句 3.4.1赋值语句 3.4.2顺序块和并行块语句 3.4.3结构说明语句 3.4.4条件语句 3.4.5循环语句 3.4.6系统任务和系统函数 3.4.7编译预处理命令 3.4.8Verilog HDL可综合设计 3.5Verilog HDL设计举例 3.5.1组合电路设计 3.5.2时序电路设计 3.5.3数字系统设计 3.5.4数码管扫描显示电路 3.5.5LED通用异步收发电路设计 3.6Testbench文件与设计 本章小结 习题 第4章Vivado设计工具 4.1Vivado工具概述 4.1.1单一的、共享的、可扩展的数据模型 4.1.2标准化XDC约束文件——SDC 4.1.3多维度分析布局器 4.1.4IP封装器、集成器和目录 4.1.5Vivado HLS 4.1.6其他特性 4.1.7TCL特性 4.1.8Vivado按键流程执行设计项目 4.2Vivado设计流程 4.2.1创建工程 4.2.2功能仿真 4.2.3RTL级分析 4.2.4综合设计 4.2.5分配引脚和时序 4.2.6设计实现 4.2.7生成bit文件 4.2.8下载 4.3产生IP集成器子系统设计 4.3.1产生IP集成器模块设计 4.3.2定制IP 4.3.3完成子系统设计 4.3.4产生IP输出产品 4.3.5例示IP到设计中 4.4硬件诊断 4.4.1设计诊断概述 4.4.2Vivado逻辑诊断IP核 4.4.3HDL例示法添加ILA核 4.4.4系统内诊断uart_led设计 4.4.5网表插入法添加诊断核 4.4.6添加VIO诊断核 本章小结 习题 第5章数字系统的高级设计与综合 5.1Verilog编程风格 5.1.1逻辑推理 5.1.2陷阱 5.1.3设计组织 5.1.4针对Xilinx FPGA的HDL编码 5.2综合优化 5.2.1速度与面积 5.2.2资源共享 5.2.3流水线、重新定时和寄存器平衡 5.2.4有限状态机编译 5.3数字系统的同步设计 5.3.1同步设计基本原理 5.3.2建立和保持时间 5.3.3时序例外约束 5.3.4同步设计中的异步问题 5.4数字系统的综合 5.4.1数字系统综合概述 5.4.2系统级综合 5.4.3高级综合 5.4.4寄存器传输级综合 5.4.5逻辑级综合 本章小结 习题 第6章FPGA DSP系统设计 6.1DSP基础 6.1.1DSP的基本概念 6.1.2FPGA实现DSP的特点 6.2DSP硬核的结构与使用 6.2.1输入和输出端口 6.2.2DSP48E1模块的操作 6.2.3输入端口逻辑电路 6.2.4输出端口逻辑 6.3FPGA设计DSP技术 6.3.1浮点数与定点数的表示与转换 6.3.2采样周期的设置 6.3.3System Generator模块 6.3.4Black Box模块 6.3.5ModelSim模块 6.3.6Gateway In模块和Gateway Out模块 6.3.7Concat模块、Convert模块、Reinterpret模块和Slice模块 6.3.8模块通用属性 6.4DSP48实现MAC 6.4.1利用Xilinx Blockset设计12×8 MAC 6.4.2利用Simulink仿真12×8 MAC 6.4.3利用System Generator Block产生代码 6.4.4实现12×8 MAC设计 6.4.5硬件协同仿真校验设计 6.5设计FIR滤波器 6.5.1产生FIR滤波器的系数 6.5.2输入FIR滤波器系数 6.5.3在Simulink中仿真FIR滤波器 6.5.4实现FIR滤波器 6.5.5连接演示板,通过Simulink仿真设计 6.6设计MAC FIR滤波器 6.6.1分析系数 6.6.2添加控制逻辑并参数化 6.6.3添加双口RAM 6.6.4在数据端口添加填充位和去填充位 6.6.5完成MAC FIR设计 6.6.6用各种信源测试设计 6.6.7执行硬件在环路校验 6.7Vivado HLS 6.7.1高级综合的调度和装配 6.7.2数据通道+控制器架构 6.7.3理解Vivado HLS 6.7.4高级综合的优化方法 本章小结 习题 第7章嵌入式系统Zynq设计 7.1Zynq概述 7.2Zynq设计入门 7.2.1Vivado工程创建 7.2.2由Vivado创建Zynq嵌入式系统 7.2.3SDK应用程序编写 7.3Zynq嵌入式系统调试方法 7.3.1Vivado硬件调试 7.3.2使用SDK进行Zynq调试 7.4调试Linux应用 7.4.1产生SDK软件工作空间 7.4.2启动超级终端 7.4.3添加和诊断软件应用 本章小结 习题 第8章综合设计实例 8.1实例一: 基于VGA接口的设计实例 8.1.1设计任务 8.1.2原理分析与系统方案 8.2实例二: PS/2键盘编解码演示系统 8.2.1设计任务 8.2.2原理分析与系统方案 8.2.3设计实现 8.3实例三: 实现SOPC系统 8.3.1设计任务和方案 8.3.2实验步骤 8.3.3实验调试设备 本章小结 习题 附录AEGO1用户手册 附录BVerilog HDL(IEEE 13642001)关键词表及说明 参考文献
摘要
第5章 数字系统的高级 设计与综合 从基于原理图的设计转到硬件描述语言设计是电子设计的一次变革,它允许一个设计者从理论上以工艺无关的行为方式来描述所设计的数字系统模型。随着设计要求不断提高,复杂性不断增加,用硬件描述语言的数字电路设计在很多方面已经变成单调和费时的事情,设计者迫切需要更高层次抽象的设计与综合技术,为了适应技术的发展,大量高层次的设计技术与综合工具可提供给设计工程师使用。 对于结构比较清晰的数字系统,可以利用HDL硬件描述语言直接在寄存器传输级(即RTL级)对设计的系统进行描述,这种描述是对系统行为的描述,然后由综合工具进行综合,利用硬件来实现数字系统。 在第3章介绍Verilog HDL语言的基础上,第4章结合Vivado设计软件介绍了如何将描述系统行为的设计程序进行硬件实现,并加载到目标器件进行调试和验证。由于设计者的程序的编码风格和采用的设计技术直接影响系统模型的建立和综合的结果,本章将讨论如何使编写的程序能够建立正确的系统模型,并被软件综合成设计者设想的结构,包括编码风格的影响、综合工具优化的使用,以及同步设计技术的概念和措施。最后,按照数字系统的层次结构简要介绍综合可能采用的一些方法,以便读者理解从语言描述到硬件实现的过程。 5.1Verilog编程风格 对于使用硬件描述语言(HDL)编程的抽象级描述,综合优化技术仅能协助设计者满足设计要求。综合工具遵循编码构造和按照RTL中展开的结构在最基础的层次上映射逻辑。如果没有类似FSM和RAM等十分规则的结构,综合工具可以从代码中提取功能,识别可替代的结构,并相应地实现。 除了优化之外,为综合编码时的基本指导原则是不减少功能而使所写的结构和伪指令最小化,但是这样可能在仿真和综合之间产生不一致的结果。一个好的编码风格一般要保证RTL仿真与可综合的网表具有相同的性能。一类偏差是厂商支持的伪指令,它可以按照专门注释的形式(不考虑仿真工具)加入RTL代码,并引起综合工具按RTL代码本身不明显的方式推演一个逻辑结构。 由于综合工具只能对可综合的语句产生最终的硬件实现,如果设计者对语言规则和电路行为的理解不同,则可能使设计描述的编码风格直接影响EDA软件工具的综合结果。例如,描述同一功能的两段RTL程序可能产生出时序和面积上接近不同的电路,好的描述方式就是综合器容易识别并可以综合出所期望的电路,电路的质量取决于工程师使用的描述风格和综合工具的能力。 5.1.1逻辑推理 1. ifelse和case结构——特权与并行性 在FPGA设计的范围内,把一系列用来决定逻辑应该采取什么动作的条件称作一个判决树。通常,可以分类成ifelse和case结构。考虑一个十分简单的寄存器写入的示例。 例51 module regwrite( outputreg rout, input clk, input[3:0]in, input[3:0]sel); always @(posedge clk) if(sel[0])rout <= in[0]; else if (sel[1])rout <= in[1]; else if (sel[2])rout <= in[2]; else if (sel[3])rout <= in[3]; endmodule 这类ifelse的结构可以推理成如图51所示的多路选择器的结构。 这类判决结构可以按许多不同的方式来实现,取决于速度/面积的权衡和要求的特权。下面介绍如何针对不同的综合结构对各种判决树进行编码和约束。 ifelse结构固有的性质是特权的概念。出现在ifelse语句的条件所给予的特权超过判决树中的其他条件。所以,上述结构中更高的特权将对应靠近链的末尾和更接近寄存器的多路选择器。 在图51中,如果选择字的位0被设置,则不管选择字的其他位的状态,in0将被寄存。如果选择字的位0没有被设置,则利用其他位的状态来决定通过寄存器的信号。通常,只有当某一位(在此情况是大力度优惠位LSB)前面的所有位均没有被设置时,则利用该位来选择输出。这个特权多路选择器的真正实现如图52所示。 图51串行多路选择器结构的简单特权 图52特权多路选择器 无论ifelse结构最后如何实现,将赋予出现在任何给定的条件之前的条件语句更高的特权。所以,当判决树有特权编码时应该利用ifelse结构。 另一方面,case结构通常(不是总是)用于所有条件互不相容的情况。换言之,可以在任何时刻只有一个条件成立的情况下优化判决树。例如,根据其他多位网线或寄存器(例如加法器的译码器)进行判决时,在一个时刻只有一个条件成立。这与上述用ifelse结构实现的译码操作是一样的。为了在Verilog中实现接近相同的功能,可以采用case语句。 例52 case(l) sel[0]:rout <= in[0]; sel[1]:rout <= in[1]; sel[2]:rout <= in[2]; sel[3]:rout <= in[3]; endcase 由于case语句是ifelse结构的一种有效替代,许多初学者以为这是自动地无特权判决树的实现。对于更严格的VHDL语言,该想法恰巧是正确的; 但是对于Verilog语言,却不是这种情况,可以从图53中case语句的实现看出。 图53特权译码逻辑 如图53所示,缺省的部分是通过特权译码来设置多路选择器上相应的使能引脚,这导致许多设计者落入陷阱。如果综合工具报告case结构不是并行的,则RTL必须把它改变为并行的。如果特权条件是成立的,在相应的位置应该采用ifelse结构。 2. 接近条件 目前为止检查的判决树中,如果case语句的条件没有一个是成立的,则综合工具将寄存器的输出返回到判决树作为一个默认条件(这个行为取决于综合工具默认的实现方式,但是本节假设它是成立的)。这个假设是如果没有条件满足,数值不改变。 建议设计者添加默认条件。这个默认值可以是也可以不是当前的数值,但是,为每个case条件分配输出一个数值,可避免工具自动地锁存当前值。用这个默认条件消除寄存器使能,如例53中修改后的case语句。 例53 //不安全的case语句 module regwrite( outputreg rout, input clk, input[3:0]in, input[3:0]sel); always @(posedge clk) case(l) sel[0]:rout <= in[0]; sel[1]:rout <= in[1]; sel[2]:rout <= in[2]; sel[3]:rout <= in[3]; default:rout <= 0; endcase endmodule 如图54所示,默认条件现在是明确的,作为多路选择器一个可供选择的输入实现。虽然触发器不再要求一个使能信号,总的逻辑资源不一定减少。同时应注意到,如果每个条件不对寄存器定义一个输出(通常发生在单个case语句分配多个输出时),默认条件和任何综合的特征位都不能防止产生一个锁存器。为了保证总有一个数值分配到寄存器,可以在case语句之前利用初始赋值分配给寄存器一个数值,如例54所示。 图54为默认条件编码 例54 module regwrite ( output regrout, input clk, input[3:0]in, input[3:0]sel); always @(posedge clk) rout <= 0; case(l) sel[0]:rout <= in[0]; sel[1]:rout <= in[1]; sel[2]:rout <= in[2]; sel[3]:rout <= in[3]; endcase endmodule 这类编码风格消除了对默认情况的需要,也保证了如果没有其他赋值定义时,寄存器会分配到这个默认值。 接近条件可以用正确的编码方式来设计,推荐的方法是避免该约束仅由设计保证接近的覆盖,如前所述,即在case语句之前利用默认条件和设置默认数值。这将使代码具有更高的可移植性,减少不希望的失配可能性。设置FPGA综合选项时优选的风险之一是仅允许一个默认设置,因此所有的case语句自动地假设是parallel_case、full_case或二者兼之。厂商明确地提供了该选项。实际上,应该尽量不要使用这个选项,它会产生隐含的风险,以不正确的形式进行代码综合,并且用基本的系统内测试无法发现,在仿真中会产生不确定性。所以,parallel_case和full_case可以引起仿真和综合的失配。 3. 多控制分支 设计者通常犯的错误(在较差的编码风格中)是对单个寄存器不连接控制分支。在例55中,oDat被专享的判决树中两个不同的数值赋值。 例55 //不好的编程风格 module separated( output regoDat, inputiclk, input iDat1, iDat2, iCtrl1, iCtrl2); always @ (posedge iclk)begin if (iCtrl2) oDat <= iDat2; if (iCtrl1) oDat <= iDat1; end endmodule 因为无法说明iCtrl1和iCtrl2是否是互不相容的,因此该编码是模糊的,综合工具必须为实现做一定的假设。特别地,当二者的条件同时成立时,没有明显的方式管理特权。因此, 图55带明显特权的实现 综合工具必须基于这些条件发生的顺序赋予特权。在这种情况下,如果条件最后出现,它将获得优于第一个条件的特权。 基于图55,iCtrl1有优于iCtrl2的特权,如果交换它们的次序,特权同样也会交换。这与ifelse结构的行为相反,ifelse结构通常把特权给予第一个条件。 所以,好的设计实践是把所有的寄存器赋值保持在单个控制结构内。
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网