近期在进行emmc数据读写程序调试时,逼迫自己从一个时序小白跨进了时序约束的大门,这里记录一下供大家学习参考。
需求
emmc hs200模式下,允许最高时钟频率为200M。其中emmc和FPGA之间的引脚有单向EMMC_CLK,双向CMD和DATA[7:0]。根据emmc手册,要求建立时间为1.4ns,保持时间为0.8ns。EMMC_CLK是FPGA提供给emmc的,因此要求发送命令或数据时,CLK和CMD到达emmc芯片时要满足手册要求的建立和保持时间。
添加约束
要使输出的CLK和CMD满足emmc的建立保持时间,就需要告诉FPGA编译器,输出的延迟有多少。因此分两步:
第一步:添加时钟约束。
我用的是xilinx ,vivado软件,可以手写xdc约束文件,也可采用GUI界面,网上搜索如何进行约束,都是教的用手写,但遗憾的是,很多文章都是各种抄袭或者写得笼统粗略,对一个新手来说属实很难受(因为总出现语法错误还不知道原因)。因此这里推荐新手采用GUI添加约束,然后软件自动写到xdc文件,自己再去看,等熟练之后再进行手写。
点击implementation下的Edit Timing Constraints即添加约束


如图所示,可以添加时钟约束,输入输出约束等。
这里,我的时钟是锁相环锁出来的,然后连接到输出端口EMMC_CLK,因此属于衍生时钟,要用create generated clock(锁相环锁出来的或者自己写个分频代码分出来的都属于衍生时钟)。

本文讲述了作者在调试EMMC数据读写程序时如何通过添加时钟约束和输出延迟来满足emmc的时序要求,遇到的违例问题及解决策略,强调分析时序违例和优化的重要性。
2万+

被折叠的 条评论
为什么被折叠?



