If statement VHDL If/Else语句

If statement VHDL If/Else语句,if-statement,vhdl,If Statement,Vhdl,我正在为一个学校项目的实验室工作。我们应该最终制作一个程序,向altera板显示有符号整数值。这是前进的一步,我被卡住了。我不明白为什么这个if/else语句不能编译,我是VHDL新手,请帮助 ----------------------------------------------------------------- -- circuit for converting a 4-bit signed integer -- to a 1-bit sign and a 4-bit absolut

我正在为一个学校项目的实验室工作。我们应该最终制作一个程序,向altera板显示有符号整数值。这是前进的一步,我被卡住了。我不明白为什么这个if/else语句不能编译,我是VHDL新手,请帮助

-----------------------------------------------------------------
-- circuit for converting a 4-bit signed integer
-- to a 1-bit sign and a 4-bit absolute value
-----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity sgnabs4 is
   port (X    : in std_logic_vector(3 downto 0);
       sgn  : out std_logic;
       Xabs : out std_logic_vector(3 downto 0));
end sgnabs4;

architecture sgnabs4_arch of sgnabs4 is

    component twos_complement4 is
        port (A : in std_logic_vector(3 downto 0);
            T : out std_logic_vector(3 downto 0));
    end component twos_complement4;

      -- you may define internal signals here as you feel necessary
        signal That: std_logic_vector(3 downto 0);
        signal Ahat: std_logic_vector(3 downto 0);

begin


    twos_complement4_0: twos_complement4
        port map(T => That, A=> Ahat);

  sgn <= That(3);


  if (sgn = '1') then
    sgn => Xabs(3);
    Xabs(2) <= not X(2);
    Xabs(1) <= not X(1); 
    Xabs(0) <= not X(0);


  else

    Xabs(3) <= '0';
    Xabs(2) <= X(2);
    Xabs(1) <= X(1); 
    Xabs(0) <= X(0);

  end if;

