使用Verilog编写一个参数化的SPI Master控制器,在支持多种模式(CPOL, CPHA)和可变时钟分频时,如何优雅地处理时钟域和毛刺问题?
正在做一个FPGA项目,需要驱动多个不同配置的SPI从设备。我想写一个高度参数化、可重用的SPI Master控制器。但在实现时遇到了难题:1. 系统时钟(比如100MHz)经过分频产生SCLK,这个分频时钟与系统时钟是异步关系,如何安全地产生和采样?2. 在不同CPHA模式下,MOSI数据的变化和采样时刻需要精确对准SCLK边沿,代码逻辑容易产生毛刺。有没有推荐的设计模式或代码结构?我看一些开源IP用状态机实现,感觉有点冗长。