欢迎来到天天文库
浏览记录
ID:28117208
大小:25.50 KB
页数:4页
时间:2018-12-08
《编写具有100%可靠性代码的几个技巧.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编写具有100%可靠性代码的几个技巧 您编写的代码是不是虽然在仿真器中表现正常,但是在现场却断断续续出错?要不然就是有可能在您使用更高版本的工具链进行编译时,它开始出错。您检查自己的测试平台,并确认测试已经做到100%的完全覆盖,而且所有测试均未出现任何差错,但是问题仍然顽疾难除。虽然设计人员极其重视编码和仿真,但是他们对芯片在FGPA中的内部操作却知之甚少,这是情有可原的。因此,不正确的逻辑综合和时序问题(而非逻辑错误)成为大多数逻辑故障的根源。但是,只要设计人员措施得当,就能轻松编写出能够创建可预测、可靠逻辑的FPGA代码。在FPGA设计过程中,需要在编译阶段进行逻辑
2、综合与相关时序收敛。而包括I/O单元结构、异步逻辑和时序约束等众多方面,都会对编译进程产生巨大影响,致使其每一轮都会在工具链中产生不同的结果。为了更好、更快地完成时序收敛,我们来进一步探讨如何消除这些差异。I/O单元结构所有FPGA都具有可实现高度定制的I/O引脚。定制会影响到时序、驱动强度、终端以及许多其它方面。如果您未明确定义I/O单元结构,则您的工具链往往会采用您预期或者不希望采用的默认结构。如下VHDL代码的目的是采用“sda:inoutstd_logic;”声明创建一个称为sda的双向I/O缓冲器。tri_state_proc:PROCESS(sys_clk)BE
3、GINifrising_edge(sys_clk)thenif(enable_in=‘1’)thensda“LVCMOS25”,IFD_DELAY_VALUE=>“0”,DRIVE=>12,SLEW=>“SLOW”)portmap(o=>data_out,io=>sda,i=>data_in,t=>enable_in);在图2中,FPGA编辑器明确显示,我们已完全在I/O缓冲器内部实施了双向I/O。异步逻辑的劣势异步代码会产生难以约束、仿真及调试的逻辑。异步逻辑往往产生间歇性错误,而且这些错误几乎无法重现。另外,无法生成用于检测异步逻辑所导致的错误的测试平台。虽然异步逻辑看
4、起来可能容易检测,但是,事实上它经常不经检测;因此,设计人员必须小心异步逻辑在设计中隐藏的许多方面。所有钟控逻辑都需要一个最短建立与保持时间,而且这一点同样适用于触发器的复位输入。以下代码采用异步复位。在此无法为了满足触发器的建立与保持时间需求而应用时序约束。data_proc:PROCESS(sys_clk,reset)BEGINif(reset=‘1’)thendata_insys_clk,O=>sys_clk_bufg);data_proc:PROCESS(sys_clk_bufg)BEGINifrising_edge(sys_clk_bufg)thenreset_1
5、时序约束的重要性如果您希望自己的逻辑正确运行,则必须采用正确的时序约束。如果您已经慎重确保代码全部同步且注册了全部I/O,则这些步骤可以显著简化时序收敛。在采用上述代码并且假定系统时钟为100MHz时,则只需四行代码就可以轻松完成时序约束文件,如下所示:NETsys_clk_bufgTNM_NET=sys_clk_bufg;TIMESPECTS_sys_clk_bufg=PERIODsys_clk_bufg10nsHIGH50%;OFFSET=IN6nsBEFOREsys_clk;OFFSET=OUT6nsAFTERsys_clk;请注意:赛灵思FPGA中I/O注册逻辑的建
6、立与保持时间具有很高的固定性,在一个封装中切勿有太大更改。但是,我们仍然采用它们,主要用作可确保设计符合其系统参数的验证步骤。三步简单操作仅需遵循以下三步简单操作,设计人员即可轻松实施可靠的代码。?切勿让综合工具猜测您的预期。采用赛灵思原语对所有I/O引脚和关键逻辑进行明确定义。确保定义I/O引脚的电气特性;?确保逻辑100%同步,并且让所有逻辑参考主时钟域;?应用时序约束确保时序收敛。只要遵循上述三个步骤,您就能够消除综合与时序导致的差异。扫除这两个主要障碍会让您获得具有100%可靠性的代码。
此文档下载收益归作者所有