仿真时序图:
仿真结果说明:
仿真通过设置contr_addr=4来写五个数据(11,12,7,15,16)到RAM,然后发送。
五、 设计中遇到的问题及解决办法:
1、 控制RAM写数据的时钟时,忽视了Verilog语言的语句执行特 导致RAM中总是写不进去数据。 wr_clock=1'b0;
wr_clock=1'b1; 第一次写入 wr_clock=1'b0;
wr_clock=1'b1; 第二次写入
这样执行后的结果为wr_clock=1'b1,一直为上高平,并不会有两个上升沿。
最好的解决方法就是使用状态机。 2’b00: wr_clock=1'b0;
2’b01: wr_clock=1'b1; 第一次写入 2’b10: wr_clock=1'b0;
2’b11: wr_clock=1'b1; 第二次写入
2、 处理反馈信号feedback与存满信号fullflag的逻辑关系时,遇到 了些麻烦,最终巧妙的运用异或解决了问题。
a=(~feedback)&fullflag0;
b=feedback&(~fullflag0); fullflag=a|b;
3、 在定制FIFO时遇到很大的问题,如数据不能按照严格的时序进出
FIFO,而且有些数据还不能写进FIFO,经过多方面调试改写还是没能解决。最终只能放弃FIFO,改用RAM,外加个控制器就可以了。
六、 设计心得与体会:
1、这次设计花了我四天多时间完成,做之前单纯的以为SPI不过就是写几个简单的移位寄存器外加个时钟就可以了,却完全忽视了SPI具有严格的时序要求及数据发送接收存储问题。SPI不是只发送接收一个八位数据就可以了的,它应该具有强大的信息交换传输功能。
2、仿真时序很不好把握,以后尽量少用Quartus II自带仿真器,要多多学习MODOSIM。 3、Verilog HDL自学了一段时间,第一次用来编写一个完整的系统。和VHDL比起来还是各有各的好处吧。它们描述各层的能力各有千秋。Verilog HDL善于描述更低层设计,比VHDL更灵活,而VHDL善于描述一些高层的设计(主要是一些算法及控制好实现)。Verilog HDL在仿真方面比VHDL也更方便些,如TESTBEN。
4、FPGA方面需学习的还有很多,为了设计SPI借书查了些资料,才发现自己FPGA基本上还没有入门。电子设计做信号题需加倍努力啊。