原创 altera中ROM的内部结构。。。调试DDS中的收获

2009-7-26 02:21 6035 9 12 分类: FPGA/CPLD

  DDS做过一次,不过使用XILINX系列的芯片,那时候FPGA的RAM容量并不太大,所以就值存储了1/4的波形数据,然后通过正弦的对称性来实现整个信号的产生,中间也没遇到什么问题,产生的波形还是可以的,今天我重新做DDS,只不过FPGA换成altera的芯片,如果对波形进行完整的存储,没有什么问题的,只不过在6M正弦的时候波形就不太好看了,我还想通过存储1/4 的波形来宽展容量,但是看到的波形在中间过渡的地方总是像滤波器那样,显示突出再回来,在频率高的时候,本来点就少,那个位置就很突出,。。。。。挺烦人的!中午到现在一直在找原因,波形沿Y轴翻转没有问题,就是在沿X轴翻转的时候出现这个问题
   刚才在使用SIGNALTAP调试的时候总与看到问题的所在。

DDS输出频谱杂散的抑制.pdfpdf

这个里面提到一些ROM存储扩展到方法,里面说“由于正弦信号的波形具有四分之一对称性,ROM表中只需存储[ 0 ,π/ 2 ]的波形 ,在电路中利用相位的最高位控制输出波形的符号 ,次高位控
制 ROM表的寻址 ,对相位和幅度进行适当的翻转便可得到整周期波形 ,硬件电路中易于实现
ROM表压缩比4 :1”。所以在编写代码的时候;假如说是12为的地址线,10位的数据,那么通过使用累加器输出的高14位中的低12位和地13位异或的结果作为ROM的地址,这样就可以把波形沿y轴翻转,把第14位和输出的数据异或得到输出的数据,可以实现波形的沿X轴翻转,但是波形出现了问题,问题就在于altera内部实现ROM的结构和XILINX不一样,它不能够立刻将输入地址对用的数据输出,而是要等2个时钟才会输出点击看大图


看过ROM内部的结果的话就不会奇怪了:
点击看大图

这个是双口ROM的结构 。不过已经可以说明问题了,这个IP核内部对输入数据和输出数据都做了锁存,这个锁存的选项在初始化IP的时候是可以选择的
13682312-0388-48cd-a700-207c99b0e14b.jpg

里面可以看的很清楚,只能够对输出数据是否锁存进行选择,但是对输入是不让选择的的;
当我把里面的锁存取消后,波形的效果就会好很多,不过还是不行的。。。

可能自己的做法不对吧,对波形的翻转不该这样做。。。我把代码放上来,希望有大虾指导

https://static.assets-stash.eet-china.com/album/old-resources/2009/7/26/ed0cd0f9-2021-4b6a-afa6-a72846d2534c.rarrarrarrarrarrarrarrar









PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2013-3-13 21:37

呵呵,这个问题我遇到过,我是这样处理的,将相位输出序列分两路,一路去查找表,一路接几个寄存器(我接3个),Altera的lpm_ram是有输入输出锁存的

zhangshaobing517_935512703 2009-7-28 16:27

呵呵呵

用户124183 2009-7-28 15:46

我最近也在做DDS,也用到了那个ROM,仿真也看了两个周期的延迟,但是输出来的数据是没有问题的,只是没烧到板子里试试,过两天拿到板子再看看实际波形。 QQ:363-90-10-60
相关推荐阅读
zhangshaobing517_935512703 2011-03-21 01:28
KC24RT-300调试笔记
项目中需要使用LED驱动器,主要是为了让一串LED发出的光照一致,所以在试验中采用LED串联的方式比较好点,LED并联容易导致LED发光的 不均匀以及寿命减少。我在项目中采用金升阳公司的KC24RT-...
zhangshaobing517_935512703 2010-11-19 14:53
线程中CreateEvent和SetEvent及WaitForSingleObj
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信...
zhangshaobing517_935512703 2010-11-15 13:29
VS2008 BEGIN
Visual Studio 2008环境与VC6.0的环境存在着比较大的区别,下面就一些小小的区别在这里做一些探讨,欢迎指教!1、如果是调试控制台程序,很多时候点击“启动调试”后是一闪而过,此时可有两...
zhangshaobing517_935512703 2010-11-01 20:38
使用MFC的数组类
 MFC的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型。C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的...
zhangshaobing517_935512703 2010-09-07 13:14
循环
 循环设计的注意的事情:(1)双重循环的跳出问题,break只挑出所在的循环,如果使用双层FOR循环,单个BREAK就不可能跳出所有的双层(2)在迭代的时候,注意起始和终止的条件,尤其是终止问题(3)...
zhangshaobing517_935512703 2010-09-02 01:09
图像处理改进
1.特征点提取的算法  标志点的提取算法对结果的影响虽然没有经过试验或者计算的推算,每1个pix的偏差对结果的影响有多大,但是不可避免的,要想获得高精度的  测量结果,高精度的提取对结果的影响还是很大...
EE直播间
更多
我要评论
3
9
关闭 站长推荐上一条 /1 下一条