最近在做一个设计,遇到一段代码,
很多人都有这种困惑
很多人不知道什么时候该用组合逻辑,什么时候该用带时钟的时序逻辑。
用单纯的组合逻辑 always @ (*) 写代码,由于代码中不考虑延时,编程逻辑复合绝大多数软件工程师的编程思路。
但是 FPGA Verilog 是硬件描述语言,单纯的组合逻辑中存在的延时,冒险竞争,同步等问题是无法解决的。只建议在低速率逻辑中大范围使用组合逻辑。
在一些高速率应用中还是需要用带时钟的时序逻辑 always @ (posedge clk) 来设计代码。
时序逻辑由于寄存器赋值需要在下个时钟的边沿才能体现,在设计代码中确实比较难以理解。
这也是很多初学者觉的难学、畏惧的地方。
学习并掌握状态机的时序设计。
在代码设计中需要有电路设计的某些思想和思路。
在高速时序设计中需要采用流水线时序逻辑设计