原创 逻辑设计学习之读后感

2009-2-20 16:07 3822 9 14 分类: FPGA/CPLD
几个月前从网上看到了王x人写的《浅淡逻辑设计的学习》,这个人应该是个专家吧。当时看完了4页的文字倒没什么收获,几个月后再把它翻出来看--完全不一样的感觉。摘录几点建议,谈谈自己的想法。
      @@学习逻辑设计首先要有项目挂靠,如果你觉得未来一段时间你都不可能有的话,接下来的内容你就没有必要再看了,花的时间再多也只
能学到皮毛--很多细节的问题光写代码是发现不到的。而且要真正入门,最好要多做几个项目(这三年大大小小的项目我做有七八个),总线型的和数字信号处理
型的最好都要接触一些,因为这两个方向的逻辑设计差异比较大:前者主要是控制型的,会涉及到状态机等控制逻辑;后者主要是计算型的,难点主要在对
     My Comments:呵,虽然到现在为止没坐过什么项目,但是XX同志给我看的都是他们以前做的产品的代码,应该很有代表性吧。
     ===================================================================================================
    
@@第二要有好的师父。这里说的好的师父并不是指画原理图画了几十年的老师傅,而是指曾在专业IC公司做过一段时间的人,好的专业IC公司可以接触国内外
最新的设计思想,在他们的帮助下,起点就可以比其他人高不少,更重要的是你可以学习逻辑设计思想性的东西!如果你的师傅经常跟你说画原理图的好处,你还是
重新找过师父算了--用原理图设计是一种很落后的方式,即使他们可能会说可以系统级设计(专业的IC设计公司系统级设计绝对是由方案保证的,而不会靠原理
图这鬼东西)更为清淅。
     My
Comments:XX同志在XX和XX待过的,他曾经对我说他是XX的创始人之一,我一点都不怀疑,即使现在他每天几乎都在10:00pm后才会
离开公司,我很邪恶地想,以后要以XX精神指导我公司的研发进程,哈哈。当然这只是表象,更重要的是他给我的学习和分析问题的方法,--代码从文档开始,
实际上是要对代码的功能要有透彻的理解,然后代码的书写就水到渠成了。我得承认一开始我是有点急于求成的,以致原理性的东西没搞清楚就上代码,结果是前功
尽弃--方向都错了,走得再远又有啥意义呢?其次是,我的疑惑都能够从他那得到很好的解决答案,他的确是我认为的“牛人”,so good。
     ===================================================================================================
     @@第三要看一些好的资料。RTL级的书中《Verilog 硬件描述语言》、EDA先锋写的那几本书都还可以,还有不得不提的是cliff的一些paper(www.sunburst-design.com上有);验证方面入门可以看下《Writting Testbenches》, 提高可以看下snug(Synopsys的用户论坛,里面的文章基本上反映了业界的领先水平)的paper;系统级的可以看看《片上系统-可重用性设计方法学》。
    
My
Comments:好的资料。在学校的时候我就有这个习惯了:找牛X的人或牛X的出版社写的书。从我的观点来看,只有自己本身对某个问题有透彻的理解才能
写出像样的东西来,所以我对资料的要求还是有点苛刻的,通常我都会采用“书海”战术--网上捣腾到一堆书,然后从这些资料中找到自己最中意的,列入自己的
“经典库”,ok了,以后的参考资料几乎全从这里可以找到。
     ====================================================================================================
    
@@第四要自己多总结,多动脑筋。逻辑设计的东西其实本质上的东西并不多:把RTL级的常用的D触发器、计数器、移位寄存器、状态机、多路选择器等基本的
电路标准化、固定化;先做方案再写代码;设计时序;知道约束原理及怎么加约束;划分模块时知道怎么做到时序收敛;做验证的时候熟悉相应语言的行为级描述
(这个肯定比RTL级好学多了)然后就是理解testbench的结构化设计。把这些东西的本质都搞清楚了做个合格的逻辑工程师应该是绰绰有余了,呵呵。
    
My
Comments:很有道理,我想到了一句话,学而不思则罔,思而不学则殆。你看到的代码永远是人家的作品,也许刚刚看了觉得都懂了,但是把这些代码抛
开,让你自己在描述时会发现其实是有很多细节点要注意的。平心而论,我没接触过XXX的东西,所以让我“创新性”地用代码描述它几乎不可能,况且我对基本
的逻辑电路还不够了解,最明显的例子就是当初我对RAM的描述都是很模糊的,接触了相关的代码之后我才有了感性的认识,再联系看到过的文档,很快就理解透
彻了。所以XX给了我代码,其实单单一段代码表示的功能对我来说是没问题的,下一步要做的是写了这些代码之后脑中要有认识--写的这段代码综合起来是什么
电路,解决这个问题的方法--看一段代码,参考这些代码到综合工具里去查看底层,5k行代码下来,代码描述的是D触发器、计数器、移位寄存器、状态机还是
多路选择器等等,基本就有数了。
     =====================================================================================================      

     @@设计时序是进行逻辑设计的基本要求:时序是设计出来的,不是仿出来的,更不是凑出来的。很多人在做逻辑设计时喜欢一上来就狂写代
