vivado手写ROM改IP核

文章讲述了作者在遇到DAC输出波形出现异常小肩膀的问题后,怀疑是时序问题,于是尝试将手写ROM改为IP核以检查和解决潜在的时序延迟。通过在Vivado中创建SinglePortRomIP核,加载coe文件进行配置,以期望改善波形质量。
摘要由CSDN通过智能技术生成

   一、引言    

        手写了一个ROM,用于ADC或者DAC的寄存器配置。DAC出来的波形总是有两个对称的小肩膀,找不到原因。时序没有报错,但是有延迟。之前听同事说他们也遇到过这样的问题,是时序问题。所以,我也想试一下,或许是手写的IP核造成了隐藏的时序问题,从而产生小肩膀。

vivado中提示的时序延迟如下图所示:

DAC出来的波形,两边的小肩膀如下图所示:


 

 

二、手写ROM改IP核

1. ROM IP核简介

        ROM是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除,且资料不会因为电源关闭而消失。

        用IP核生成的ROM、RAM都存在于FPGA内部的RAM中,掉电都会丢失。而用IP核生成的ROM只是提前添加了数据文件。在FPGA运行的时候,通过添加数据文件给ROM进行初始化,才使得IP核生成的ROM模块像一个非遗失性储存器。通过修改给ROM的数据文件,就能修改ROM里面的内容。

        在Vivado中,ROM的IP核生成需要初始化文件,这个初始化的文件就是.coe文件(在Altera产品中这个初始化文件好像是.mif)。当coe文件中的数值少时可以手动编写,当需要的数据量大时,可以借助Matlab生成。这里我们原来已经有数据了,也不是很多,所以手写.ceo文件。

2. 准备好coe文件

        把配好的寄存器地址和寄存器值写成coe文件,格式如下图所示。

memory_initialization_radix = 16; //16进制
memory_initialization_vector =    //初始化数据
0800100001,
0800100000,        
0C000000C1,
0C00103200,
0800100004

3. 生成IP核并导入coe文件

        废话不多说,直接上图操作:

选择IP核

选择Single Port Rom

根据coe文件选择位宽和深度,深度在这里其实就是指向量的个数,也就是数据的个数,再具体到我这个例子就是指我要配置的寄存器的个数。

 

加载coe文件

 最后点击右下角的OK,生成IP核。

3. 进行例化使用

       最后, 在需要用到的地方进行例化使用。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值