摇杆JSTK2 Pmod控制器(VHDL)

逻辑主页

代码下载

摇杆Pmod控制器(顶层文件): pmod_joystick.vhd (10.1 KB)
SPI主控制器(必须同时包含在项目中): spi_master.vhd (8.9 KB)

特性

  • Digilent Pmod JSTK2模块的简化接口VHDL源代码
  • 持续输出最新x轴和y轴位置数据到并行总线
  • 持续输出扳机和中心按钮的最新状态
  • 处理SPI通信以获取摇杆Pmod数据
  • 可配置系统时钟频率

简介

本文详述了与Digilent摇杆JSTK2 Pmod(如图1所示)接口的VHDL组件。图2展示了该摇杆Pmod控制器集成到系统中的典型实例。如图所示,摇杆Pmod控制器连接Pmod端口并执行事务以收集数据。数据持续更新并显示在2个简单并行总线(对应2个轴)和2个单比特输出(对应按钮)上,可连接至用户逻辑或FPGA输出端口。

1. Digilent摇杆JSTK2 Pmod模块

2. 应用示例

工作原理

摇杆Pmod控制器主要由状态机和SPI主控组件构成。它向Pmod请求7字节数据包,并解析获取位置数据和按钮状态。

状态机

设计采用图3所示状态机实现其操作。组件启动后立即进入初始 (start) 状态。在此状态保持100毫秒以确保Pmod有充足的上电时间。随后进入事务 初始化 (initiate_transaction) 状态。在此状态下设置Pmod的片选信号,等待15微秒后进入字节传输 (byte_transact) 状态。该状态通过SPI主控组件与游戏摇杆进行8位SPI通信。随后的字节间隔 (byte_pause) 状态记录已发送字节数,并在字节间执行10微秒的暂停。当数据包中所有字节传输完成后,进入结果输出 (output_results) 状态。结果通过x_positiony_positiontrigger_buttoncenter_button 输出端口呈现,设计等待1毫秒后返回事务初始化 (initiate_transaction) 状态,开始获取下一组数据。虽未图示,但任何时候重置组件都会使其返回初始 (start) 状态。

3. 状态图

SPI 主控器

字节传输 (byte_transact) 状态期间,状态机控制SPI主控组件与Pmod上的微控制器通信。SPI主控器文档详见此处

本设计采用CPOL='0’和CPHA='0’模式的SPI主控器。根据系统时钟频率(通过clk_freq 通用参数指定,见下文)设置clk_div 参数,以1MHz总线速度与Pmod通信,该速度在Pmod参考手册中有明确规定。

本设计未使用SPI主控器的从机选择功能。Pmod具有非常规的时序要求,包括片选信号与首字节间需15微秒暂停,字节间需10微秒暂停。因此设计采用独立片选信号,且SPI主控器对数据包内每个字节执行独立事务。

系统时钟频率

必须将通用参数clk_freq 设置为Joystick Pmod控制器clk 端口所接系统时钟的频率。

端口描述

表1描述了Joystick Pmod控制器的端口。

1. 端口描述

连接方式

该Pmod配备一个6针连接器。表2列出了该连接器的引脚定义。需将Joystick Pmod控制器的端口分配给FPGA引脚,这些引脚已按所列方式路由至该连接器。

2. Joystick Pmod引脚定义及与Joystick Pmod控制器的连接

复位

reset_n输入端口必须保持逻辑高电平,Joystick Pmod控制器组件才能正常工作。该端口低电平将异步复位组件。复位期间,组件会中止与Pmod的当前事务,并清除x_positiony_positiontrigger_buttoncenter_but ton 数据输出。复位释放后,Joystick Pmod控制器将重启操作,恢复采集并输出摇杆数据。

结论

本Joystick Pmod控制器是可编程逻辑组件,可与Digilent的Pmod JSTK2对接。它负责处理与该Pmod的所有通信,持续提供更新的位置和按键数据流。

相关主题

SPI主控制器(VHDL)