FPGA设计的理解(菜鸟篇)

        接触FPGA已经2年时间了,从最初的跑马灯开始进入FPGA的世界,然后就是学习关于SPI模块的编写,master和slave最终都得以实现,耗时较长,而且代码现在看来理解不透彻,经验不足。

   第一、对于状态机只会使用一段式写法,完全不懂二段式、三段式如何去写,更没听说过,可以说是就不知道状态机还可以那样去写;

   第二、然后就是关于时序逻辑和组合逻辑的理解不是很透彻,有时甚至连两者都会搞混,因此代码中主要就是通过assign和always去区分两者的,但现在看来其实是错误的,因为always也可以写为组合逻辑,而且当组合逻辑比较复杂时,用always要比assign有优势;

   第三、就是没能搞明白关于reg和锁存器之间的区别,以及会造成的后果,主要是在if和case语句中记得要将所有可能的状态考虑全面,不可有不确定的状态存在;

   第四、对于always中的触发延的设置也需要注意,不可同时使用CLK的上升沿和下降沿,那样综合应该通过不了,要想进行关于奇数的分频操作可以上升沿和下降沿分别取计数,然后根据两者的和减去分频半数,详细的就不在这讲了;

  第五、要尽量使用同步时序逻辑,尽量不要使用异步时序逻辑,特别是关于同步复位操作和异步复位操作的理解,异步复位操作一般会出现毛刺和冲突的产生,从而影响整个设计的时序,再就是解决异步复位的方法是异步复位同步释放操作可以很好的解决掉其缺点;

   第六、就是关于不同时钟之间数据的交换问题:要使用FIFO、RAM或者寄存器打一下等操作,也可使用边沿检测法去处理,这样都能很好的处理掉相应的毛刺现象;

    第七、记住关于命名规范的重要性,以及关于代码的注释和对齐的操作的重要性,这些都能影响代码的质量。还有就是记住逻辑复用,记住分模块去写逻辑,用define去定义关于宏定义方面的变量,再就是分文件夹之间写模块,然后通过实例化去调用组合起来即可;

    先写这些吧,等以后有机会再去叙述吧。


你可能感兴趣的:(FPGA)