在创建完DDR4的仿真模型后,我们为了实现异步时钟的读写,板卡中在PL端提供了一组差分时钟,可以用它通过vivado中的Clock Wizard IP核生成多个时钟,在这里生成两个输出时钟,分别作为用户的读写时钟,这样就可以用异步时钟来读写ddr4数据。今天我们来介绍vivado中的Clock Wizard IP核。
Clock Wizard IP核是 Xilinx Vivado Design Suite 中的一个时钟管理 IP核,主要用于FPGA设计中的时钟生成和管理。Clock Wizard 提供了丰富的时钟配置选项。
在基本配置中可以使用时钟输入(clk_in),时钟输出(clk_out),复位(reset),时钟锁(locked)等信号来完成Clock Wizard IP核的基本配置,其中locked用来指示输出的时钟是否稳定,当locked有效后方可使用输出时钟。
Clock Wizard IP核时钟输入的基本配置。
由于输入时钟为管脚输入的差分时钟,我们选择Differential clock capable pin,时钟频率为100MHz差分时钟。
根据需求可以自己勾选两组输出时钟,修改输出的时钟频率,在这里使用50MHz和100MHz作为两组输出时钟,将来可以分别作为读写DDR4的时钟。勾选上reset和locked,reset可以连接到复位管脚,locked作为输出时钟是否稳定的标志。
点击OK,IP建立完成后,将IP例化到模块顶层中。
接下来我们通过仿真观察输出的时钟
可以看到当复位信号拉低后,过段时间会输出两组时钟,一组为100MHz,一组为50MHz,随后locked会拉高,表示输出时钟稳定,可以使用这两组时钟作为读写DDR4的时钟。
后边会使用两个fifo来缓存从ddr4读出的数据和将要写入ddr4的数据:
(1)、写DDR4的缓存fifo(wrfifo)使用100MHz时钟作为wrfifo的写时钟,使用DDR4输出的时钟作为wrfifo的读时钟。
(2)、读DDR4的缓存fifo(rdfifo)使用DDR4输出的时钟作为rdfifo的写时钟,使用50MHz时钟作为rdfifo的读时钟。
这样我们用这两个fifo来连接DDR4:
如果DDR4不满并且wrfifo不空,那么就将wrfifo中的数据写入DDR4中,当DDR4满后,停止向DDR4写数据,此时如果wrfifo没满,还可以将wrfifo写满。
当DDR4不空并且rdfifo不满时,将DDR4中的数据读出放到rdfifo中,当rdfifo满后,停止从DDR4读数据。
由此可见最大容量为DDR4+wrfifo+rdfifo。
学习FPGA、技术交流可以私信或点击主页联系
威三学社出品