这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » CPLD开发体会

共2条 1/1 1 跳转至

CPLD开发体会

助工
2014-07-30 22:11:29     打赏

CPLD开发体会
这次进行的CPLD开发为以下内容:


……
一开始,我把程序分为了三块:一个顶层程序,译码器,IO单元。在顶层程序中也有对门或其它CPLD资源操作的代码,程序写完后,仿真不能


通过。后来我就进行模块细分,每个独立的功能为一个模块,先将每个模块写好进行仿真,确认无误后组合到一起,原本认为各个模块写好后


一组全没问题了,但结果不是这样,结合后,中间信号看不到,最终的输入信号不正确。我认为中间信号看不到是程序有问题,因为我认为可


以在“Nodefounder"中指定的信号是可以看得到的,而且,有的信号我曾经看到过。但是无论我怎样改写程序,中间信号都不再重现。苦思多


时,我突然想可以把这些要监视的中间信号引到管脚上,一试,果然可以!我一级一级的进行验证,最后发现分频监视模块和输入模块工作不


正常,这下好说了,就一个一的调试吧。认为已把单独的模块调试好了,但是组合到一起,工作还是不正常,看来事情并不是和想像的一样容


易,可以是在模块链接的时候出现了问题,一个一个找吧。找来找云,到后来我还是觉得输出模块有问题,尽管单独调试时它看起来是正常的


,后来的结果验证了我的想法,IO模块调试完毕之后,整个程序工作正常了。
调试过程中,我看到Altera的帮助文档上说中间信号有时的看不到的,但在timming分析时可以看到,但我在timming时也没有看到消失的信号


,但这已经不重要了,因为我已经有了解决的方法。后来发现还可以使用"signalprobe"来进行监视,Altera已经提供了这样的工具,到现在我


还没有使用过,有空一定要试一下!


VHDL和C是有很大区别的,它们不仅仅是语法上的区别,VHDL是针对硬件而不是CPU的,有些东西从程序上看来是没有问题的,但仿真的结果就


是不正确,什么原因哪?VHDL最终要在硬件上来实现,而硬件门到门之间都是有延迟的,这会造成结果和期望并不一致。如下的这段程序:
 if(pso /= "00000000") then
  tmp := pso;
 end if;
想在pso不为"00000000"时对tmp进行更新,这样看来,tmp一旦被赋于了一个值,它以后就不会是"00000000"了,但结果不是这样,为什么?“


if(pso /= "00000000")”会形成一个电路,它的输出信号对赋值电路进行控制,而pso则直接连接到tmp的输入端,这样,当pso已经变成


“00000000”被打入tmp,控制信号还没来得及变化,错误就发生了。但我肯定,这样的逻辑在C语言中是没有问题的。


在VHDL语言中,就一定要用硬件的方式来思考问题--这点很重要!!!


有一些问题仍然没有搞明白如:一个信号何时使用falling_edge、rising_edge、'event,编译器才不报错?
搞定一个小问题是简单的,但是由一个个的小问题堆起来的大问题就不是那么简单了,所以要把大问题分解成小问题再解决。


原来认为Altera的东西做得很糟糕,慢慢地发现它还是可以的,特别综合,效率非常高,结让人满意。




关键词: 信号     体会    

助工
2014-07-30 22:12:12     打赏
2楼
看看

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]