end sgnabs4_arch; 
-----------------------------------------------------------------
--用于转换4位有符号整数的电路
--到1位符号和4位绝对值
-----------------------------------------------------------------
图书馆ieee;
使用ieee.std_logic_1164.all;
实体sgnabs4是
端口(X:std_逻辑_向量中(3到0);
输出标准逻辑;
Xabs:out标准逻辑向量(3到0);
结束sgnabs4;
sgnabs4的架构是
组件2 S_4是
端口(A:标准逻辑向量(3到0);
T:输出标准逻辑向量(3到0);
端部元件2 S_4;
--您可以根据需要在此处定义内部信号
信号为:标准逻辑向量(3到0);
信号Ahat:标准逻辑向量(3到0);
开始
twos_互补4_0:twos_互补4
端口映射(T=>That,A=>Ahat);
sgn-Xabs(3);

Xabs(2)如果您只需要快速解决方案,您可以采取以下措施:

-----------------------------------------------------------------
-- circuit for converting a 4-bit signed integer
-- to a 1-bit sign and a 4-bit absolute value
-----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity sgnabs4 is
   port (X    : in std_logic_vector(3 downto 0);
       sgn  : out std_logic;
       Xabs : out std_logic_vector(3 downto 0));
end sgnabs4;

architecture sgnabs4_arch of sgnabs4 is   

begin

process(X) 

variable tmp    : signed(3 downto 0);

begin

    tmp := signed(X);

    if tmp < 0 then
        sgn     <= '1';
        tmp     := -tmp;
        Xabs    <= std_logic_vector(tmp);
    else
        sgn     <= '0';
        Xabs    <= std_logic_vector(tmp);
    end if;

end process;

end sgnabs4_arch; 
-----------------------------------------------------------------
--用于转换4位有符号整数的电路
--到1位符号和4位绝对值
-----------------------------------------------------------------
图书馆ieee;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体sgnabs4是
端口(X:std_逻辑_向量中(3到0);
输出标准逻辑;
Xabs:out标准逻辑向量(3到0);
结束sgnabs4;
sgnabs4的架构是
开始
过程(X)
变量tmp:有符号(3到0);
开始
tmp:=有符号(X);
如果tmp<0,则

sgn如果您需要快速解决方案,您可以采取以下措施:

-----------------------------------------------------------------
-- circuit for converting a 4-bit signed integer
-- to a 1-bit sign and a 4-bit absolute value
-----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity sgnabs4 is
   port (X    : in std_logic_vector(3 downto 0);
       sgn  : out std_logic;
       Xabs : out std_logic_vector(3 downto 0));
end sgnabs4;

architecture sgnabs4_arch of sgnabs4 is   

begin

process(X) 

variable tmp    : signed(3 downto 0);

begin

    tmp := signed(X);

    if tmp < 0 then
        sgn     <= '1';
        tmp     := -tmp;
        Xabs    <= std_logic_vector(tmp);
    else
        sgn     <= '0';
        Xabs    <= std_logic_vector(tmp);
    end if;

end process;

end sgnabs4_arch; 
-----------------------------------------------------------------
--用于转换4位有符号整数的电路
--到1位符号和4位绝对值
-----------------------------------------------------------------
图书馆ieee;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体sgnabs4是
端口(X:std_逻辑_向量中(3到0);
输出标准逻辑;
Xabs:out标准逻辑向量(3到0);
结束sgnabs4;
sgnabs4的架构是
开始
过程(X)
变量tmp:有符号(3到0);
开始
tmp:=有符号(X);
如果tmp<0,则

sgn如果您需要快速解决方案,您可以采取以下措施:

-----------------------------------------------------------------
-- circuit for converting a 4-bit signed integer
-- to a 1-bit sign and a 4-bit absolute value
-----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity sgnabs4 is
   port (X    : in std_logic_vector(3 downto 0);
       sgn  : out std_logic;
       Xabs : out std_logic_vector(3 downto 0));
end sgnabs4;

architecture sgnabs4_arch of sgnabs4 is   

begin

process(X) 

variable tmp    : signed(3 downto 0);

begin

    tmp := signed(X);

    if tmp < 0 then
        sgn     <= '1';
        tmp     := -tmp;
        Xabs    <= std_logic_vector(tmp);
    else
        sgn     <= '0';
        Xabs    <= std_logic_vector(tmp);
    end if;

end process;

end sgnabs4_arch; 
-----------------------------------------------------------------
--用于转换4位有符号整数的电路
--到1位符号和4位绝对值
-----------------------------------------------------------------
图书馆ieee;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体sgnabs4是
端口(X:std_逻辑_向量中(3到0);
输出标准逻辑;
Xabs:out标准逻辑向量(3到0);
结束sgnabs4;
sgnabs4的架构是
开始
过程(X)
变量tmp:有符号(3到0);
开始
tmp:=有符号(X);
如果tmp<0,则

sgn如果您需要快速解决方案,您可以采取以下措施:

-----------------------------------------------------------------
-- circuit for converting a 4-bit signed integer
-- to a 1-bit sign and a 4-bit absolute value
-----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity sgnabs4 is
   port (X    : in std_logic_vector(3 downto 0);
       sgn  : out std_logic;
       Xabs : out std_logic_vector(3 downto 0));
end sgnabs4;

architecture sgnabs4_arch of sgnabs4 is   

begin

process(X) 

variable tmp    : signed(3 downto 0);

begin

    tmp := signed(X);

    if tmp < 0 then
        sgn     <= '1';
        tmp     := -tmp;
        Xabs    <= std_logic_vector(tmp);
    else
        sgn     <= '0';
        Xabs    <= std_logic_vector(tmp);
    end if;

end process;

end sgnabs4_arch; 
-----------------------------------------------------------------
--用于转换4位有符号整数的电路
--到1位符号和4位绝对值
-----------------------------------------------------------------
图书馆ieee;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体sgnabs4是
端口(X:std_逻辑_向量中(3到0);
输出标准逻辑;
Xabs:out标准逻辑向量(3到0);
结束sgnabs4;
sgnabs4的架构是
开始
过程(X)
变量tmp:有符号(3到0);
开始
tmp:=有符号(X);
如果tmp<0,则

安迪的答案可能是正确的,但它根本不能解释你的答案有什么问题。因此:

正如sebs在评论中指出的,您的
if
语句需要处于一个过程中<代码>如果
语句是连续的;体系结构主体中的进程外部只允许并发语句

虽然sebs指出的两个修复程序可能允许您的代码进行编译(取决于您如何处理我稍后将谈到的另一位代码),但它仍然无法工作

  • 您的组件实例
    twos\u complement4\u 0
    已将
    Ahat
    映射到其输入端口,并将
    映射到其输出端口,但您没有在代码中的任何位置为
    Ahat
    赋值,那么
    将是什么?可能没有什么有用的东西。如果您复制并粘贴了它,您需要了解它的功能,以便能够适当地修改它。请查找教程,特别是关于组件实例化和端口映射的教程

  • 你是不是想留下这句话?安迪的回答可能是正确的,但它根本无法解释你的问题所在。因此:

    正如sebs在评论中指出的,您的
    if
    语句需要处于一个过程中<代码>如果
语句是连续的;体系结构主体中的进程外部只允许并发语句

虽然sebs指出的两个修复程序可能允许您的代码进行编译(取决于您如何处理我稍后将谈到的另一位代码),但它仍然无法工作

  • 您的组件实例
    twos\u complement4\u 0
    已将
    Ahat
    映射到其输入端口,并将
    映射到其输出端口,但您没有在代码中的任何位置为
    Ahat
    赋值,那么
    将是什么?可能没有什么有用的东西。如果您复制并粘贴了它,您需要了解它的功能,以便能够适当地修改它。请查找教程,特别是关于组件实例化和端口映射的教程