2015-12-18 23 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