2.3 FIFO模块由于微处理器的写数据速率远比串口输出速率快得多,所以必须先将数据保存于缓冲区,FIFO的容量应根据通信数据量的大小来确定,在本设计中,由于数据量不大,所以定义了一个 64 X 8位的异步 FIFO寄存器,用于保存收发数据,用 VHDL硬件描述语言描述的FIFO是一个 64 X 8位的数组。模块包括两个时钟信号,写入和读出数据总线,满标志和空标志信号,当 FIFO为满标志时,写入的数据将被忽略。
2.4配置模块 该模块设计了2 个 3 X 12位的RAM,一个用于保存主机模块配置参数,另一个用于保存从机模式配置参数,每次主从机模式切换时将配置参数发送到数据收发模块。数据收发模块根据配置参数调整分频倍数、相位、输出顺序(高位先出或低位先出)、帧长度等。
2.5数据收发模块
该模块实现与从设备的通信。在主机模式下,将 FIFO的并行数据进行并串变换,然后通过 MOSI引脚输出数据,并同时输出驱动时钟和控制信号(低电平)。在从机模式下将串行输入的数据串并变换后写入 FIFO模块中。
四、仿真与验证
将用 vhdl描述好的 SPI接口电路用 synplify进行综合,然后用 modelsim软件进行仿真。先仿真微处理器通过 SPI接口发送数据过程,在地址总线上输入指令寄存器地址,在数据总线上输入发送数据指令,工作时钟为89.6M,然后在地址总线上输入写数据寄存器地址,在数据总线上输入数据 01010101。得到如图 3所示的部分管脚的波形。
然后仿真从设备发送数据过程,首先往 SPI模块的 ss管脚输入低电平,同时从 sclk管脚输入驱动时钟,在 mosi管脚输入数据,得到图 4所示的波形。
用 quartus软件进行编译后,将生成的网表文件通过 JTAG下载到 altera公司的 acex1k系列 EP1k30TC144-3运行,配合设计好的单片机程序,分别给 FPGA输入 44.8M和 89.6M工作时钟,在 quartus的 signal tap的辅助分析下都得到了正确的结果。 EP1k30TC144-3芯片共有1728个逻辑单元,本设计使用了 138个,占系统资源的7%,是个比较理想的结果。
五、结束语随着半导体技术的进步,FPGA的价格越来越便宜,工作频率越来越高,使用 FPGA实现 SPI通信接口是切实可行的,本文作者创新点: 1、将总线控制信号封装成指令,使用者只需通过发送指令的方式操作,避免了复杂的
时序逻辑设计问题。 2、可以在 SPI工作过程中随时调整配置参数。 3、充分考虑了可测试性设计,使用者可随时查看 SPI总线工作状态。