一个牛人的FPGA宝贵实战经验及Verilog编程规范.pdf





《一个牛人的FPGA宝贵实战经验及Verilog编程规范.pdf》由会员分享,可在线阅读,更多相关《一个牛人的FPGA宝贵实战经验及Verilog编程规范.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、规范很重要 工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计设计(无论软件 还是硬件),不按照规范走几乎是不可实现的。逻辑设计设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计设计的可可重用性。在逻辑方面,我觉得比较重要的规范有这些:1.设计设计必须文档化。要要将设计设计思路,详细实现等写入文档,然后经过严格评审通过 后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目
2、过程来看,绝对要要比一上来就写代码要要节约时间,且这种做法可以使项目处于可可控、可可实现的状态。2.代码规范。a.设计设计要要参数化。比如一开始的设计设计时钟周期是 30ns,复位复位周期是 5 个时钟周期,我们可以这么写:parameter CLK_PERIOD=30;parameter RST_MUL_TIME=5;parameter RST_TIME=RST_MUL_TIME*CLK_PERIOD;.rst_n=1b0;#RST_TIME rst_n=1b1;.#CLK_PERIOD/2 clk|/clk|-|-10)禁止用计数器分频后的信号做其它模块的时钟,而要要用改成时钟使能的方式,
3、否则这种时钟满天飞的方式对设计设计的可靠性极为不利,也大大增加了静态时序分析的复杂性。如FPGA 的输入时钟是 25M 的,现在系统内部要要通过 RS232 与 PC 通信,要要以 rs232_1xclk 的速率发送数据。不要这样做:always(posedge rs232_1xclk or negedge rst_n)begin .end 而要要这样做:always(posedge clk_25m or negedge rst_n)begin .else if(rs232_1xclk=1b1).end 11)状态机要要写成 3 段式的(这是最标准的写法),即 .always(posedge
4、clk or negedge rst_n).current_state=next_state;.always (current_state.).case(current_state).s1:if.next_state=s2;.always(posedge clk or negedge rst_n).else a=1b0;c=1b0;c=1b0;/赋默认值 case(current_state)s1:a=1b0;/由于上面赋了默认值,这里就不用再对 b、c 赋值了(b、c 在该状态为 0,不会产生锁存器,下同)s2:b=1b1;s3:c=1b1;default:.3.ALTERA 参考设计设计准
5、则 1)Ensure Clock,Preset,and Clear configurations are free of glitch es.2)Never use Clocks consisting of more than one level of combinatori al logic.3)Carefully calculate setup times and hold times for multi-Clock sy stems.4)Synchronize signals between flipflops in multi-Clock systems when the setup
6、and hold time requirements cannot be met.5)Ensure that Preset and Clear signals do not contain race conditio ns.6)Ensure that no other internal race conditions exist.7)Register all glitch-sensitive outputs.Synchronize all asynchronous inputs.9)Never rely on delay chains for pin-to-pin or internal de
7、lays.10)Do not rely on Power-On Reset.Use a master Reset pin to clear al l flipflops.11)Remove any stuck states from state machines or synchronous logic.其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。=时序是设计设计出来的 我的 boss 有在华为及峻龙工作的背景,自然就给我们讲了一些华为及 altera 做逻辑 的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计设计
8、出来的,不是仿出来的,更不是湊出来的。在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工 作。以做逻辑为例,并不是一上来就开始写代码,而是要要先写总体设计设计方案和逻辑详细设计设计方案,要要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要要远大于编码的时间。总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求 把接口信号的时序波形描述出来)以及将来如何测试设计设计。在这一级方案中,要要保证在今后的设计设计中时序要要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做详细设计设计的时候,对于一些信号的时序肯定会做一些调整
9、的,但是这种时序的调整最多只能波及到本一级模块,而不能影响到整个设计设计。记得以前在学校做设计设计的时候,由于不懂得设计设计时序,经常因为有一处信号的时序不满足,结果不得不将其它模块信号的时序也改一下,搞得人很郁闷。在逻辑详细设计设计方案这一级的时候,我们已经将各级模块的接口时序都设计设计出来了,各级模块内部是怎么实现的也基本上确定下来了。由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计设计会一直处于可可控的状态,不会因为某一处的错误引起整个设计设计从头进行。如何提高电路工作频率 对于设计设计者来说,我们当然希望我们设计设计的电路的工作频率(在这里如无特别说明,工作频率指
10、 FPGA 片内的工作频率)尽量高。我们也经常听说用资源换速度,用流水的方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提高电路的工作频率。我们先来分析下是什么影响了电路的工作频率。我们电路的工作频率主要与寄存器寄存器到寄存器寄存器之间的信号传播时延及 clock skew 有关。在FPGA 内部如果时钟走长线的话,clock skew 很小,基本上可以忽略,在这里为了简单起见,我们只考虑信号的传播时延的因素。信号的传播时延包括寄存器寄存器的开关时延、走线时延、经过组合逻辑的时延(这样划分或许不是很准确,不过对分析问题来说应该是没有可以的),要要提高电路的工作频率,我
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 FPGA 宝贵 实战 经验 Verilog 编程 规范

限制150内