在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: snowyd

谁会?

[复制链接]
发表于 2004-5-24 17:34:02 | 显示全部楼层

谁会?

在FFT的运算中,还需要用到双口RAM,建议这样构造:
component dual_port_ram
      generic(
             data_width     : integer := 16;
             ram_length     : integer := 64);
      port   (
             data_in        : in  std_logic_vector(data_width-1 downto 0);   -- 输入
             clk            : in std_logic;                                  -- 时钟输入
             en             : in std_logic;                                  -- Ram使能
             we             : in std_logic;                                  -- 写使能(低有效)
             address1       : in std_logic_vector(6 downto 0);               -- Ram地址1
             address2       : in std_logic_vector(6 downto 0);               -- Ram地址2
             data_out1      : out std_logic_vector(data_width-1 downto 0);   -- 输出1
             data_out2      : out std_logic_vector(data_width-1 downto 0)    -- 输出2
             );
end component;
发表于 2004-5-24 17:39:45 | 显示全部楼层

谁会?

我觉得有了上面3个components, 应该可以着手编程了。当然3个components也需要花时间的,但是可以先写FFT了。
对于旋转因子,分成实部矩阵和虚部矩阵,可以利用MATLAB计算。
其它有需要讨论的,我们可以多交流。GOOD LUCK!
发表于 2004-5-24 20:12:40 | 显示全部楼层

谁会?

[这个贴子最后由serene在 2004/05/26 00:11am 第 1 次编辑]


下面引用由snowyd2004/05/24 05:33pm 发表的内容:
component应该没有问题!!
你的第一个butterfly中旋转因子中只有实部,代表向WN 0,WN/2这些常数是吧?还有你的代表什么?
关于数据到位序,我还懂知道怎么回事,我想数据输入后在寄存器从新排序一下。

上升沿是指该sampling clock上升沿有效。--改为高电平有效
第一个butterfly中旋转因子中只有实部,是因为通常第一个stage的旋转因子虚部为0。
发表于 2004-5-24 20:31:16 | 显示全部楼层

谁会?



下面引用由snowyd2004/05/24 07:43pm 发表的内容:
不知道我能不能提个过分的要求?!!?
你能帮我实现第一级的
运算吗?惭愧真的!!
大学学了四年了
...

呵呵,也不要惭愧,本科生毕业设计选这样的题,我还挺佩服你的呢。
说句老实话,我近期看了200多份简历,面试了20几个人,现在的有些毕业生根本就不重视毕业设计,只是对付老师,到头来没有学到什么。既然你已经懂得怎么手算FFT,那么离实现它也不远了,只是实现的好些、差些而已。将来随着你的经验慢慢地多起来,也就不怕了。
关于具体实现,我们可以讨论一下实现的思路,比如用几个process等等。
不过我的思路是从DSP编程移过来的,怕有些方面考虑不周,造成综合有困难,反而误导了你。最好请这里的斑竹和其它高手们一起来讨论,那么出错的概率会低些。
 楼主| 发表于 2004-5-24 21:51:36 | 显示全部楼层

谁会?

你这样说,我真的挺感谢,还有你说你用dsp编程移过来的?!
我想问问你对ti公司的C3x尤其是C32怎么样?
我现在也要用这来编程,实现usb功能,今天刚刚把用c语言写中断基本搞清楚,但对于存储器,地址什么的不熟悉!!
不知道在主函数里怎么对其初始化!!
我想可能要嵌入汇编来做!!!!!!!!!1
usb芯片我选的是pdiusbd12,最终想实现C32与pc机通信
但驱动我没有时间编,只能现在在已有的简单开发板上简单测试!!
发表于 2004-5-24 22:20:55 | 显示全部楼层

谁会?

