fpga verilog语法篇 3让模块工作 3注意事项
fpga中,如果让一个模块循环工作,
比如,串口模块如果要输出多个字符,就需要执行多次.
每次循环执行前,需要清理之前的残留参数和状态,并准备本次执行的数据和状态.
需要解决的问题:
1,在发送前需要准备好什么?
上次发送完,有没有进行计数变量的清理.
要发送或处理的数据有没有准备好.(检查上一级模块是否完成输出).
2,怎么发送出去?
逻辑的编写:
可以用状态机进行各个状态的实现.
也可以用使能完成标志,实现流水线一级一级的传递.
3,如果冲突了怎么办?
本次数据还没有发完,又有一个数据传过来了.
需要控制时序,设计缓存,考虑上下级模块间的配合.
4,如何控制模块工作和停止?
是让模块一直工作下去,还是每次触发,只运行一次.
如果每次触发,只运行一次:
需要设立一个标志,挂起的标志.标志=1,工作.标志=0,停止.
如果是状态机,设立一个"挂起"的空闲状态.完成工作后,进入空闲状态.
5,发送完之后,如何清理?
为下次工作做准备,需要清理计数变量,缓存.
6,有没有时序冲突问题?
一个快,一个慢,那么模块之间怎样进行传输,就需要规定好用统一的时序.
需要对输入标志,和输出标志进行处理和打拍,否则模块之间的衔接有问题.
7,模块中每个程序块,always,assign都可以看作是一个并行独立的小程序.他们之间是否有冲突?
尤其是在两个程序块之间,对同一个数组操作的时候,角标的问题.边界的问题.
变量是否在程序块之间进行了及时更新.