在我的滤镜设计中,我使用定点算法并使用sfixed作为信号。该设计综合了所有时序,但我的功能模拟和后合成器/ P& R模拟在arith逻辑块之后不匹配。给一个小的ex下面,我看到crf_int_r在Post合成器模拟中不匹配..可以有人帮助我理解,它是否未正确合成或其他问题导致功能和后合成器模拟不匹配。在ISE中使用Xilinx ISE 14.7和VHDL 200X选项。
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 :(得分: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报告以下警告:
警告:&#34; :: fixed_pkg:TO_INTEGER(sfixed):检测到元数据,返回0&#34;
快速浏览RTL或技术地图查看器,显示所有输出都连接到地面而不是VCC,如我的示例所示。
问题是bewlow描述的to_integer
的实现。如果您将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)
检查参数是否包含U
,X
,Z
,W
或-
。如果arg
(alpha
)是常量,则此处失败。但是,当alpha
是信号(输入)时,它可以工作。