我正在尝试在Quartus上编写一个程序来合成74hc138解码器
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
use ieee.STD_LOGIC_ARITH.ALL;
use ieee.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_SIGNED;
ENTITY demux IS
PORT (
a: IN INTEGER RANGE 0 TO 4; --bus 3 bits
e: IN BIT_VECTOR (2 DOWNTO 0 ); --bus de 3 bits
y: OUT BIT_VECTOR(7 DOWNTO 0);
v: IN BIT_VECTOR(2 DOWNTO 0)
);
END demux;
ARCHITECTURE Archi of demux IS
BEGIN
PROCESS (a)
BEGIN
if v /= '001' THEN y <= '11111111 ; THE PROBLEM IS HERE
ELSE
CASE a is
when 0 => y <= y(0);
when 1 => y <= y(1);
when 2 => y <= y(2);
when 3 => y <= y(3);
when 4 => y <= y(4);
when 5 => y <= y(5);
when 6 => y <= y(6);
when 7 => y <= y(7);
END CASE;
END IF;
END PROCESS;
END Archi; -->
错误(10500):demux.vhd(20)附近文本“'”的VHDL语法错误;期待“(”,或标识符,或一元运算符
我希望仅在v
上的条件为真时才输出输出!
答案 0 :(得分:1)
此
if v /= '001' THEN y <= '11111111 ;
应该是这个
if v /= "001" THEN y <= "11111111";
(i)bit_vector
的文字是一个字符串。 VHDL中的字符串需要双引号。
(ii)你错过了第二个字面中的任何引用。
此外:
(a)您为什么使用bit_vector
?您已包含std_logic_1164
包,但之后请勿使用它。你应该使用std_logic
(等)来获得可合成的代码(所以你需要std_logic_1164
包)。
(b)不包括您不使用的包裹:即
use ieee.STD_LOGIC_ARITH.ALL;
use ieee.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_SIGNED;
(c)不要将上述包用于新代码,请使用ieee.NUMERIC_STD.all
。