DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1249|回复: 0
打印 上一主题 下一主题

[待整理] 《玩转IP core》之七:一个计数器引起的思考

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:26:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
子曾经曰过:温故而知新,可以为师矣。鄙人曾经在那个做菜的节目《踏雪寻熊》里面讲过一个在下面试的典故,不知道现在能记住的还有几人啊(不准翻书!)。里面我叫别人设计一个计数器,被鄙视(太简单了,没花头),然后幸好我反鄙视回去了(不是做工程的,条件不全就开始编码)。
       
        是啊,会有哪个介绍硬件描述语言/FPGA的讲座里面不讲解计数器呢?而且,都在最前面的几节里面,作为一个最简单的时序逻辑的例子。预告一下,这一讲不是不能免俗的重复别人的内容,这里想告诉大家的是一种设计的思想,保证做到“人有我新”。这叫“戏法人人会变,各有巧妙不同”。某家试图通过这个看来简单的例子,说一点方法论的玄虚。事先声明,我从来是居心不良的,改不了,所谓“江山易改,本性难移”。只能这么说了:大家遇到我,是你们的不幸。
       
        设问句:在进行一个计数器单元设计之前,我们需要什么前提条件呢?首先,需要功能描述(一个计数器嘛,不就是在不是复位“RST”的状态,每来一个时钟内部/输出加一吗?还描述什么啊?磨洋工吧?----“非也,非也”,这个还是要描述一下。至少我们需要知道一下计数器的内部位数吧?也就是,计数器加到多大回到0。)另外,就象我们在前面“菜谱”那一讲里面说过的,需要了解系统需要的时钟频率。
       
        这些需求是哪里来的呢?系统工程师?算法工程师?(包不同又要来了。)到了单元设计一类的工作,人家才不会操心呢,就靠数字逻辑设计工程师您自己了。这叫:自力更生,丰衣足食。
        忽略了复位信号RST的影响,一个N比特计数器,时钟上升沿有效,其时序图如下。就是上面所说的“不就是在不是RST状态,每来一个时钟内部/输出加一”。这个是我们所说的行为模型。
         
       

       
        对应的行为级别的电路原理图如下。时序逻辑是一个D触发器,组合逻辑是一个N位的“加一”的模块。行为级别的设计的确没有什么花头的,而且与时钟频率真的没关系。你就是仿真1000 MHz的时钟,也能得到正确的结果。
       

         
        貌似天下太平,可以刀枪入库,马放南山了;然后是“飞鸟尽,良弓藏;狡兔死,走狗烹……”。慢着,本书不是《楚汉演义》,寡人也不是刘邦。你听到1000 MHz不觉得玄乎吗?要有对于危险的直觉的猎人,才是好厨子啊。
        所以啊,真的不要因为前仿真通过就沾沾自喜;这仅仅是万里长征的第一步,毛委员还没出场呢。我们下面要召开“遵义会议”了----研究建立时间、skew和加一运算的内部位数的关系。
        先说点务虚的。一般工程里面不详细区别建立时间与skew这些精细的概念。而是,在这两个时间的基础上加上一个10%左右的裕量,作为信号的稳定时间;稳定时间的倒数呢,就是设计允许最高的时钟频率。
       
        下面是一个加一运算的内部位数(也就是计数器输出为主)与设计允许的最高频率之间的大致关系。我自己瞎画的,不是仿真的,因为没有相应软件,我又胆小不敢盗版也不想收到别人的律师信。(据说某个天线的大拿就因为写讲座收到了仿真软件厂家的律师信,吓得我……。听说啊,不准转发。我就奇怪了,如果我是那个软件厂家,巴不得给点小钱,叫大虾接着写。多好的广告啊,比养活市场人员便宜多了。总结:这个厂家想不开,该请我去做市场总监。年薪嘛,来个五条黄鱼(金条)好了。)顺便说点正经的,可以看出,随着加一运算内部位数的增加,系统允许的最大频率是急剧降低的。如果同学们,有软件,可以帮忙做做仿真给大家共享一个数据,在下不胜感激涕零,在此叩谢了。
       

       
         
        问题来了:如果系统需要的工作频率和内部加一运算的位数产生矛盾,如之奈何呢?放心,山人自有妙计,这里有锦囊两枚。汝遇到这个场景只需打开一只,问题便可迎刃而解,咳咳咳…….。(----呵呵!假装诸葛孔明,被痰堵住了,对不起观众。)
       
        锦囊一(悟空你又顽皮了,没到时侯呢,就打开啊。):拆分加一单元法(这也叫一刀两断法。)下面是这种方法的结构图,把一个2N比特的加一运算分成一个低位的加一运算和一个高位的加低位进位位的单元。这两个单元分别是几位呢?(“几位”,还“客人楼上雅座请”呢)一般这两部分的运算复杂度是差不多,所以也就“二一添作五”的分账了(谁有意见?您竟可以“四六开”、“倒四六”的,我不反对。)。低位后面的那个D触发器是为了同步输出的时序。里面的“C”信号是咩(有观众反映我只用北京方言,这次来个广东话好不)?正解是低位运算的进位位。最后输出的高地位要拼在一起。
       

       
         
        诸位看官,这个系统的工作频率大致等于N比特计数器的工作频率了。这个频率指标有了明显的提高;同时呢,系统的功能是没有变化的。这叫万变不离其宗。前面我们说过,IP core设计里面,变化是永恒的。
       
        那么,2N+1(也就是奇数位数)的计数器怎么办呢?懒得你,学习《小龙人》:“就不告诉你,就不告诉你……”。
       
        第二个方法就是,我们重新包装、隆重推出的改进的行波计数器。(Nani?行波计数器,第三讲里面不是说不能用吗?为什么又出来了?----好同学啊,竟然还记得那么久之前的事情,子曾经曰过:孺子可教也----但是,做工程要细心,某家不是加上了“改进”二字吗?)
        下面是针对2N比特的计数器的第二种结构。我们按照自顶向下原则,进行一次图纸的设计。
       

       
         
        系统分为两个部分:第一部分是一个一般的的计数器;第二部分是若干个沿触发的计数器(图里面只花了一个,多个的自己扩展好了)。匹配时延单元,需要和沿触发的计数器里面的沿检测电路匹配的。为了体现系统还是同步的电路,我们专门画上了时钟信号。可以看到,这两个部分的时钟是一致的,系统也就是同步的。
        下图是沿触发的计数器原理图。里面,利用沿检测电路完成了对于上一级计数器的最高位的采集。使得本单元在输入上升沿时刻完成一次加一操作,而在其他时间不进行操作(也就是加0了)。
         
       

       
        一种沿检测电路如下,原理自己分析吧。
         
       

       
        咱们是炒咸菜不放酱油---有言(盐)在先啊,以后象沿检测之类的电路,鄙人就再不提供了。大家都是有学问的人,老衲说多了就像唐僧了。
       
        就我个人而言,倾向于第一种方案,简单明了。
       
        那么,为什么我还介绍了两种方法呢?主要是为了开阔大家的思路。IP core设计这样事情,从来不是只有一条路的(正所谓孟老夫子说的:“条条大路通罗马”)。在设计的时候多想想,说不定还能有点专利什么的,赚点小钱。(我的很多专利都是这么来的。钱没赚着,那些流氓公司太抠加上离职就不给钱。)
       
        下面的听众朋友们别再打鼾了,读完这首总结的打油诗,本讲这就结束了。
       
        正所谓:“莫道计数功能小,内里乾坤有奇巧。刀劈行波均可行,高速宽位方英豪”。
        我宣布散场,低下的把自己造成的垃圾打包带走啊,我们要文明出行。另外,还有一张小广告:“欲知加法器设计,且听下讲分解”。
         
        《玩转IP core》之一:我们的目标是ASIC
        摘要:具体到一个产品里面,到底是采用FPGA还是ASIC,这个问题是多方面确定的。简单说,如果产品出货量小、时间紧、生命周期短,那么FPGA比较适合;反之就建议ASIC。但是,也不是完全绝对的,就像很难说少林和武当那个更牛一样。
         
        《玩转IP core》之二:所见非所得
        摘要:Verilog语言是由Gateway设计自动化公司的工程师于1983年末创立的;VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。这个古人也“古”不到哪里去。上板砖!
         
        《玩转IP core》之三::统一行动听指挥
        摘 要:现在我们正沿着PCB数据大道,走向芯片大厦----就是大家眼前的巨大的、银色的大厦。我是本次旅行的导游,敝姓十,大叫可以叫我十导。路途之中, 为了大家不感到无聊,本人先给大家略略介绍一下,什么是数字电路的时钟。数字电路中,时钟是整个电路最重要、最特殊的信号。
         
        《玩转IP core》之四:踏雪寻熊---面积与速度的协调
        摘 要:具体到我们的FPGA/ASIC设计,这个“鱼”就是面积,而“熊掌”时钟频率(速度)。能不能很好的协调面积与速度的关系,是衡量一个数字逻辑设计 工程师能力的一个重要标准。在本讲座的第二篇里面,会说明各种单元模块的不同面积和速度的基本解构;在第三篇中,则会通过例子,介绍如何在系统中很好综合 考虑两者的关系,选择比较合适的实现解构。
         
        《玩转IP core》之五:测试向量生成
        摘要:在不考虑电源输入的前提下,在我们系统/板子上,能够不依靠其他外界输入而产生输出信号的器件有木有呢?当然有,而且必须有,那就是大名鼎鼎的晶振了,用来产生我们说过的、对以系统极端重要的系统时钟信号。
         
        《玩转IP core》之六:程咬金的三板斧--系统基本结构
       
        摘要:今天我们开始进入本讲座的第二部分:单元篇。大家将会发现,我们在基本单元设计里面,也就是三板斧:查找表、时分复用和流水线。但是,我们比程大将军稍稍高一点,我们会把这三招糅合,能产生变招。
         
        《玩转IP core》之七:一个计数器引起的思考
        摘 要:设问句:在进行一个计数器单元设计之前,我们需要什么前提条件呢?首先,需要功能描述(一个计数器嘛,不就是在不是复位“RST”的状态,每来一个时 钟内部/输出加一吗?还描述什么啊?磨洋工吧?----“非也,非也”,这个还是要描述一下。至少我们需要知道一下计数器的内部位数吧?也就是,计数器加 到多大回到0。)另外,就象我们在前面“菜谱”那一讲里面说过的,需要了解系统需要的时钟频率。
         
        《玩转IP core》之八:小学一年级水平,加法器的结构
        摘要:工程设计里面有一个原则:从简单做起。这里面还有一个小故事,今天就不讲了。现在,我们先瞧瞧最简单的一个比特位宽的加法器:半/全加器。全加器的输入为三个一比特的信号a0、a1,还有低位的进位c0;输出也是两个一比特的信号:结果s和进位位c1。
         
        《玩转IP core》之九:小学二年级水平,乘法器的结构
        摘要:大伙儿已经通过两次讲座,了解了计数器和加法器大体结构。大家不难发 现,同样的一种功能,可能由于需要、工作频率和代价的不同要求,存在若干种不同的结 构。这些结构如何选择,实际上是一个艰难的选择。这些选择,很多时候都是靠一个工程师的经验(我们老年人也就靠这个混口饭吃了。要不就被“长江后浪推前 浪,前浪死在沙滩上”了)。
         
        《玩转IP core》之十:除法器的结构
        摘要:如果各位在加法器和乘法器里面可以欣赏到了变化多端的话,那么在下不得不很遗憾的通知诸位:除法器里面大家只能看到“自古华山一条路”。不是 我保守,是除法这个东西的本性。用《数学分析》里的说法,加法和乘法都是线性运算满足交换律的,除法是非线性运算不满足交换律的。这是数学上的根子,可以 用来唬人。
         
        《玩转IP core》之十一:非线性求值的孤独九剑,CORDIC方法
       
        摘要:现在来个“师夷长技以制夷”,给大家画画CORDIC的流水线(因为是小数运算,假设实数“1”为十六进制的全1,实数值就可以折算了。这是普遍的技巧,不详述。)。还有一个小技巧就是由于每步的放大作用,公式里预先收缩了一把。
         
        《玩转IP core》之十二:电路串串香,D触发器链  
        摘要:今个儿寡人给大家讲点有“理论”的:CRC校验(循环冗余校验 码,Cyclic Redundancy Check)和编码器。CRC校验的目的就是看接收的一串比特和原来发射的是不是一致,有没有接收误码。CRC在编码界的春典,就是“gCRC16(D) = [D16 + D12 + D5 + 1]”和“1 0001 0000 0001 0001”。给大家一个口诀:“延时触发串一串,遇到一字砍一段。输入牵来异或算,输出导出入口看。”
         
        《玩转IP core》之十三:简直的层层叠,FIR滤波器的串联实现
       
        摘要:今天我们继续信号处理的行程,给大家介绍FIR滤波的串行实现。却说“请介绍FIR滤波器和IIR滤波器的差别”,这可是一道非常典型的面试题。这道题目类似于《哈利波特》里面那个“分院帽”的作用,当然这个题目里面没有宝剑。
         
        《玩转IP core》之十四:我的地盘我做主,锁相与分频
        摘要:在做设计的时候,谁都希望片子的输入时钟是稳定的、可靠 的,并且和我们系统的采样频率是一致的。这是最理想状态。可惜啊,希望是丰满的,现实是骨感的。很 多时候,情况并没有这么理想。这种时候,就需要我们自己调节系统时钟,达到系统工作的目的了。不是大伙儿“无知者无畏”,是不得不为啊。实际上,在很多通 讯系统中,对于系统时钟的调节都是不可避免的。
         
        《玩转IP core》之十五:国球与其它,输入输出介绍
        摘要:我们现在正式为《第三篇:系统篇》剪彩(哗哗哗,掌声响起来,我心更明白…)。在这一部分里面,会在更高的层次上,分析设计问题。大伙儿不仅 仅能看到《单元篇》里面的各个部件的应用,而且会发现系统绝对不是单元的简单的搭积木。在整个讲座里面,“变化”是永远的主题。
         
        《玩转IP core》之十六:来个批发价,多路数字中频系统设计
        摘要:数字中频主要分两种类型:数字上变频(DUC)和数字下变频(DDC),它们的主要功能是相反,但原理和实现的方法是十分相似。由于FIR滤波器里面讲的是下采样的例子,这里也就以数字下变频作为例子,这样匹配。
         
        《玩转IP core》之十七:看客做饭,CDMA接收机的同步
        摘要:这一讲里面会介绍CDMA系统的同步部分,这不是重点。关键是,大伙儿会看到同样的算法,在终端和基站侧由于系统用户数目不同,会有不同实现。这是给大家的一个启示:不能因循守旧,要与时俱进。
         
        《玩转IP core》之十八:磨刀不误砍柴工,程序的风格
        摘要:“代码风格和规则”这个问题,很多人看来不是十分重要。但是,我问问大伙儿几个现象,看看是否遇到过?过了三个 月,读不懂自己的程序的,有木有?看别人代 码,赶脚不如自己重写的,有木有?做C代码的,竟然能看懂你的程序的,有木有?调试的时候,感觉是老虎吃天----无从下口,有木有?如果有,以老衲的经 验,多多少少和“代码风格和规则”有些瓜葛。
         
        ----------------------------
        如果你从事FPGA研发,或者你对IP core设计感兴趣,欢迎关注《玩转IP core》系列技术讲座,每周三加菲博士与你不见不散,如果针对本讲座有任何技术问题欢迎与加菲进行技术互动:《玩转IP core》交流区
       
        关注与非网官方微博:http://e.weibo.com/eefocus 我们的讲座内容将在微博同步更新。
       
        加菲独家供稿与非网,谢绝任何形式的转载,与非网做你技术生涯中最有价值的电子网站。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-3 02:42 , 耗时 0.094061 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表