我正在尝试编写VHDL模块但是if语句有问题。很可能这是一个愚蠢的错误,但由于我是VHDL的新手,我无法弄清楚问题。这是我的代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity binary_add is
port( n1 : in std_logic_vector(3 downto 0);
n2 : in std_logic_vector(3 downto 0);
segments : out std_logic_vector(7 downto 0);
bool : out bit;
o : out std_logic_vector(3 downto 0);
DNout : out std_logic_vector(3 downto 0));
end binary_add;
architecture Behavioral of binary_add is
begin
process(n1, n2)
begin
o <= n1 + n2;
if( o = '1010') then
bool <= '1';
else
bool <= '0';
end if;
end process;
end Behavioral;
我从if语句的第一行得到以下答案:
ERROR:HDLParsers:## - "C:/Xilinx/12.3/ISE_DS/ISE/.../binary_add.vhd" Line ##. parse error, unexpected TICK
我做错了什么?
答案 0 :(得分:2)
'1010'应为“1010”(双引号)。单引号用于字符文字(单个字符)。
答案 1 :(得分:2)
所以你已根据Mark的答案修正了第一个错误。
第二个错误是您无法使用输出值。
if output = "0101"; -- illegal
some_signal <= output; -- illegal
要解决此问题,您需要创建一个内部信号(比如总和)。然后使用内部信号,并将其分配给外部信号。
architecture Behavioral of binary_add is
signal sum : std_logic_vector(3 downto 0);
begin
process(n1, n2, sum)
begin
sum <= n1 + n2;
if( sum = '1010') then
bool <= '1';
else
bool <= '0';
end if;
end process;
o <= sum;
end Behavioral;