对于学习IC设计的一点建议
发现不少同学都非常关心如何编写代码,如何通过代码来实现某种模块或者功能,比如分频器,FIFO等等。这也是可以理解的,比较学校里面做项目有需要,出来找工作面试也需要这些知识。
但是其实,数字设计(前端)真正的技能并非在于编写代码的技能,许多国内外的设计公司都制订了严紧的代码风格,而代码是在系统设计+详细设计完成后才开始编写的。这里所谓的详细设计,主要是指画出详细的电路图,而代码是一种“语言”,用于描述你设计好的电路,而并非用于设计你的电路。越高手的人越能够在编写代码前画出细化到寄存器+组合逻辑的电路图,哪怕是非常大型的设计。不要以为一个高性能的CPU是用代码编写出来的。
当然,优秀的代码技巧是需要的,行为级代码的编写对于建立TESTBENCH也是很有帮助的。优秀的代码风格在于可读性和条理性,而并非在于抽象性。所以建议初学者要从画电路图开始,哪怕是一个简单的FIFO,培养好最基本的逻辑设计思维,这才是长远发展的根本。
要不工作2-3年之后,无论你是做设计或者测试,你的瓶颈都会很快到来,例如某些工程师发现,他的设计离不开代码,他必须一边编写,一边进行仿真来尝试,一边建立自己的设计思路,这样设计出来的电路是很不安全的,而且性能也是很差的,往往需要重复测试和修改多次才能勉强实现功能。这样的设计方法缺乏全局观念和稳妥性,个人认为,如果要做好IC设计,千万要避免这种设计方法才是,这也要从学校里面开始学起和练起了!
希望我的这些意见对大家有用。
/////////////////
agree!
系统设计(系统架构=>功能划分=>画出时序)=>
详细设计(画出详细的电路图=>RTL=>仿真)
这些的确在IC设计公司,IC设计流程明确要这样进行的.
当然在系统设计阶段, 如果某个以前未涉及的关键设计技术会涉及到系统架构的选择(如多位乘法器),可以在此阶段Coding并仿真综合此关键电路,看是否满足需求,然后确定系统架构.
而从长远来看,这些关键技术以前都积累到IP复用库后,根据SPEC,直接选择相应合用的IP,也不会在系统设计Coding.
////////////////
倍频之愚见
FPGA实现方波的整数分频很是方便,自然就会不自觉地想到FPGA能否实现倍频的问题。在讨论这个问题之前,我们首先简单分析一下模拟电路实现倍频的原理:我们知道sinx乘以sinx就可以得到cos2x,所以将一个正弦信号滤除杂波后送到模拟乘法器,然后再去掉乘积中的直流分量就得到了倍频信号。这说的只是二倍频,多倍频原理类似。
采用FPGA中集成的PLL实现倍频,实际上就是模拟电路实现倍频,下文讨论的是用纯数字电路实现的倍频原理,可能没有多大实用价值,仅供讨论。
可以肯定地说,如果没有一个高速本地时钟highClk,通过数字电路无法实现对方波信号lowClk实现倍频。已知高速始终highClk,可以仿照模拟倍频器实现对lowClk的倍频,得到方波x2Clk。步骤如下:
1.模拟化
lowClk只有两个值'1'和'0',给'1'和'0'分别规定为最大值和最小值,比如为255和-255。那么用highClk读取lowClk的时候就会得到255,255,…,-255,……,255序列。
2.滤波
FIR或者IIR滤波,这些概念数字信号处理里面可以看到。
3.平方
经过滤波后得到的序列有正值有负值(也可能会有0),平方后得到的值都是非负值,根据精度只截取平方值的高位。比如255的平方我们可以只取高8位即254。记平方得到的值为square。
4. Schmitt触发,得到方波。
比如,当square > 127 + 8时x2Clk为'1',当square < 127 - 8时x2Clk为'0',其他情况x2Clk保持不变。
5. x2Clk为lowClk的二倍频信号。步骤2、3、4都是以highClk为时钟的。
其实,步骤3是可以省略的。
///////////////////////
新手求助············
我们老师给我们出了两题目,我想了好长时间,不知怎么下手,希望各位高手能给我提示一下,谢谢!!
1、64位整数部件,要求实现64位无符号整数的乘法、加法、减法操作,部件的实现采用多站流水方式,实现加/减法、乘法操作的硬件共享。
2、双精度浮点数的加法、乘法操作,浮点数的表示形式符合IEEE 754-85标准,要求设计的加法器和乘法器的性能尽可能高,采用多级Pipeline实现形式。
文章评论(0条评论)
登录后参与讨论