代码下载
DAC AD5628 Pmod控制器(顶层文件): pmod_dac_ad5628.vhd (8.4 KB)
SPI主控制器(必须包含在项目中): spi_master.vhd (8.8 KB)
特性
- 针对Digilent Pmod DA4(用于Analog Devices AD5628数模转换器的Pmod)的简化接口VHDL源代码
- 配置DAC使用其内部电压基准
- 通过简单的并行接口接收命令、地址和数据以控制DAC
- 处理与DAC Pmod的所有串行通信
- 可配置系统时钟频率
简介
本文详述了一个VHDL组件,用于处理与Digilent DAC AD5628 Pmod的接口,如图1所示。图2展示了该DAC Pmod控制器集成到系统中的典型示例。如图所示,DAC Pmod控制器连接到Pmod端口并执行事务以设置DAC输出(以及所需的其他功能)。命令、地址和数据通过简单的并行接口锁存,这些接口可以连接到用户逻辑或FPGA的输入端口。
图 1. Digilent DAC AD5628 Pmod
图 2. 示例实现
背景
DAC AD5628 Pmod提供了一个8通道、12位数模转换器。通道可以单独或同时更新。包含1.25V内部基准电压。其增益为2,可提供2.5V满量程输出范围。12位数据分辨率对应每比特约0.6mV。
操作原理
DAC Pmod控制器采用简易状态机及技术论坛提供的SPI主控组件来控制DAC Pmod。
状态机
该设计采用图3所示的状态机实现其操作。组件启动后立即进入开始状态。在此状态保持100微秒,确保Pmod有充足的上电时间。随后进入配置( configure ) 状态,启动DAC内部电压基准源。完成后即进入暂停( pause ) 状态。此处确保与DAC的两次操作间隔至少20纳秒,符合AD5628数据手册要求。接着取消忙( busy ) 信号,表明DAC Pmod控制器已准备好与DAC Pmod进行新事务,并进入就绪( ready ) 状态。在就绪( ready ) 状态等待直至dac_tx_ena 使能信号激活,此时锁存新事务的命令、地址和数据,并进入send_data 状态。在此状态下执行与Pmod的事务后,返回暂停( pause ) 状态。虽未图示,但任何时候重置组件都会使其返回开始( start ) 状态。
图 3 。 状态图
SPI 主控
在配置( configure ) 和send_data 状态期间,状态机控制SPI主控组件与Pmod上的DAC通信。SPI主控组件文档见此。
SPI主控配置为CPOL=1且CPHA=0,以满足AD5628转换器要求。
时钟配置
通过为ENTITY中定义的GENERIC参数clk_freq 和spi_clk_div 赋值,配置该DAC Pmod控制器的时钟。clk_freq 参数必须设置为clk 输入端口提供的系统时钟频率(单位MHz)。公式1定义了spi_clk_div 值的计算方法。

其中fclk 表示所提供系统时钟的频率,单位为MHz。
代码中指定的默认值为spi_clk_div =1。该值源自:任何clk_freq ≤100MHz时默认spi_clk_div =1。例如,该组件是在50 MHz系统时钟下开发和测试的。50/100 = 0.5,向上取整为1。
公式2定义了由此产生的串行时钟频率fsclk 。
此计算确保串行时钟低于DAC规定的最大通信频率50 MHz。当输入时钟频率(以MHz为单位)为100的整数倍时,通信速度最快。
事务
命令、地址与数据
与DAC Pmod的通信需发送4位命令 (dac_cmd) 、4位地址 (dac_addr) 及12位数据 (dac_data) 。表1列出了可用命令。最常见情况下,发送"0011"命令将写入并更新所选地址的DAC。各DAC地址列于表2中。所发送数据通常代表DAC通道将输出的模拟电压。每个数据位对应约0.6mV。
更多信息请参阅AD5628数据手册(5.9 MB)。
表 1. 命令代码
表 2. DAC通道地址
事务示例
DAC Pmod控制器通过其busy 口输出指示其可用性。当busy 信号为’0’时,控制器准备接受发送到DAC Pmod的事务。置位dac_tx_ena 输入可锁存当前dac_cmd 、dac_addr 和dac_data 的值。一旦锁存,控制器会置位busy信号,表示正在进行事务,当前不可用。当事务完成时,控制器再次取消busy 信号的置位,表示已准备好接受下一个请求。
图4展示了一个事务示例。busy 信号为’0’。用户逻辑随后提交命令“0011”,以写入并更新DAC G(地址“0110”)及其提供的数据。控制器置位busy 信号,表示请求已锁存,此时用户逻辑可以取消dac_tx_ena 信号的置位。控制器向DAC Pmod发送串行通信,完成后取消busy 信号的置位。之后,用户逻辑发起新事务来写入并更新DAC F(地址“0101”)。
如果dac_tx_ena 信号未被取消,一旦控制器可用,新的请求会被立即锁存并开始处理。
图 4 。 事务处理示例
端口描述
表3描述了DAC Pmod控制器的端口。
表 3 。 端口描述
连接方式
该Pmod配备一个6针连接器J1。表4提供了该连接器的引脚配置。需将DAC Pmod控制器的端口分配至FPGA引脚,这些引脚已按所列方式路由至连接器。
表 4 。 DAC Pmod引脚定义及与DAC Pmod控制器的连接
复位
reset_n 输入端口必须保持逻辑高电平,DAC Pmod控制器组件才能运行。该端口低电平时将异步复位组件。复位期间,组件会中止与DAC Pmod的当前事务,并将busy 输出置高表示不可用。复位释放后,DAC Pmod控制器将重新开始运行。
结论
该DAC Pmod控制器是可编程逻辑组件,与Digilent的DAC AD5628 Pmod接口连接。它激活DAC内部参考源,并简化发送命令、地址及数据的通信流程。








