Разрешено ли мое предложение VHDL? - PullRequest
2 голосов
/ 07 февраля 2011
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_1164_unsigned.all;

ENTITY alu IS
    PORT (a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
          b: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
          operation: IN INTEGER (1 TO 10);
          result: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
    );

ARCHITECTURE arch-alu OF alu IS
    SIGNAL arith, logic: STD_LOGIC_VECTOR (15 DOWNTO 0);
    BEGIN
----rest of the code which give values to arith and logic----
    WITH operation SELECT
        result <= arith WHEN (1 TO 5),
                  logic WHEN (6 TO 10);
END arch-alu

Мой запрос таков: могу ли я поставить диапазон после WHEN (как в коде), или я должен указать по одному для каждой возможности сигнала.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2011

В соответствии с http://tams -www.informatik.uni-hamburg.de / vhdl / tools / grammar / vhdl93-bnf.html используемый вами синтаксис разрешен VHDL '93 ( продукты, которые нужно посмотреть там, в следующем порядке: selected_signal_assignment, selected_waveforms, choices, choice, discrete_range, range), за исключением того, что грамматика там, кажется, не допускает скобки вокруг диапазонов. См. Также http://www.vhdl.renerta.com/source/vhd00063.htm (у которого опять нет паренов вокруг диапазонов).

3 голосов
/ 07 февраля 2011

Вы можете использовать диапазоны в выборе, но вы должны опустить скобки.

Не то чтобы ваш фрагмент кода содержал намного больше ошибок, чем просто лишние скобки. У вас отсутствовала end entity, лишняя точка с запятой в конце объявления порта и неправильное объявление целочисленного порта, ... Хорошая IDE VHDL, такая как Sigasi HDT , поможет вам немедленно их перехватить , enter image description here Исправленный фрагмент:

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY alu IS
    PORT (a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
          b: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
          operation: IN INTEGER range 1 TO 10;
          result: OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
    );
end entity;

ARCHITECTURE arch_alu OF alu IS
    SIGNAL arith, logic: STD_LOGIC_VECTOR (15 DOWNTO 0);
    BEGIN
--rest of the code which give values to arith and logic----
    WITH operation SELECT
        result <= arith WHEN 1 TO 5,
                  logic WHEN 6 TO 10;
END arch_alu;
...