2015-12-18 18 views
0

在我的滤波器设计中,我使用了固定点算法并对信号使用了sfixed。设计与所有时间合成,但我的功能模拟和后合成/ R &R模拟不匹配后arith逻辑块..给一个小的ex下面,我看到crf_int_r在Post合成器模拟中不匹配..可以有人帮助我理解,它是不是合成不当或功能和后合成器模拟之间不匹配的其他问题。在ISE中使用Xilinx ISE 14.7和VHDL 200X选项。在VHDL中使用固定点

signal add_alpha1_r : sfixed(5 downto -13) ; 
signal add_alpha2_r : sfixed(6 downto -13) ; 
signal crf_r : sfixed(17 downto -13) ; 
signal crf_int_r : sfixed(17 downto -7) ; 
signal alpha_log : sfixed(4 downto -13) ; 
signal imgdel_r_d4 : sfixed(4 downto -13) ; 
signal imgsum_d2 : sfixed(4 downto -13) ; 

    add_alpha1_r <= imgdel_r_d4 - imgsum_d2 ; --19.13 
    add_alpha2_r <= alpha_log + add_alpha1_r ; -- 20.13 
    crf_r  <= add_alpha2_r * beta ; -- 31.13 
    crf_int_r <= crf_r(17 downto -7); 
+0

声明,合成前操作数和结果二进制值会很好。您是否使用非默认软件包泛型? – user1155120

+0

我使用ieee定点pkg's。使用ieee_proposed.fixed_float_types.all; – kaps

+0

在后合成器网表中,一些信号生成声明为​​std_logic_vector(5 downto -3)。这种信号在VCOM中产生错误。并且我正在根据xilinx的信息改变这些信号来输入std_logic_vector1。但我仍然得到一个不匹配,虽然我看到乘数已被推断.. – kaps

回答

1

您遇到了综合问题。使从在评论中给出的代码Minimal, Complete, and Verifiable example,我试图与ISE 14.7合成这种和VHDL-200X选项上:

library ieee; 
use ieee.std_logic_1164.all; 
library ieee_proposed; 
use ieee_proposed.fixed_pkg.all; 

entity sfixed_test is 
    port (alpha_log : out sfixed(4 downto -13)); 
end sfixed_test; 

architecture rtl of sfixed_test is 
    constant alpha : sfixed(10 downto 0) := "00001111000"; -- 120 
    type rom_t is array(0 to 2047) of sfixed(4 downto -13); 
    constant alpha_rom : rom_t := (120 => "111111111111111111", 
           others => "000000000000000000"); 
begin -- rtl 
    alpha_log <= alpha_rom(to_integer(alpha)); 
end rtl; 

XST报告以下警告:

警告:“: :fixed_pkg:TO_INTEGER(sfixed):metavalue检测,返回0"

快速查看到RTL或技术的地图查看器显示,所有的产出,并连接VCC到地按预期在我的例子。

问题是执行to_integer如bewlow所述。你可以解决这个问题,如果你从ROM改变读数:

alpha_log <= alpha_rom(to_integer(unsigned(std_logic_vector(alpha)))); 

还包括包ieee.numeric_std。然后一切正常。

进一步注意事项:警告消息引用行5085 ff。与ISE一起提供的ieee_proposed/fixed_pkg_c.vhd。它读取:参数

if (Is_X (arg)) then 
    assert NO_WARNING 
    report fixed_pkg'instance_name 
    & "TO_INTEGER (sfixed): metavalue detected, returning 0" 
    severity warning; 
    return 0; 
end if; 

Is_X(arg)检查是否包含UXZW,或-。如果arg(这是alpha)是一个常数,它就会失败。但是,它在alpha是信号(输入)时起作用。

+0

非常感谢马丁,为这样一个详细的解释.. – kaps