- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的代码中,我试图连接三个 std_logic 输入以生成一个三位无符号输出。执行此操作所需的语法似乎不直观,我不明白。有人解释这是怎么回事吗?
当我在评论中说“失败”时,我的意思是综合会产生以下错误消息:found '4' definitions of operator "&", cannot determine exact overloaded matching definition
。然后它在 numeric_std 中给出 2 个行号,在 std_1164 中给出 2 个行号(但我没有要检查的源文件的那些特定版本)。
use IEEE.NUMERIC_STD.ALL;
entity Thingy is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : in STD_LOGIC;
clk : in STD_LOGIC;
decoded : out UNSIGNED (2 downto 0));
end Thingy;
architecture Behavioral of Thingy is
begin
process (clk)
variable dec : STD_LOGIC_VECTOR(2 downto 0) := (others => '0');
begin
if rising_edge(clk) then
-- Intermediate variable, works ok.
dec := a & b & c;
decoded <= unsigned(dec);
-- Also ok. Implicit conversion from std_logic to unsigned?
-- decoded <= a & b & c;
-- No intermediate variable, fails.
-- decoded <= unsigned(std_logic_vector(a & b & c));
-- Fails.
-- decoded <= unsigned(a & b & c);
end if;
end process;
end Behavioral;
最佳答案
让我们看看您的各种情况。
首先,您只需将串联的 std_logic
分配给 unsigned
信号,正如您所说,它有效!
decoded <= a & b & c;
那么,您是说这工作正常(应该!)并且简单明了,那么您为什么对它有疑问? unsigned
根据定义,字面意思是由 std_logic
组成的。这里没有什么奇怪的。这是最好的写法。
此处您要尝试进行一系列转换:
decoded <= unsigned(std_logic_vector(a & b & c));
它失败了,因为它不能将它还不能推断(&
运算符的结果)的某些数组类型的 std_logic 转换为 std_logic_vector
。但是这个语法,虽然看起来几乎一样,应该做你想做的,因为它没有做转换,只是简单地告诉编译器表达式的类型:
decoded <= unsigned(std_logic_vector'(a & b & c));
同样,这可以用同样的方式解决:
decoded <= unsigned(a & b & c);
改用这个:
decoded <= unsigned'(a & b & c);
我看到的主要误解是您可能认为连接在一起的 std_logic
在某种程度上与 std_logic_vector
相同。这根本不是。 std_logic_vector
只是一种由 std_logic
元素构建的特定数组类型。其他示例包括 unsigned
、signed
以及您可能创建的任何其他用户定义类型。
当您将 std_logic
元素与 &
连接时,它们具有一种“通用”类型,可以在赋值时推断出来,或者可以显式标记类型,但可以不会被转换,因为它们还没有已知的类型!这就是为什么 '
的语法有效,而您原来的尝试却没有。
希望对您有所帮助。祝你好运!
关于vhdl - 将 std_logic 位连接成无符号数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927058/
假设你有一个循环 for i in 1 downto 0 loop for j in 1 downto 0 loop tS0 <= i; 但我需要将整数(这是自然的)转换为 s
我不断收到未声明 std_logic 的恼人错误。我不知道为什么会出现此错误,因为我已经包含了所有必需的库。这是我的代码和错误。 ------------------------------
我不断收到未声明 std_logic 的恼人错误。我不知道为什么会出现此错误,因为我已经包含了所有必需的库。这是我的代码和错误。 ------------------------------
我已将我的状态定义如下: type state_type is (s0, s1, s2, s3); signal state : state_type; 现在我想用这个状态信息来形成另一个信号 s
在下面的代码中,我试图连接三个 std_logic 输入以生成一个三位无符号输出。执行此操作所需的语法似乎不直观,我不明白。有人解释这是怎么回事吗? 当我在评论中说“失败”时,我的意思是综合会产生以下
总结的问题在底部。 我正在分析和研究现有的 VHDL 代码。在此代码中,端口 reset_i 被初始化为“X”,如下面的代码所示。 entity ADC_fsm is Port ( clk_i
我研究了 IEEE 如何定义其库。当我打开stdlogic library ,我看到了几个定义为常量的真值表。我不知道真值表是如何工作的。请解释如何使用真值表返回结果。这是我为“与”门找到的内容: T
我正在尝试检测我的选择器输入信号的变化。当我找到第一个发生变化的输入(上升沿或下降沿)时,我给出一个索引作为输出。当我尝试综合我的源代码时,出现错误“不受支持的时钟语句”。 A也尝试使用“rising
我正在使用 Xilinx ISE 并使用 CORE Generator & Architecture Wizard 生成了一个内存。 问题是它创建了一个写使能信号 ( wea ) 作为 STD_LOG
std_logic的目的是什么?枚举类型? 'U': uninitialized. This signal hasn't been set yet. 'X': unknown. Impossible
使用 numeric_std 和 vhdl93,我似乎无法弄清楚如何将 std_logic 信号添加到 std_logic_vector。 library ieee; use ieee.numeric
本质上,我的问题是:“这不能更容易吗?”;什么是'this',如下(代码也是): 我想有一种“补码”计数器功能,用 VHDL 实现,它基本上会在每一步中反转/补码/不是计数器值,为测试提供稍微丰富的位
我有 douta : in std_logic_vector (3 downto 0); doutb : in std_logic_vector (3 downto 0); c0
我是一名优秀的程序员,十分优秀!