在VHDL中使用定点

在VHDL中使用定点,vhdl,fpga,xilinx,Vhdl,Fpga,Xilinx,在我的滤波器设计中,我使用定点算法,并对信号使用sfixed。该设计在满足所有时序的情况下进行综合,但在arith逻辑块之后,我的功能模拟和后期合成/P&R模拟不匹配。。下面给出一个小例子,我看到crf_int_r在后期合成模拟中不匹配。。有人能帮我理解一下,它是否合成不当,或者是功能模拟和合成后模拟之间不匹配的其他问题。在ISE中使用Xilinx ISE 14.7和VHDL 200X选项 signal add_alpha1_r : sfixed(5 downto -13) ; signal a

在我的滤波器设计中,我使用定点算法,并对信号使用sfixed。该设计在满足所有时序的情况下进行综合,但在arith逻辑块之后,我的功能模拟和后期合成/P&R模拟不匹配。。下面给出一个小例子,我看到crf_int_r在后期合成模拟中不匹配。。有人能帮我理解一下,它是否合成不当,或者是功能模拟和合成后模拟之间不匹配的其他问题。在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);
signal add_alpha1_r:sfixed(5到-13);
信号添加字母2:固定(6至-13);
信号crf_r:固定(17至-13);
信号crf_int_r:sfixed(17至-7);
信号alpha_log:sfixed(4至-13);
信号imgdel_r_d4:sfixed(4至-13);
信号imgsum_d2:sfixed(4至-13);

添加您遇到的合成错误。根据评论中提供的代码,我尝试将其与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;
还包括ieee.numeric_std的软件包
。然后一切正常

进一步说明:警告消息指的是第5085行ff。ISE随附的ieee建议/固定组件的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是一个信号(输入)时,它可以工作。

声明、合成前后的操作数和结果二进制值都很好。您使用的是非默认包泛型吗?我使用的是ieee定点软件包。使用ieee_proposed.fixed_float_types.all;在post synth网络表中,一些信号以std_逻辑_向量(5到-3)的形式生成。这样的信号会在VCOM中产生错误。根据xilinx提供的信息,我将这些信号更改为std_logic_vector1类型。但我仍然得到了一个不匹配,尽管我看到乘数已经被推断出来了。谁是模拟器?我问这个问题的原因是cfr\r赋值get与-2008实例化包ieee.fixed\u generic\u pkg的绑定检查失败。请在问题中添加新信息。您错过了beta声明,我将其设置为与add_alpha2_r相同。二进制操作数和结果值?你需要写一个适当的问题。显示包含所有声明的代码,提供一组输入和相应的输出,并告诉我们输出与预期输出有何不同。如果输出在功能模拟人生中是正确的,而在P&R后是不正确的,那么请准确地告诉我们区别是什么。“转换为整数并与Matlab进行比较”和“all-ve”对任何人都没有用处。
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;