首页 > 解决方案 > :[SYNTH 8-944] 0 运算符 sll 和 srr 的定义

问题描述

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 --use IEE.NUMERIC_STD.ALL; --tried with this package aslo 

architecture Behavioral of my_code is

  signal DATA: signed(31 downto 0);  
  signal DATA_OUT signed(31 downto 0); 
  signal f: std_logic_vector(7 downto 0);

begin

   DATA_OUT<=DATA srl  (( f-1)  sll '1');

end behavioral;

这是我的代码的一小部分。我正在使用 vivado 2018.2 。对于上述行,我得到 [synth 8-944] 0 所有运算符的定义。

我知道 Verilog,但我是 VHDL 的新手。我应该为此使用任何其他软件包吗?

请为此提供解决方案或“等效功能”来帮助我。

标签: vhdl

解决方案


您的问题是因为没有为您使用的类型组合定义slland运算符。srl有带签名的运算符:

[unsigned, integer, return unsigned]
[signed, integer, return signed]

unsigned并且signednumeric_std包中的类型。std_logic_vector在任何标准包中都没有为 a 定义这些运算符。(STD_LOGIC_ARITH 并且STD_LOGIC_UNSIGNED是非标准的。不要使用它们。)

所以,你有两个选择:

i)(不推荐)转换您的所有类型,使其适合上述任何一个签名或

ii) (推荐)不要使用sllorsrl运算符。它们定义不正确,可能导致合成的逻辑超出您的需要。相反,使用其他 VHDL 运算符(例如切片/连接或数学)。您正在尝试在这里进行数学运算,因此我可能会使用数学运算符。你仍然需要使用这个numeric_std包,因为你在做数学。std_logic_vector除非您使用非标准软件包,否则您无法进行数学运算。


推荐阅读