哦,我没有用过ti公司的C3x,我以前用ADI的。
好象这里DSP技术板块的斑竹是用TI的,而且这里有总线技术板块,你可以去那边问一问。
对于旋转因子矩阵,可采用带符号的纯小数格式。
先定义子类型:
subtype data_value is std_logic_vector(data_width-1 downto 0);                  -- 数据子类型
subtype int_data_value is std_logic_vector(int_data_width-1 downto 0);          -- 内部数据子类型
subtype coeff_value is std_logic_vector(coeff_width-1 downto 0);                -- 旋转因子系数子类型
type TF_R_Array is array (0 to fft_length-1) of coeff_value;                    -- 旋转因子实系数矩阵类型
type TF_I_Array is array (0 to fft_length-1) of coeff_value;                    -- 旋转因子虚系数矩阵类型

定义signal:
signal TWF_R             : TF_R_Array;                                  -- 保存旋转因子系数实部
signal TWF_I             : TF_I_Array;                                  -- 保存旋转因子系数虚部
那么在architecture里可以这样赋值:
TWF_R(0) <= "0111111111111111";-- 1.0000000000000000
TWF_R(1) <= "0111111101100001";-- 0.9951847265300408
TWF_R(2) <= "0111110110001001";-- 0.9807852798373441
TWF_R(3) <= "0111101001111100";-- 0.9569403344691928
TWF_R(4) <= "0111011001000000";-- 0.9238795302912346
TWF_R(5) <= "0111000011100001";-- 0.8819212609299769
TWF_R(6) <= "0110101001101100";-- 0.8314696074680210
TWF_R(7) <= "0110001011110001";-- 0.7730104469222286
TWF_R(8) <= "0101101010000001";-- 0.7071067729823045
TWF_R(9) <= "0101000100110011";-- 0.6343932740736400
TWF_R(10) <= "0100011100011100";-- 0.5555702209606407
TWF_R(11) <= "0011110001010110";-- 0.4713967227562591
TWF_R(12) <= "0011000011111011";-- 0.3826834162860497
TWF_R(13) <= "0010010100100111";-- 0.2902846592121690
TWF_R(14) <= "0001100011111000";-- 0.1950903021018074
TWF_R(15) <= "0000110010001011";-- 0.0980171186795313
TWF_R(16) <= "0000000000000000";-- -0.0000000232051033
TWF_R(17) <= "1111001101110101";-- -0.0980171648662602
TWF_R(18) <= "1110011100001000";-- -0.1950903476202550
TWF_R(19) <= "1101101011011001";-- -0.2902847036239677
TWF_R(20) <= "1100111100000101";-- -0.3826834591634897
TWF_R(21) <= "1100001110101010";-- -0.4713967636864071
TWF_R(22) <= "1011100011100100";-- -0.5555702595493172
TWF_R(23) <= "1010111011001101";-- -0.6343933099492147
TWF_R(24) <= "1010010101111111";-- -0.7071068057992759
TWF_R(25) <= "1001110100001111";-- -0.7730104763645517
TWF_R(26) <= "1001010110010100";-- -0.8314696332521498
TWF_R(27) <= "1000111100011111";-- -0.8819212828075961
TWF_R(28) <= "1000100111000000";-- -0.9238795480516510
TWF_R(29) <= "1000010110000100";-- -0.9569403479413638
TWF_R(30) <= "1000001001110111";-- -0.9807852888915254
TWF_R(31) <= "1000000010011111";-- -0.9951847310790355

发表于 2004-5-24 22:23:02 | 显示全部楼层

谁会?

