网站建设及运维方案,网站备案信息更改,企业网站定位,包头网站优化#xff08;原创声明#xff1a;该文是作者的原创#xff0c;面向对象是FPGA入门者#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门#xff0c;作者不光让大家知其然#xff0c;还要让大家知其所以然#xff01;每个工程作者都搭建了全自动化的仿…原创声明该文是作者的原创面向对象是FPGA入门者后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然还要让大家知其所以然每个工程作者都搭建了全自动化的仿真环境只需要双击top_tb.bat文件就可以完成整个的仿真前提是安装了modelsim降低了初学者的门槛。如需整个工程请留言WXBlue23Light不收任何费用但是仅供参考不建议大家获得资料后从事一些商业活动
上节课我们实现了CPOL0和CPHA0的SPI主机的发送现在我们要做一个通用的SPI主机的发送就是支持POL0/1和CPHA0/1的4种组合情况通过参数进行传递的方式选择4种不同的模式。仔细看一下下图MOSI的第1个数据是发送数据的第1位由第1个数据到第2个数据的变化都是在半个SCK的时钟后也就是说设计FPGA的时候刚开始的前半个周期的SCK的变化不会引起MOSI的变化最后半个周期的SCK的变化也不会引起MOSI的变化对于N位数据的传输FPGA开始的时候发送最高位后续只需要把数据左移N-1次就可以完成N位数据的串行发送所以移位操作是N-1次。 以上节课的为例CPOL0和CPHA0仿真波形如下所示shift用来标识何时MOSI的信号进行变化。SPI的salve端会在SCK的上升沿采集数据能够采集正确。 如果上节课的代码直接改成CPOL0和CPHA1仿真波形如下shift会在开始的位置多了一次使能造成数据多移位一次SPI的salve端会在SCK的下升沿采集数据很明显采集不到正常的数据从而数据传输错误。 下面我们开始SPI通用主机发送模块的设计主要改动是增加了三个参数CPOLCPHA和CS_POLCPOL定义了SCLK时钟线空闲状态时的电平CPHA定义了数据位相对于时钟线的时序CS_POL定义了使能信号的电平就是spi_cs信号是高电平有效还是低电压有效。 定义了一个delta的参数是一次SPI通信后过多常长时间将spi_over信号使能上节课是直接使能的本节课可以通过参数进行控制。和上节课最大的区别是定义了shift_domain在该信号使能的情况下数据才可以发送主要用来控制shift信号在开始或者结束的位置多一次触发。shift是在上升沿触发还是在下降沿触发通过产生CPHA控制spi_cs信号通过参数CS_POL来控制是高电平有效还是低电平有效。 和上节课不同的是spi_cs信号和spi_over信号如下所示。 通过参数CPOL来控制时钟在空闲状态下的电平同时设置了数据移位的shift_domain在SPI开始的前半个spi_sck和最后的半个spi_sck周期内不允许数据移位。 最后通过参数CPHA来控制spi_mosi上的信号是在spi_sck时钟的上升沿变化还是时钟的下降沿变化。 最后新建仿真的tb文件用随机数进行仿真其中CPOL0CPHA0时的仿真波形如下符合设计要求。 CPOL1CPHA0的仿真波形如下符合设计要求。 CPOL0CPHA1的仿真波形如下符合设计要求。 CPOL1CPHA1的仿真波形如下符合设计要求。 查看modelsim的Transcript窗口spi_master发送的数据和spi_slave接收的数据一致设计功能正常。 上述的SPI通用主机发送模块仅仅需要根据实际情况修改参数就可以适用于绝大多数SPI接口的主机通信通用性非常好。