VHDL错误:TwosCompliment.vhd(16):near" process&#34 ;: expecting" BEGIN"

时间:2018-02-21 19:33:43

标签: vhdl

我一直试图为一个类写一个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;。

2 个答案:

答案 0 :(得分:0)

虽然您的实现不正确,但主要问题是关于VHDL的语法。

VHDL在IEEE标准中描述:IEEE std 1076-2008。除非您有IEEE连接,否则您必须付费才能阅读此标准。幸运的是,在线有许多VHDL资源,例如:

编辑:请注意,并非所有这些指南都与最新版本的标准保持同步!!

基本上,VHDL entityarchitectureblockprocessgenerate等声明都有声明部分和声明部分。语句部分应始终以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。:我认为你没有提出问题就被其他读者所诱惑。