VHDL编程,哪里出错?

时间:2017-12-07 10:37:35

标签: vhdl decode

我正在尝试在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上的条件为真时才输出输出!

1 个答案:

答案 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