mina_conner 2018-12-23 22:34 采纳率: 100%
浏览 1024

VHDL分布式算法中的移位累加如何实现?

在用vhdl做滤波器的fpga实现时,尝试采用分布式算法和查表法来优化,因为找到的例子是用的Verilog语言,在写到最后的移位累加时就出现问题了,移位累加无法得到正确的值。想请前辈们帮忙提供一些思路或者经验,我对分布式算法其实也没有弄的太清楚,麻烦各位了
部分代码:
---------------LUT查表---------------------------
LUT1: PROCESS(CLK,TABLEIN1)
BEGIN
IF CLK='1' AND CLK'EVENT THEN
CASE TABLEIN1 IS
WHEN "000" => TABLEOUT1<="0000000000000000";
WHEN "001" => TABLEOUT1<="0000000000000001";
WHEN "010" => TABLEOUT1<="1111111111111010";
WHEN "011" => TABLEOUT1<="1111111111111011";
WHEN "100" => TABLEOUT1<="1111111111110001";
WHEN "101" => TABLEOUT1<="1111111111110010";
WHEN "110" => TABLEOUT1<="1111111111101011";
WHEN "111" => TABLEOUT1<="1111111111111100";
WHEN OTHERS => TABLEOUT1<="ZZZZZZZZZZZZZZZZ";
END CASE;
END IF;
END PROCESS;

LUT2: PROCESS(CLK,TABLEIN2)
BEGIN
IF CLK='1' AND CLK'EVENT THEN
CASE TABLEIN1 IS
WHEN "000" => TABLEOUT2<="0000000000000000";
WHEN "001" => TABLEOUT2<="0000000000011100";
WHEN "010" => TABLEOUT2<="0000000010010000";
WHEN "011" => TABLEOUT2<="0000000010101100";
WHEN "100" => TABLEOUT2<="0000000011010101";
WHEN "101" => TABLEOUT2<="0000000011110001";
WHEN "110" => TABLEOUT2<="0000000101100101";
WHEN "111" => TABLEOUT2<="0000000110000001";
WHEN OTHERS => TABLEOUT2<="ZZZZZZZZZZZZZZZZ";
END CASE;
END IF;
END PROCESS;

--------------查找表累加------------------------------
LUT_ADD: PROCESS(TABLEOUT1,TABLEOUT2)
BEGIN
DATA_ALL_OUT<=(TABLEOUT1(15)&TABLEOUT1)+(TABLEOUT2(15)&TABLEOUT2);
END PROCESS;
--------------移位累加--------------------
ACC_SUB: PROCESS(CLK,DATA_ALL_OUT,ADD_SUB)
VARIABLE ATEMP : STD_LOGIC_VECTOR(17 DOWNTO 0);
BEGIN
IF CLK='1' AND CLK'EVENT THEN

        IF(ADD_SUB='0') THEN
         ATEMP:="000000000000000000";
         ATEMP(17 DOWNTO 0):=ATEMP(17 DOWNTO 0)+(DATA_ALL_OUT(16)&DATA_ALL_OUT);  -- 
         ATEMP:=ATEMP(17)&ATEMP(17 DOWNTO 1);--因系数经量化放大512,故此处可向右移除以215

        ELSE 
         ATEMP(17 DOWNTO 0):=ATEMP(17 DOWNTO 0)-(DATA_ALL_OUT(16)&DATA_ALL_OUT);--因是有符号运算,需将结果用补码表示且每九个周期输出一次
         RESULT<=ATEMP(17 DOWNTO 1)+ATEMP(0);
         ATEMP:="000000000000000000";
         END IF;
       END IF;
     END PROCESS;
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!