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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: snowyd

谁会?

[复制链接]
 楼主| 发表于 2004-5-28 08:28:46 | 显示全部楼层

谁会?

哦,有些事我觉得没用就删掉了1!
对于资源来讲,我也询问了一下其他的人,关于蝶形运算他们建议我只用第二种就可以,应该会省资源
发表于 2004-5-28 09:23:50 | 显示全部楼层

谁会?

对于DSP来讲,蝶形运算合并后可以省掉子程序,会节省资源,这是对的,因为DSP是顺序执行的。
而对于FPGA来讲,第一个stage的蝶形运算有32次,将会有32个stg1_butterfly存在,如果用后面的butterfly代替前面的,compiler综合的时候又不能简化到stg1_butterfly那样,那么所多占的资源将是32倍的,因为FPGA是并行运算的。
至于蝶形运算只用第二种会省资源的说法,我个人认为不太合理,除非stg1_butterfly写的很差,比第二种butterfly还占资源,这种情况是不大可能的。这一点还是请这里的斑竹来讲讲吧。大家多讨论,才会进步。
发表于 2004-5-28 10:20:23 | 显示全部楼层

谁会?

用stg2_butterfly代替stg2_butterfly,在这里是不会浪费很多资源的
在调用stg2_butterfly时,你会把其虚部直接接到了,综合器在综合时,
会对该处例化的stg2_butterfly进行优化,如果综合器比较好,其资源相对于stg1_butterfly是不会多很多的,甚至相当
发表于 2004-5-28 10:20:56 | 显示全部楼层

谁会?

个人看法
大家多讨论
发表于 2004-5-28 15:50:18 | 显示全部楼层

谁会?



下面引用由atuhappy2004/05/28 10:20am 发表的内容:
用stg2_butterfly代替stg2_butterfly,在这里是不会浪费很多资源的
在调用stg2_butterfly时,你会把其虚部直接接到了,综合器在综合时,
会对该处例化的stg2_butterfly进行优化,如果综合器比较好,其资源相对于 ...

谢斑竹。
那么哪一种综合器比较好呢?
还有对于这样的一个project怎样估算所需的资源呢?有时候做项目没有可能在程序做了差不多的时候才立项,通常是先估算资源、选芯片、核算成本后才有机会立项的。
发表于 2004-5-28 16:34:13 | 显示全部楼层

谁会?

如果是fpga,synplify就可以了
估计乘加器所需资源及所需寄存器资源
 楼主| 发表于 2004-5-28 22:04:04 | 显示全部楼层

谁会?

“下面这点程序怎么有点看不懂了,还有对Butt_Data值乘2,每次进行蝶形运算时就将输入的两个数据变成1/4,旋转因子不变,这样6级后输出为正常的1/4096,这样防止溢出没问题,但有可能使某些数又过小结果16位精度不够变为0。。我现在得把这段程序弄明白,然后才能弄出蝶形运算来!!”


data_scaling:
process(reset, clk)
-- 该进程用于比例变换,为防乘法器溢出,相乘数据/2,乘积即为原来的1/4,所以对data1_in进行变换,存于data1_in_div4。
begin
if reset = '0' then
    data1_r_in_div4 <= (others => '0');
    data1_i_in_div4 <= (others => '0');
elsif Rising_Edge(clk) then  
    if data1_r_in(data_width-1) = '0' then
       data1_r_in_div4 <= "00" & data1_r_in(data_width-1 downto 2);
    else
       data1_r_in_div4 <= "11" & data1_r_in(data_width-1 downto 2);
    end if;
    if data1_i_in(data_width-1) = '0' then
       data1_i_in_div4 <= "00" & data1_i_in(data_width-1 downto 2);
    else
       data1_i_in_div4 <= "11" & data1_i_in(data_width-1 downto 2);
    end if;
end if;
end process data_scaling;

-- 输出=原输出值/2,这里实际需要对Butt_Data值乘2。
data1_r_out <= std_logic_vector(Butt_Data1_Out_R_signed(data_width-2 downto 0)) & '0';
data1_i_out <= std_logic_vector(Butt_Data1_Out_I_signed(data_width-2 downto 0)) & '0';
data2_r_out <= std_logic_vector(Butt_Data2_Out_R_signed(data_width-2 downto 0)) & '0';
data2_i_out <= std_logic_vector(Butt_Data2_Out_I_signed(data_width-2 downto 0)) & '0';
--butterfly乘积实部计算
A_C_Mult: Multiplier
generic map (
                 multiplier_width => data_width,
                 data_width       => tw_fact_width
                 )
        port map (
                 load             => data_rd,
                 mult1_data       => tf1_r,
                 mult2_data       => data2_r_in,
                 product          => Mult_A_C_Out
                 );
--butterfly乘积虚部计算
A_D_Mult: Multiplier
generic map (
                 multiplier_width => data_width,
                 data_width       => tw_fact_width
                 )
        port map (
                 load             => data_rd,
                 mult1_data       => tf1_r,
                 mult2_data       => data2_i_in,
                 product          => Mult_A_D_Out
                 );
end rtl;
发表于 2004-5-29 10:36:53 | 显示全部楼层

谁会?

可以这样理解:
设定所有的数据格式为X.xxxxxxx xxxxxxxx:
对于乘法器,乘积为  Yy.yyyyyy yyyyyyyy,
那么在data_scaling这个process中,需要把data_in的X.xxxxxxx xxxxxxxx带符号右移一位,以便于和乘积进行加减运算。
加减运算后的结果(Yy.yyyyyy yyyyyyyy格式)乘以2,也就是左移一位,使得butterfly的输出仍是X.xxxxxxx xxxxxxxx格式。
依此类推,这样6级后输出仍是X.xxxxxxx xxxxxxxx格式,不会成正常的1/4096。所以不存在16bit精度不够的问题。
 楼主| 发表于 2004-5-29 11:40:01 | 显示全部楼层

谁会?

乘法器以我们的想法怎么都不溢出,但这样加法就会溢出,所以输入蝶形单元的数据必须先除二或四,运算后直接进入下一级依次下去
,因为这里有个累加过程!!!!
拿sin函数说,基次波,变换后可以达到32。
 楼主| 发表于 2004-5-29 12:24:35 | 显示全部楼层

谁会?

现在看来我想把fft做成最顶层相当于一个控制器,发送控制其它各部分!!!
这部分要改,数据的输入直接进入ram!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-8 14:00 , Processed in 0.022454 second(s), 6 queries , Gzip On, Redis On.

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