本章将讨论FPGA设计中的能耗问题。
相较于相同逻辑功能的ASIC,FPGA这个耗能大户似乎与低功耗设计不沾边。各大厂家也意识到了这一点,陆续推出了多款低功耗CPLD来作为替代。但CPLD的资源有限,限制了它的应用场景。
如今的逻辑器件大多基于CMOS技术,动态功耗取决于栅极和走线上寄生电容的充放电,其计算公式如下:
其中,I代表电流,V是电压,C使寄生电容大小,f是频率。
所以,降低功耗需要从后面三个参数下手。对于FPGA来讲,V使固定的,除非器件,逻辑设计中无法修改;C取决于逻辑中翻转的门的数量以及走线长度;f与时钟频率直接相关。所有的低功耗设计最终都归结为C与f的优化。
在本章中,将重点就一下几点展开讨论:
1)时钟控制对动态功耗的影响及其引起的问题;
2)输入控制;
3)核心电压影响;
4)双边触发器设计指南;
5)减少静态功耗。
通过最小化高翻转率网络的布线长度来降低动态功耗需要对布局和布线进行背景讨论,因此在第 15 章布局规划中进行了讨论。
在同步设计中,最有效且目前应用最广泛的低功耗设计方法便是时钟控制——动态地禁止时钟在特定区域翻转。在FPGA中常用的实现方法包括使用触发器上的 时钟使能引脚 或者 全局时钟mux (BUFGMUX for Xilinx)。
可是,门控时钟虽然可以有效地降低动态功耗,但是这会在电路实现和时序分析中造成困难。
相较于ASIC,系统时钟对FPGA要重要的多。EDA工具正是依据系统时钟进行优化、综合、布局布线、STA等任务。ASIC可以自定义实现low-skew时钟树,而FPGA则需要在既有资源上进行设计。
门控时钟所在区域相当于一个新的时钟域 ,而我们希望的则是时钟域越少越好。
时钟偏移(skew) 是时序分析中的重要概念。各家的FPGA都有相应的时钟缓冲技术来保证系统时钟到各单元的skew尽可能小,也正因此原因,FPGA上几乎很少关心hold-violation问题。但是门控时钟会将系统时钟从专用时钟资源中引入普通逻辑资源,增加clk skew,可能造成hold-violation。
不同的综合工具对这种情况有不同的应对策略。Synplify会默认移除门控时钟,来保证时序健康;其他厂家工具则会忽略门控时钟,按照系统时钟去处理,除非进行了专门的约束(工具会在data信号线上加上一定delay)。
基于CMOS技术的FPGA还有一种经常被忽视的低功耗技术——降低压摆率。理想的状态是截止区和线性区可以瞬间切换,但在实际系统中,则必须考虑状态转换的时间和晶体管在转换期间的行为。 (一顿分析,不是很懂,此处略过,直接上结论) 。
所以,为了最大限度的降低输入设备的功耗,应尽量减少驱动输入的上升和下降时间。
另外,由于引脚悬空状态下的状态不定,可能会处于饱和区的亚稳态点,对功耗产生灾难性后果。所以,不要让FPGA的输入缓冲悬空。(多数厂家工具会对未定义引脚有一个默认端接,当然也可修改端接来配合信号完整性啥的)
通常情况下我们不希望把降压作为降低功耗的一个方式,因为电压降低也意味着性能降低,使得我们在进行时序分析的时候要从最坏的情况考虑。
此外,FPGA的核心电压值一般为指定值的5%~10%,所以我们在 *** 作的时候要万分小心,确保在合法范围内。
动态功耗与信号翻转的频率成正比,因此我们希望大扇出的信号的的信号效率越高越好,而最大扇出的信号正式系统时钟。双沿触发器在原理上可以系统时钟工作效率提高一倍。
但需要注意的是,需要确保所用的器件支持双沿触发器,否则便会生成额外的逻辑来模仿双沿功能呢,得不偿失。
连接到输出引脚的电阻负载在具有总线信号、开漏输出或需要端接的传输线的系统中很常见。在这些情况下,FPGA 输出驱动器上的一个 CMOS 晶体管将需要通过这些电阻负载提供或吸收电流。
对于需要上拉电阻的输出,计算可接受的最小上升时间以尽可能大地调整电阻。
如果有高侧驱动器和低侧驱动器,请确保永远不会发生总线争用,因为这会消耗过多的电流,即使一次只有几纳秒。
对于负载处带有并联端接的传输线,根据系统的要求,可以使用串联端接作为替代,因为串联终端没有稳态电流耗散。
虽然串联终端没有稳态电流耗散,但也有缺点:
如果给定系统可以接受这些性能特征,则串联端接方法将通过端接电阻消除静态功耗。
北大青鸟专为学生设计了“云课堂”,每人一个专属账户,学生随时随地可在云课堂上观看老师讲解的视频,及时巩固复习知识;学生还能在线测试、完成作业、查看优秀笔记,利用网络实现互动式学习,灵活多变效果好。三系减低编码是指在编码过程中,采用三系编码的方式来减少编码的体积。三系编码的基本思想是,将原始数据分为三系,每一系的数据都有一定的特征,可以利用这些特征来减少编码的体积。首先,在编码的过程中,需要对原始数据进行分类,将原始数据分为三系,每一系的数据都有一定的特征,可以利用这些特征来减少编码的体积。其次,在编码的过程中,需要对每一系的数据进行编码,采用不同的编码方式,以便减少编码的体积。最后,在编码的过程中,需要对三系数据进行综合编码,以便最大限度地减少编码的体积。
总的来说,三系减低编码是一种有效的编码方式,可以有效地减少编码的体积,从而提高编码的效率。
1.什么是Web服务器?Web浏览器的作用是什么?简述浏览器打开文件的步骤。
答:Web服务器是用于存储>
可视化网页制作工具既所见既所得的方法制作网页,可以非常直观的对网页进行排版,往往使设计工作事半功倍。它不需用户对HTML标记熟悉,只要用户有好的创意,就能够作出符合用户需求的网页。但是它有个致命的缺点:难以精确的达到与浏览器完全一致的显示效果,而且它生成的代码也不能完全适应各种不同的情况,往往出现冗于度高,不如手工书写来得简洁。6在学习网页制作时,可以从哪些方面来增强学习效果?
答A从了解HTML的基本标记开始。
B选择自己认为顺手的工具,从第一个页面开始。
C多访问他人网页,从中受到启发
D深入分析成功的网站,网页。1网站设计的过程中,最中要的一个原则是什么?为什么?
答:网站最重要的原则是创意。虽然网站的主要目的是传送给人们它的信息,但在传递信息的同时还把他的文化传递给获取信息的这些人。软件的掌握是短期就能速成的,而且新的软件成出不穷,功能越来越强大,但是使用这些软件必须要有良好的网站设计概念才能创造优秀的网站,这是网站制作的核心。网站的制作是按一定的步骤进行的,不同的网站设计着对网站有不同的见解和看法,但是有个共同观点:仅会输入文本,制作超级连接,排列不是真正意义上的网页制作,因为网页制作最重要的一个原则是创意。2什么是信息看版?有什么作用?
答:信息看版是WEB站点中为访问者提供的各种最新的信息集合。通常位于首页上,或者在首页打开的同时通过脚本控制同时把信息看版打开。3简述网站的设计流程,并详细描述流程中每个步骤应该进行的工作
答:设计流程为8个部分:A初始商讨。收集相关信息,确定包括站点目标用户,要发布的内容及开发WEB服务器平台。B构思。设计师根据收集的信息,开始构思站点的内容组织,栏目的设置,页面的基本结构等。C综合内容讨论。设计师先制作一些初始页面,将陪以文章的图样打印出来也顾客讨论,研究。D页面布局与导航。一旦顾客同意了这些内容,设计师就开始编制WEB页面,站点也编制到页面中,让顾客看到页面的处世效果。E图形制作。顾客同意了站点的外观设计,设计师就将制作图形,进行图形优化。F内容流程。利用各种网页技术,把客户的书面材料和相并进行修改。G测试。在站点被提交给拥护之前,开发人员要彻底测试每个WEB页面和连接并进行修补。H验收交付。一但开始验收工作,客户要对站点进行大量测试,找出排版错误的地方,进行修改。在作完了必要的工作后,站点可以对外宣传,开放了。4什么是站点的风格,典型的商业网站的风格有哪些?
答:站点的风格是指整个网站所采取的结构布局,色调,文字,标志,图案等要素带给浏览者的关于该网站的印象。商业公司的风格主要表现在如下方面:
A公司的会标或商标应出现在页面的最上方,尽可能作到色彩醒目,同时站用面积小。B可采用主题图形产品广告来突出公司形象和风格。C主要栏目一般才用图文并茂的超连接,要考虑主要栏目的,文字的色彩配合,主题图形相互寸托。D不要把主要栏目和次要栏目放在同一个页面显示。E商业网站一般都有固定的栏目页面。F建立站内收索引擎,方便浏览者在站内查找所需要的信息5.在组织网站目录结构是需要遵循哪些原则?
答:A不要将所有文件放在根目录下面。B按栏目内容分别建立子目录。C在每个栏目下面都建立独立的IMAGES目录。D目录的层次不要太深。E切忌使用中文目录。F不要使用过长的目录。G尽量使用意义明确的目录6.究网站的连接结构意义何在?主要的网站结构有哪几种?
答:网站的连接结构是指页面间相互连接的拓卜结构。他建立在木结构基础之上,但是可以跨越目录。形象的说,每个页面都是一个固定点,连接则是每2个固定点之间的连线。一个点可以和一个点连接,也可以和多个点连接。更重要的是这些点不是分布在一个平面上,而是存在于一个立体的空间。研究网站连接结构的根本目的在于,用最少的连接,使浏览最有效率。一般的建立网站的连接结构有树型和星型2种,在实际中,总是将2重结构相互混合起来,我们希望浏览者可以方便快捷的达到自己需要的页面,有能清晰的知道自己的位置。所以最好的方法就是首页和2级页面间用星型连接,2级和3级之间用树型连接结构。1.什么是页面的重心?为什么要使页面的重心平衡?常用的有哪几种重心平衡方法?
2.什么是WEB安全色?什么是抖动?2者之间是否有联系?
首要之首:不要急于选择一种语言新手们有一个常见的错误就是犹豫于判断哪种编程语言是做好的、最该先学的。 我们有很多的选择,但你不能说那种语言“最好”。 我们应该理解:说到底,什么语言并不重要。 重要的是理解数据结构、控制逻辑和设计模式。 任何一种语言—甚至一种简单的脚本语言—都会具有所有编程语言都共有的各种特征,也就是说各种语言是贯通的。 我正在攻读我的计算机学学位,我编程使用Pascal,汇编,和C语言,事实上我从来没有把它当成职业以求获得回报。 我一直在自学编程,工作上用不到它,我使用现有的知识,参考各种文档和书本,学习它们的用法。 因此,不要急于选择何种编程语言。 找出你想要开发的东西,使用一种能够完成这项任务的语言,这就可以了。根据各种开发平台的不同,有很多不同的软件开发形式可供你选择:从网站应用到桌面软件到智能手机软件到命令行脚本工具。 这篇文章里,我将重点介绍一些很受欢迎的入门教程和资源,它们能帮助你学会如何在各种主流的平台上编程开发。 我先假设你是一个悟性很强的读者,但对于新手,当我谈论程序代码时还是要按照入门级的水平。 因为即使是你自己看一篇编程入门手册,如果发现都能理解时,心情自然会很高兴,这样利于你进一步学习。桌面脚本想要动手在Windows里或苹果系统里编程,最简单的方法是从一种脚本语言或宏语言开始,例如AutoHotkey(Windows) 或Automator(苹果系统)。 如今一些硬件程序员冲着他们的屏幕大喊大叫,说AHK和AppleScript并不是“真正”的编程语言。 也许他们说的是对的—技术上,这些种类的语言只能做一些上层的编程。 但是对于那些只是想来脱盲、想在他们的电脑里实现一些能自动运行的程序的新手来说,这些语言会是一个绝妙的入门入口—而且你会吃惊于它们丰富的功能。例如,大家都喜爱的Texter就是Adam使用AutoHotkey开发的能独立运行的Windows应用程序,所以说这种脚本语言远不是只能开发小规模脚本软件。 如果你想从AutoHotkey入手,可以参考Adam的指导:how to turn any action into a keyboard shortcut using AutoHotkey(然后,你可以下载Texter源代码看看这个功能齐全的使用AHK开发的Windows应用程序的内部结构)。Web开发HTML 和 CSS:开发网站,你第一件要知道的事情就是HTML(网页就是由它组成的)和CSS(一种让外观更好看的样式标记)。 HTML 和 CSS 并不是编程语言—它们只是页面的结构和样式信息。 然而,在开始开发web应用程序之前你必须要学会如何手工的编写简单的HTML和CSS,web页面是任何webapp的前端显示部分。 这个HTML 指导是你入手的好地方。JavaScript:当你可以通过HTML和CSS构建一个静态页面后,事情就开始变得有趣了—因为到了该学JavaScript的时候了。 JavaScript是一种web浏览器上的编程语言,它的魔力就是能在页面里制造一些动态效果。 JavaScript可以做bookmarklets,Greasemonkey脚本, 和Ajax, 所以它是web上各种好东西的关于因素。学习JavaScript从这里开。服务器端脚本:一旦你学会了网页里的知识,你就要开始对它添加一些动态服务器 *** 作—为了实现这些,你需要把目光转移到服务器端脚本语言,例如PHP, Python, Perl, 或 Ruby。 举个例子,如果想要制作一个网页形式的****表单,根据用户的输入发送邮件,你就需要使用服务器端脚本来实现。 像PHP这样的脚本语言可以让你跟web服务器上的数据库进行沟通,所以如果你想搭建一个用户可以登录注册的网站,这样的语言正是你需要的。Webmonkey是一个优秀的web开发资源网站,里面有大量的各种web编程语言的指导手册。 阅读一下他们的PHP 初学者指南。 当你感觉差不多了的时候,看看WebMonkey’s PHP and MySQL tutorial学习如何使用PHP跟数据库交互。 网上最好的要数PHP语言官方的在线文档和函数参考了。 每个知识点上 (例如strlen function这个)都在后面列出来用户的评论注释,这些对于文档的本身是非常有价值的。 (我很喜欢PHP,但还有很多其他种服务器端的脚本语言你们都可以选择。)Web框架:过去数年里,web开发人员在开发动态网站的过程中不得不一遍又一遍的针对重复遇到的问题写出重复的代码。 为了避免这种每次开发一些新网站都会重复劳动一次的问题,一些程序员动手搭建了一些框架,让框架替我们完成重复性的工作。 非常流行的Ruby on Rails框架,作为一个例子,它利用Ruby编程语言,为我们提供了一个专门面向web的架构,普通的web应用程序都能使用它来完成。 事实上,Adam使用Rails开发了他的第一个正式的(而且是叹为观止的!)web应用程序,MixTapeme。这就是他的如何在没有任何经验的情况下搭建一个网站。还有一些其他的web开发框架包括CakePHP(针对 PHP 编程者),Django(针对 Python 编程中), 以及jQuery(针对 JavaScript)Web APIs:API (应用层序编程接口)是指不同的软件之间相互交换的程序途径。 例如,如果你想在你的网站上放一个动态的地图,你可以使用Google Map,而不需要开发自己的地图。The Google Maps API可以轻松的让你通过JavaScript在程序中引入一个地图到你的页面上。 几乎所有的现代的你所知道的和喜爱的web服务都提供了API,通过这些API你可以获取到他们的数据和小工具,在你的应用程序里就可以使用这些交互过来的东西了,例如Twitter, Facebook, Google Docs, Google Maps, 这个列表远不止这些。 通过API把其他web应用集成到你的web应用里是现在富web开发的前沿地带。 每个优秀的主流的web服务API都附带有完整的文档和一些快速入手的指导(例如,这个就是Twitter的)。 疯狂吧。命令行脚本如果你想开发一个程序,让它读取文字或文件、输入输出一些有用的东西,那么,命令行脚本语言将是个不错的选择。 然而它并不像web应用程序和桌面应用程序那样有吸引力和好看的外观,但是作为快速开发的脚本语言,你却不能忽视它们。很多的在linux平台上运行的web脚本同样能以命令行模式运行,例如Perl,Python和PHP,所以如果你学会了使用它们,你将能在两种环境中使用它们。 我的学习道路一直没离开Perl太远,我自学Python使用的是这本优秀的在线免费书Dive into Python。如果成为一个Unix高手也是你学习的目标,那么你绝对要精通bash这个脚本语言。 Bash是Unix和Linux环境下的一种命令行脚本语言,它能够为你做所以的事情:从自动备份数据库脚本到功能齐全的用户交互程序。 起初我没有任何使用bash脚本的经验,但最终我用bash开发了一个全功能的个人代办任务管理器:Todotxt CLI。插件(Add-ons)如今的web应用程序和浏览器都可以通过一些扩展软件来丰富自己的功能。 由于一些现有的软件,例如Firefox、WordPress越来越受到开发人员的关注,插件的开发也日益流行,人们都在说“But if only it could do THIS…”只要你掌握了HTML,JavaScript和CSS,你就可以在任何的浏览器里开发你想要的很多东西。 Bookmarklets,Greasemonkeyuser scripts, 和Stylishuser styles这些软件都是用的更普通页面一样的语言写成的, 这几个东西都值得你去研究一些。更高级的浏览器扩展程序,例如Firefox的扩展,它们可以帮助你很多。 开发Firefox的扩展,举个例子,需要你精通JavaScript和XML(一种标记语言,类似HTML,但具有更严格的格式)。 早在2007年我就写下来how to build a Firefox extension, 这是我在笨手笨脚的研究网上的一些学习资料后获得的成果。很多免费的、受欢迎的web应用程序都提供了扩展框架,例如WordPress 和 MediaWiki。 这些应用程序都是用PHP写成的,所以只有对PHP熟悉你才能做这些事情。 这个就是如何编写WordPress插件。 而想驾驭Google Wave前沿技术的开发人员可以从使用HTML, JavaScript, Java, 和 Python 写小组件和小工具开始。 我写的第一个Wave bot是跟着这个一个下午时间的快速入门指导开始的。开发桌面上的Web应用程序学习编程最好的结果是你在一个环境下学的东西可以应用到另外的环境中。 先学习开发web应用程序的好处就是我们有一些方法可以让web应用程序直接在桌面上运行。 例如,Adobe AIR是一个跨平台的即时运行平台,它能让你编写的程序运行在任何装有AIR的 *** 作系统的桌面上。 AIR应用程序都是由HTML, Flash, 或 Flex 写成的,所以它能让你的web程序在桌面环境中运行。 AIR是开发部署桌面应用程序的一个优秀的选择,就像我们提到过的10个让你值得去安装AIR的应用程序。移动应用开发能在iPhone或者Android智能手机上运行的手机应用程序的开发如今正呈现井喷之势,所以你也可以梦想一下如何在iTunes应用商店里通过你的天才程序大赚一笔。 但是,作为一个编码新手,直接奔向移动开发所经历的学习曲线可能会很陡,因为它需要你熟悉高级的编程语言,例如Java和Objective C。 然而,你当然应该看看iPhone 和 Android 编程究竟是什么样子的。 阅读这个简单的iPhone应用开发例子可以初步认识一下iPhone程序的开发过程。 Android 程序都是由Java写成的,这有一个简单的视频教程教你如何开发第一个”Hello Android“程序(注:可能需要代理才能看这个视频)。耐心,刻苦,尝试,失败好的程序员都有一个不达目的誓不罢休的品质,他们会惊喜于通过长期推敲和失败换来的一点成绩。 学会编程会有很好的回报的,但是学习的过程可能会是饱受挫折和孤独的。 如果有可能,最好找个伴一起陪你做这件事。 想精通编程,这和其他事情一样,需要坚持,反复尝试,获得更多的经验。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)