【发布时间】:2021-04-12 19:02:31
【问题描述】:
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity converter is
port(sign_mag : in std_logic_vector(3 downto 0);
twos_com : out std_logic_vector(3 downto 0));
end;
architecture converter_arch of converter is
begin
if to_integer(signed(sign_mag)) > 0 then
twos_com <= sign_mag;
else
twos_com<= "0000";
end if;
end converter_arch;
我收到错误非法并发语句。无法找出比较向量的 msb 的方法。我也尝试过类似的东西(如果 sign_mag(3) = 0),但我也得到了同样的错误信息。
【问题讨论】:
-
If 语句是顺序语句,可以出现在流程语句或子程序(过程、函数)中。两个简单的修复。将 if 语句放在流程语句中或使用并发条件赋值语句(例如
twos_com <= sign_mag when to_integer(signed(sign_mag)) > 0 else "0000";),这将被详细说明为带有 if 语句的等效流程。条件signed(sign_mag) > 0应该足够了,无需使用包 numeric_std 转换为整数。此处不要使用 Synopsys 包 ieee.std_logic_unsigned 中的任何声明。
标签: vhdl