码,写到一半后发现信号间的时序出问题了,只好推倒重来;好不容易反复了几次之后,通过仿真软件看了下,差不多要对了,于是再凑一下时序,竟然对了!但这
个做法除了设计周期长外,代码的质量也难以保证,往往存在很多冗余的逻辑,甚至有一些隐藏着较深的bug。为什么会出现上面的问题呢?因为我们设计的是数
字逻辑,而信号之间的逻辑关系往往是比较复杂的,在内部信号很多的情况下,仅凭拍下脑袋就写代码肯定是不能理清楚它们之前的复杂的关系,所以出错在所难
免。正确的做法是我们要先对整个设计有一些规划--时时刻刻都要有设计时序的思想。设计时序最重要的是做好方案,这里说的方案绝不是只是摆几个框图在那
里。我们在做设计的时候需要做总体设计方案、逻辑详细设计方案。这两种方案包括了很多东西,逻辑总体方案主要是一级模块的划分及接口时序的定义,而逻辑详
细方案就是代码的文字及图形描述!对于入门者来说,接触的比较多的是逻辑详细设计方案。在这一级别的方案中,我们是要求的是至少要做到模块内部所有关键信
号的时序都要先设计好,这里讲的设计时序主要就是画波形图,在一个操作周期内每个信号在每一个时钟周期该是什么样子就画成什么样子。 
   
My
Comments:这一点可以看作是对第4点的具体论证吧。接触的对时序最早的认识是信号经过一级触发器后会延时一拍。第一次对这个东西不以为然,不就是
一个触发器么,数据过去不就行了么,后来在XX的提醒下才渐渐意识到,这个其实是逻辑设计里考虑时序最基本的一点,因为设计中会用到大量的触发器,在经过
每一级触发器后都会有延时,那么内部信号的时序关系都要考虑作相应的延时,比如说为了某个目的,写地址要延时一拍,那么相应的读地址也要延时,读地址延时
了该地址读的数据也会延时一拍,处理该数据的相关信号都要有必要的延时。上面说得很对,时序是设计出来的,该做5次延时的地方你做了四次,这次凑对了下次
还是会错的,因为根基就已经错了。  
     对这个100路复用的代码,光时序图我就画了好几张纸。100路复用,也就是说一百个时钟周期后才会处理同一路数据的信号, 所以首先概念上就要理清,不是一个计数器在每一拍时钟下计数,下一拍实际上是下一路通道所表示的信号。
    
还有一个状态机的时序。Merely型状态机,当前输出状态跟输入和当前状态有关。对这个“输出状态”和“当前状态”我又捣鼓了很久。关键点在于,当前输
出状态要放到RAM中去,然后通过适当地读写地址的设计,把它用作下一个时刻的当前状态,再结合当前输入给出当前输出,依次循环下去,是不是有点绕人?
       =================================================================================================    

     最后补充自己的一点:Practice makes perfect,perfect makes
perfecter。很多东西第一次接触相当崩溃的,比如说用低频率时钟恢复高频率数据、复用等等。设计中有很多巧妙的方法,巧妙的方法往往需要对细节点尤为关注。
      Ok,短时间内将会以上思想、理论、学习观等等指导逻辑设计,促进逻辑设计学习又快又好发展,早日脱离逻辑设计初级阶段,在21世纪第一个十年实现逻辑设计的基本现代化,革命尚且激烈,同志继续捣鼓吧!  

PS:加上从网上down的原文https://static.assets-stash.eet-china.com/album/old-resources/2009/2/20/57eb7349-8a8b-42cc-af9b-5df0025641bd.rar

文章评论5条评论)

登录后参与讨论

用户1513083 2009-3-23 09:15

刚学习CPLD,非常受用。

用户105409 2009-2-26 19:21

醍醐灌顶,如沐春风,受用无穷啊

用户1404148 2009-2-24 10:31

看看~~

用户518079 2009-2-23 11:42

的确很好

ilove314_323192455 2009-2-20 22:25

很好
相关推荐阅读
用户1395232 2010-01-26 19:59
CycloneIII_GCLK_PLL阅读笔记
    前段时间项目中使用了CycloneIII这款芯片,负责了时钟方面的设计,摘录时钟网络和PLL使用笔记:1、芯片管脚上可以输入16个单端时钟或者8对差分时钟;2、芯片内部共有20个全局时钟网络;...
用户1395232 2009-03-07 12:16
感悟--从单片机到PGA
        翻开两年前在学校做项目后提交的心得体会,看着这些熟悉而又生涩的文字,感慨万千。=====================================================...
用户1395232 2009-02-23 20:11
关于上拉电阻(ZT&YC)
最近涉及到了上、下拉电阻的使用,搜索到不少资料。自己总结了两大方向:==================================================================...
用户1395232 2009-02-21 14:59
异步FIFO的设计
         异步FIFO的设计是一个老生常谈的问题了,网上有很多很经典的教程和论文。此处以Clifford E.Cummings的文章'Simulation and Synthesis Tech...
用户1395232 2009-02-11 09:12
set_input_delay/ set_output_delay之图解
在edn上看到很多仁兄的文章 大受启发 也写写自己的理解 一同讨论 set_input_delay/ set_output_de...
我要评论
5
9
关闭 站长推荐上一条 /2 下一条