Разница между блоком и оператором процесса в VHDL - PullRequest
0 голосов
/ 05 июля 2018

Недавно я столкнулся с вопросом, касающимся блоков и структур процессов VHDL, и не нашел объяснений в учебниках или на интернет-форумах.
Есть ли какая-либо разница между блоком и оператором процесса в кодах ниже?

library IEEE;
use IEEE.std_logic_1164.all;

entity example is
    port ( a, b, clock : in  std_logic;
           c           : out std_logic);
end entity;

architecture rtl of example is

begin
    test_block : block (clock'event and clock = '1')
    begin
        c <= guarded a and b;
    end block test;
end rtl;

и

library IEEE;
use IEEE.std_logic_1164.all;

entity example is
    port ( a, b, clock : in  std_logic;
           c           : out std_logic);
end entity;

architecture rtl of example is

begin

    test_proc : process (clock)
    begin
        if (clock'event and clock = '1') then
            c <= a and b;
        end if;
    end process test_proc;

end rtl;

1 Ответ

0 голосов
/ 06 июля 2018

Основное отличие заключается в ключевом слове guarded. Если вы напишите свой код без него, вся логика будет обычной комбинационной . Итак, я думаю, что если вы хотите написать в основном параллельный код с некоторой последовательной логикой, вы можете осторожно использовать оператор block, а когда необходимо последовательно использовать guarded. Я спросил своих коллег, которые имеют большой опыт в разработке ПЛИС, и они сказали, что block это своего рода анахронизм, его почти никто не использует, но он все еще в стандарте, чтобы дать некоторый выбор для дизайнеров.

...