61011217朱庆明

发布者:系统管理员发布时间:2013-10-14浏览次数:11

61011217朱庆明
模拟城市交通系统
经过这学期数字系统的学习和实践,使我对FPGA、对ISE、对VHDL有了更加深刻的了解,对如何驾驭VHDL,如何进行硬件调试、如何解决时序问题、如何设计出一个更加稳定可靠的系统有了更深的了解与更多的经验。可以将这看成是数字电路学习的一个良好开端。
通过这次的数字系统学习再次证明了我的创新能力,不过原则上来说创造算法还是与软件关联比较密切,实际上用硬件来实现指针算法是一项耗时耗力耗资源且难以发挥最佳效果的做法,从实用性来说没有任何意义,只能当成是强化数字电路的学习。
之所以能够完成这次的数字系统训练,其实很大程序上是因为我制作了相应的软件来进行助攻,所有rom的编写、原始数据的初步分析、指针算法的调试与成熟,全都是由软件来完成,硬件只是利用了软件数据分析的结果,仿照软件实现指针算法的方法重新实现了一遍,在功能上远远无法与软件实现的功能相比。这也说明今后的很多系统设计不应该用纯硬件来实现,应该遵循软件是主体,硬件是提高性能的关键这一原则来进行系统设计。
ISE硬件系统设计经验
1. 能用组合逻辑实现的功能坚决不用时序逻辑来实现;
2. 只能用时序逻辑来实现的功能通常可以拆分组合逻辑和简单的时序逻辑来实现,最简单的时序逻辑就是触发器,当然计数器也是经常要用的;
3. 综合前两点,我认为任何一个复杂的系统设计最后都可以归结为一堆复杂的组合逻辑和一些很简单的时序逻辑,只要系统的设计者愿意去花心思,这样系统才会足够稳定,调试也会变得非常简单,系统才能做得更大更复杂,实现更多更强的功能;
4. 组合逻辑设计:之所以要用组合逻辑来实现复杂功能就是因为组合逻辑不会带来时序问题,但这个前提是正确使用了组合逻辑,如果写了这样的组合逻辑语句:
A <= ‘1’ when B = ‘1’ else A;
看似这是组合逻辑,而且可以通过编译,但实际上一看warning就知道生成了latch锁存器,一定带来了时序问题。我们应该有一个基本常识,组合逻辑一定不能存储信号。
5. 时序逻辑设计:前面提到了,我们需要而且可以将复杂的时序逻辑变成复杂的组合逻辑和简单的时序逻辑,就是用触发器和计数器来实现,但是,即使只用了触发器和计数器来实现,依然可能会出问题。我们可以将时序逻辑再划分为同步和异步两种逻辑,我的建议是,可以用同步逻辑实现的地方不要用异步逻辑来实现,显然,异步逻辑更有可能带来竞争与冒险。
6. 时序逻辑设计:即使上面说到的都做好了,还是可能会出现时序问题,因为前面所说的都是一些良好习惯,竞争与冒险需要根据实际的具体情况来解决。这就需要设计者对自己设计的时序足够了解。只要找到了竞争与冒险的根源,就很好解决了,我的习惯通常都是用时钟延时来解决。
7. 一个近似是万能的系统设计方法,在ISE的第一步语法分析完成后就可以看到所有的warning,如果其中提到了生成了latch或者有可能生成latch,则一定会有时序问题,而且这些时序问题很可能有部分是隐藏的,这就是为什么上学期和这学期困扰了大家ISE设计的一个主要原因,大家都觉得出来的结果和设计的预想不一样,而且略做改动结果就变化了很多,甚至是与改动毫无关联的地方,我们可以认为所有的地方都有latch,都有问题,只是latch有时候隐藏自己,所以我们以为某个功能做好了,但是略做无关的改动又错了,这是latch又露面了(我的猜想~)。因此,只要我们可以使得warning中没有latch,甚至没有waring,那么时序问题就会减少很多很多。但也不是完全没有,如果设计者原有的设计中就存在着竞争与冒险,是设计者自己没发现,那就不能怪ISE不稳定了,只能说如果没有latch,ISE不会误解设计者的意图。如何消除所有的latch,方法是:养成良好的编程习惯,严格遵循标准语法的要求,使用更加简单的时序逻辑。
8.针对第7点做一个补充,latch本身也是一个器件,所以如果大家很清楚latch的时序,并且有一定的使用经验,完全可以忽略第7点,用latch和触发器共同进行时序逻辑的设计,latch不是害群之马,只是需要正确地使用。