我一直试图为一个类写一个2的补码转换器,但我一直遇到上面提到的错误。我是新手使用条件语句所以很可能是一个新手错误。这是我到目前为止所写的:
library IEEE;
use IEEE.std_logic_1164.all;
entity converter is
Port (
sign_mag : in std_logic_vector(3 downto 0) ;
output : out std_logic_vector(3 downto 0)
);
end converter;
architecture arch of converter is
signal tmp_out : std_logic_vector(3 downto 0);
signal not_mag : std_logic_vector(3 downto 0);
process(sign_mag) is
begin
if sign_mag(3) = '0' then tmp_out <= sign_mag;
else
not_mag(3) <= sign_mag(3);
not_mag(2) <= not sign_mag(2);
not_mag(1) <= not sign_mag(1);
not_mag(0) <= not sign_mag(0);
tmp_out <= not_mag + 0001;
end if;
end process;
--output <= not tmp_out;
output <= tmp_out;
end arch;
它应该做的就是检查最重要的位是否是&#39; 1&#39;或&#39; 0&#39;。如果&#39; 0&#39;,输出将等于输入。如果&#39; 1&#39;,输出将等于符号位和幅度位的倒数,再加上&#34; 0001&#34;。
答案 0 :(得分:0)
虽然您的实现不正确,但主要问题是关于VHDL的语法。
VHDL在IEEE标准中描述:IEEE std 1076-2008。除非您有IEEE连接,否则您必须付费才能阅读此标准。幸运的是,在线有许多VHDL资源,例如:
编辑:请注意,并非所有这些指南都与最新版本的标准保持同步!!
基本上,VHDL entity
,architecture
,block
,process
,generate
等声明都有声明部分和声明部分。语句部分应始终以begin
关键字开头(如果没有声明部分,则甚至)。 E.g。
architecture behavior of test_bench is
-- declarative part, e.g.
signal foo : bit;
begin
-- statement part, e.g.
foo <= '0';
end architecture;
答案 1 :(得分:0)
未解决的问题的答案是,由于在体系结构声明区域之后缺少begin
关键字,因此会出现语法错误。
architecture arch of converter is
signal tmp_out : std_logic_vector(3 downto 0);
signal not_mag : std_logic_vector(3 downto 0);
begin -------<<<<< You are missing this
process(sign_mag) is
begin
.
.
.
P.S。:我认为你没有提出问题就被其他读者所诱惑。