摘要: 用三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下三点:1.将组合逻辑和时序逻辑分开,利于综合器分析优化和程序维护;2.更符合设计的思维习惯;3.代码少,比一段式状态机更简洁。对于第一点,我非常认可,后两点在Clifford E. Cummings著的(Synthesizable Finite State Machine Design Techniques Using the New SystemVerilog 3.0 Enhancements和The Fundamentals of Efficient Synthesizable Finite State Machine 阅读全文
posted @ 2012-05-30 18:34 littlexiaocai 阅读(2315) 评论(3) 推荐(2) 编辑
摘要: 调试一个基于altera FPGA的项目,发现开机200次,就会有1到2次的开机不正常现象,但只要是成功开机了,无论运行多久都是正常的。遇到这类问题,按照经验来说 一般首先想到的可能是电源硬件出了问题,是否负载突变,负载过重了,但是用示波器看了几天的电源波形,都没有看出任何端倪来。开机后,所有的逻辑都在FPGA里运行,如果不是电源问题,那很大的可能就出在FPGA上了。因为绝大部分的情况下运行都是正常,如果逻辑有差错,每次开机都会出问题,所以内部的逻辑应该是没有问题的。FPGA外围有许多外设,只要存在外设和FPGA的连接,就可能出现时序约束不满足的情况,利用时序分析工具,将外设查了个遍,也没有任 阅读全文
posted @ 2013-08-13 18:17 littlexiaocai 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 本文以SmartPro 6000F使用的nios ii内核为例,详述了如何搞定cache,将程序的运行时间从最开始的30s优化到25s,再从25s优化到最终的24s。尤其是那最后1s的优化,遇到了很多问题,而这些问题在嵌入式系统里,任何一款配置了cache的处理器都可能会碰到,所以特撰此文献给那些还在倍受cache折磨的工程师们。全文分上下两部,上部为如何搞定指令cache,下部为如何搞定数据cache。在上一篇的“毫秒必争之如何搞定cache(上)”里,详述了在SmartPro 6000F上,我们是如何搞定cache,将客户芯片的编程时间从30s优化到了24s。本以为,cache已经完全被. 阅读全文
posted @ 2013-05-21 18:40 littlexiaocai 阅读(1303) 评论(2) 推荐(1) 编辑
摘要: 本文以SmartPro 6000F使用的nios ii内核为例,详述了如何搞定cache,将程序的运行时间从最开始的30s优化到25s,再从25s优化到最终的24s。尤其是那最后1s的优化,遇到了很多问题,而这些问题在嵌入式系统里,任何一款配置了cache的处理器都可能会碰到,所以特撰此文献给那些还... 阅读全文
posted @ 2013-05-14 18:21 littlexiaocai 阅读(2141) 评论(4) 推荐(4) 编辑
摘要: 今天调试一个小模块,FPGA的24号引脚作为输入端,在此引脚上外部给一个恒定的0电平,理论上程序应该一直读为0电平,在开机的前10s,程序内部读取该引脚为0,可是10s后始终读取为1,而且问题可以重复再现。按照常规,首先检查24号引脚是否连接正常,粗看了一下,和外部的输入连接正常,再查看原理图,24号引脚的功能标注有两个,普通IO和RUP,这个RUP功能我之前从没用过,猜想可能是这个功能导致的,用户手册对RUP的解释是:作为近端端接时自动校准匹配电阻,此处省略一千字关于校准匹配的功能,关键是该引脚的上拉电阻只有50欧姆,"有可能是这个引脚上拉能力太强了把外部输入的低电平给拉高了吧?& 阅读全文
posted @ 2012-06-13 19:51 littlexiaocai 阅读(1532) 评论(5) 推荐(3) 编辑
摘要: 刚入驻博客园,先搬几篇近期原创的文章。时序优化中重要的一项就是提高模块的最高工作频率,工作频率由关键路径决定,通常的提高工作频率的步骤是:利用时序分析工具找到关键路径,分析关键路径主要延迟是布线延迟还是逻辑延迟,然后轮番十八般武器,如果是逻辑延迟过大就用逻辑切割,插入D触发器,如果布线延迟太长,则复制触发器,减小负载等等,按部就班后,有时可以明显改善,但很多时候由于设计需求所限不能插入触发器,或是面积受限无法复制触发器,这些程式化的优化方法收效就甚微了,此时,该怎么办呢? 马克思爷爷曾经说过:“世上任何事物都不是孤立的,而是相互联系的,相互制约,相互作用”。受此启发,我们所看到的关键路径,并不 阅读全文
posted @ 2012-06-03 20:56 littlexiaocai 阅读(1557) 评论(5) 推荐(1) 编辑
摘要: 刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM这篇我想分享一个之前在用TimeQuest约束双边沿模块的input delay时犯得一个错误,有人看了可能会觉得傻傻的,什么眼神,delay_fall和clk_fall怎么会分不清呢,字面意思好区分,可要深究在约束里的具体含义,还得花点功夫,下面以ddio接收模块为例说明它们的含义以及碰到的一些问题。ddio接收模块为双边沿工作模式,如图一所示,ddio_in接入DFFH和DFFL,时钟下降沿DFFL锁存DL,但不立刻输出,直到时钟 阅读全文
posted @ 2012-05-30 21:06 littlexiaocai 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM在开篇前先推荐两篇文档,一篇是altera的官方文档 Appling Multicycle Execptions in the TimeQuest Timing Analyzer ,另一篇是riple兄很早之前推荐过的Multicycles Exception Between Two Synchronous Clock,这两篇都是关于多周期约束很好的上手文档,虽然可以快速上手解决当务之急,但事后不免还会有些疑惑。TimeQuest中的 阅读全文
posted @ 2012-05-30 20:45 littlexiaocai 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM最近调试了下altera里的ddio模块,在Timequest约束ddio_out输出时,遇到了一个其实不算是问题的问题。ddio_out模块如图1所示。图1DH和DL在clk上升沿采样,时钟的高电平随即使能DH通道输出高位数据,下降沿到来时使能DL通道输出低位数据,这样就实现了数据的双边沿输出。为了实现ddio_out的数据和时钟的源同步,必须要对输出ddr_out进行约束,简化后工程如图2所示。图2整个约束过程和其他外设类似,详情 阅读全文
posted @ 2012-05-30 20:27 littlexiaocai 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体验而言的Create Generated Clocks用法。要让外设正确接收FPGA发出的数据,需要dout和clkout满足外设的建立保持时间,如下图所示。时序分析是基于源reg的Tco、目的reg的Tsu,源reg到目的reg的Tde 阅读全文
posted @ 2012-05-30 20:19 littlexiaocai 阅读(460) 评论(0) 推荐(0) 编辑