vhdl - :[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 的新手。我应该为此使用任何其他软件包吗?
请为此提供解决方案或“等效功能”来帮助我。
解决方案
您的问题是因为没有为您使用的类型组合定义sll
and运算符。srl
有带签名的运算符:
[unsigned, integer, return unsigned]
[signed, integer, return signed]
unsigned
并且signed
是numeric_std
包中的类型。std_logic_vector
在任何标准包中都没有为 a 定义这些运算符。(STD_LOGIC_ARITH
并且STD_LOGIC_UNSIGNED
是非标准的。不要使用它们。)
所以,你有两个选择:
i)(不推荐)转换您的所有类型,使其适合上述任何一个签名或
ii) (推荐)不要使用sll
orsrl
运算符。它们定义不正确,可能导致合成的逻辑超出您的需要。相反,使用其他 VHDL 运算符(例如切片/连接或数学)。您正在尝试在这里进行数学运算,因此我可能会使用数学运算符。你仍然需要使用这个numeric_std
包,因为你在做数学。std_logic_vector
除非您使用非标准软件包,否则您无法进行数学运算。
推荐阅读
- javascript - 如何获得具有特定序列的数组组合?
- spring-boot - Spring Boot getbean vs autowired
- java - 如何显示由 BigDecimal 实例化的确切值
- oauth-2.0 - {"error":"invalid_request","error_description":"Missing parameter: username"} 在 Keycloak Google Social 登录
- c - '\0' 结尾的 C 字符串
- elasticsearch - Elasticsearch 将动态映射的位置数据重新索引到 geoshape
- javascript - 如何在 IE 11 中创建一个空的文件对象
- c# - 将数据从 WebMethod 返回到 ajax
- asp.net - .NET 通过 Microsoft Jet 引擎访问受感染的 Excel 文件(带有勒索软件),这会影响或感染服务器吗?
- javascript - Bcrypt.compare 不在 chai/mocha 测试中执行,而是在代码中执行