全功能SPI接口的设计与实现
当分频时钟用于产生SPICLK时,异或门XOR1的一个输入端来自配置寄存器的Polarity端,用于控制时钟极性。节点Y3作为D触发器MTN1的输出端,输出方程为:

S0为0,D触发器上升沿触发。S0为1,D触发器保持原状态。通过MTN1后的分频时钟,其高电平时间和低电平时间相等或相差一个系统时钟周期,这个时钟即为主模式下产生的SPICLK,通过Phase和Polarity端的选择将会有四种不同时钟模式。
当分频时钟用于产生SPI控制器的内部时钟时,MUX2的选择端S来自配置寄存器的主/从模式选择端,选择内部时钟还是外部时钟通过。输出端LANCLK用于SPI控制器的数据输入/输出锁存时钟。其方程为:

这里的DICLKn为通过MUX2后的分频时钟。由于时钟极性对传输协议没有影响,所以上式将使四种时钟模式转变成2种,即上升沿无延迟和下降沿有延迟,而后在用于控制数据的输入/输出锁存。通过节点Y2的分频时钟经过控制逻辑传送到输出端CNTCLK和DATCLK,这两个时钟分别用于SPI控制器内部计数器的计数时钟和移位寄存器的控制时钟。
以上分析均是在SPI控制器工作在主模式的情况,当SPI控制器工作在从模式时,外部时钟来自与门AND1的一个输入,通过控制逻辑分别到达CNTCLK和DATCLK端。
在时钟生成模块里同时具有相应控制功能:Reset引脚,模块的复位端,低有效。SPISTE引脚,SPI控制器的使能端,低有效。Susp_free和Susp_soft引脚,决定了当仿真器突然中断时SPI模块将采取何种动作,在时钟生成模块里,Susp_free和Susp_soft被置为00时,将关断SPI CLK,使正在传送的数据立即停止。
3 SPI控制器的仿真实现
SPI控制器的仿真使用Mentor公司的ModelSim软件,该软件可在windows,Linux平台上使用,支持VHDL或Verilog硬件描述语言(HDL)仿真。它支持所有器件的行为级仿真、VHDL或Verilog仿真激励。为了测试设计的正确性,编写了testbench模块,包括产生时钟信号,控制寄存器的配置,收发的数据,产生的中断等。
3.1 SPI控制器时钟仿真验证
当SPI工作在主模式下,全功能SPI控制器根据从控制器的时序要求会提供具有4种不同极性和相位的时钟。图6为SPI控制器内部时钟生产模块的仿真验证,输入DICLK为分频后时钟,其对系统时钟进行了14分频。时钟生产模块对DICLK进行处理,产生LANCLK,CNTCLK,DATCLK和4种不同极性和相位的SPICLK。本文引用地址:https://www.eepw.com.cn/article/153493.htm
3.2 SPI控制器工作在主模式下的验证测试
通过配置寄存器选择SPI工作在主模式,此时主SPI通过引脚SPICLK提供整个串行网络的串行时钟。SPI波特率寄存器决定发送和接收的传输速率。发送数据时,主控制器先发送SPICLK信号,然后向SPIDAT和SPITXBUF寄存器写入数据C00F和8FF,写入这两个寄存器都可以启动SPISIMO引脚上的数据发送(先发送最高有效位)。同时从控制器通过引脚SPISIMO将接收到的数据移入SPIDAT的最低位,当选定量的位发送完时,整个数据发送完毕,数据按照右对齐的格式存入SPIRXBUF中,以备系统读取(一般为cpu),同时中断标志位被置为1,当系统发出指令,读取存在SPITXBUF的数据时,SPI中断标志位被清零,仿真结果如图7所示。
4 结束语
文中提出了一种全功能硬件SPI接口设计方法,实现了4种具有不同极性和相位的时钟,它吸取了传统软硬件的优点,具有速度快、结构简单的特点,并已通过功能仿真和FPGA验证,结果证明本设计是可靠的,可直接用于FPGA中或者作为硬件电路嵌入具体芯片内。
评论