旋转因子系数虚部:
TWF_I(0) <= "0000000000000000";-- -0.0000000000000000
TWF_I(1) <= "1111001101110101";-- -0.0980171417728959
TWF_I(2) <= "1110011100001000";-- -0.1950903248610312
TWF_I(3) <= "1101101011011001";-- -0.2902846814180685
TWF_I(4) <= "1100111100000101";-- -0.3826834377247698
TWF_I(5) <= "1100001110101010";-- -0.4713967432213333
TWF_I(6) <= "1011100011100100";-- -0.5555702402549790
TWF_I(7) <= "1010111011001101";-- -0.6343932920114275
TWF_I(8) <= "1010010101111111";-- -0.7071067893907904
TWF_I(9) <= "1001110100001111";-- -0.7730104616433904
TWF_I(10) <= "1001010110010100";-- -0.8314696203600855
TWF_I(11) <= "1000111100011111";-- -0.8819212718687868
TWF_I(12) <= "1000100111000000";-- -0.9238795391714431
TWF_I(13) <= "1000010110000100";-- -0.9569403412052785
TWF_I(14) <= "1000001001110111";-- -0.9807852843644349
TWF_I(15) <= "1000000010011111";-- -0.9951847288045385
TWF_I(16) <= "1000000000000010";-- -0.9999999999999998
TWF_I(17) <= "1000000010011111";-- -0.9951847242555426
TWF_I(18) <= "1000001001110111";-- -0.9807852753102526
TWF_I(19) <= "1000010110000100";-- -0.9569403277331064
TWF_I(20) <= "1000100111000000";-- -0.9238795214110256
TWF_I(21) <= "1000111100011111";-- -0.8819212499911665
TWF_I(22) <= "1001010110010100";-- -0.8314695945759558
TWF_I(23) <= "1001110100001111";-- -0.7730104322010665
TWF_I(24) <= "1010010101111111";-- -0.7071067565738183
TWF_I(25) <= "1010111011001101";-- -0.6343932561358522
TWF_I(26) <= "1011100011100100";-- -0.5555702016663020
TWF_I(27) <= "1100001110101010";-- -0.4713967022911850
TWF_I(28) <= "1100111100000101";-- -0.3826833948473295
TWF_I(29) <= "1101101011011001";-- -0.2902846370062694
TWF_I(30) <= "1110011100001000";-- -0.1950902793425833
TWF_I(31) <= "1111001101110101";-- -0.0980170955861671

上面的计算你自己核对一下,看有没有错误。
发表于 2004-5-24 22:27:18 | 显示全部楼层

谁会?



下面引用由snowyd2004/05/24 09:51pm 发表的内容:
你这样说,我真的挺感谢,还有你说你用dsp编程移过来的?!
我想问问你对尤其是C32怎么样?
我现在也要用这来编程,实现usb功能,今天刚刚把用c语言写中断基本搞清楚,但对于存储器,地址什么的不熟 ...

呵呵,如果没有记错的话,ti公司的C3x是浮点的吧,浮点的做算法比较好,用来做USB我就不是很清楚了。
 楼主| 发表于 2004-5-25 16:59:45 | 显示全部楼层

谁会?

我们现在没有c5000的开发板,只好用3000的简单的开发板所以选32位浮点的c32
!!
你真的好热心,我很想实现着这些东西,只有我实现了心了
才明白自己学了东西,但现在时间太短,要做的事情太多!
发表于 2004-5-25 17:46:55 | 显示全部楼层

谁会?

呵呵,只要自己用心学,总会有收获的。
另外,建议你把帖子的主题改一改,与FFT有点关系,这样版主们和其它通道的朋友才会注意到你的帖子,你也会得到更多的帮助。俗话说,三人行必有我师。
实际上不要太着急,因为着急本身起不到作用。从这个64点的FFT来看,估计程序也就2000多行,由于有6个stage,每个stage有64/2=32次butterfly运算,所以光是butterfly模块的例化估计就会占去1300-1400行,再减去entity、component、signal定义等等,主要的程序也就300-400行,这样想想,就会觉得时间还是来得及的。其实做任何事,首先自己要有信心。
关于第一级的butterfly运算,我可以考虑一下,帮你理一理思路。说实在最好还是请版主们和其它高手帮你出出点子,以免综合时出现困难,那就前功尽弃了,毕竟你的毕业设计时间所剩不多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-8 13:41 , Processed in 0.027122 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表