Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОСЫ 124-184.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.8 Mб
Скачать
  1. Vhdl- мова опису та проектування цс. Основні можливості і засоби мови.

Первой удачной попыткой обобщить накопленный опыт и "навести порядок" в данном вопросе было решение международной конференции по ЯОА о создании "языка согласия" CONLAN. Эта работа началась в 1976 г. и была успешно завершена созданием основ для нового поколения ЯОА с полным семантическим определением. Одной из важнейших проблем, которую необходимо было решить, учитывая новые технологии проектирования, было обеспечение комплексного решения вопросов стандартизации, в том числе выработка стандартов на лингвистические средства спецификаций моделей проектов, протоколы и форматы обмена данными. Достигнутые успехи в этом направлении дали возможность Министерству обороны США в 1983 г. организовать работы по созданию (на базе языка программирования АДА) нового специализированного языка для разработки проектов цифровой аппаратуры на базе сверхбольших высокоскоростных интегральных схем. Так появился язык VHDL (Very high speed integrated circuits Hardware Description Language).

Разработка VHDL, завершенная, в основном, в 1987 г., оказалась настолько успешной, что этот язык был принят в качестве стандарта ANSI/IEEE Std 1076-1987 (его часто называют VHDL'87). Затем язык продолжал совершенствоваться, и в 1993 г. появился новый стандарт ANSI/IEEE Std 1076-1993 (стандарт VHDL'93). Наконец, в 1999 утвержден стандарт ANSI/IEEE Std 1076.1-1999 (VHDL-AMS), который включает расширения, дающие возможность описания моделей аналоговых и смешанных (цифро-аналоговых) схем.

С утверждением стандарта на VHDL любая серьезная разработка ЦС и электронной аппаратуры должна сопровождаться описанием на языке VHDL, т. е. VHDL-описа­ние в настоящее время является неотъемлемой частью документации и для разработчиков, и для заказачика. Практически все современные САПР EDA (Electronic Design Automation) используют VHDL в качестве входного языка и способа представления и описания схем и структур ЦС.

В языке VHDL определены многие типы данных, операторов и других синтаксических конструкций, обеспечивающих возможность описания цифровых систем на различных уровнях абстракции и поддержание методологии нисходящего проектирования. По многим аспектам VHDL подобен языкам программирования высокого уровня, в частности, он весьма требователен к корректности определения и применения грамматических выражений. Это позволяет разработчику выявлять возможные ошибки уже на ранних стадиях описания и проектирования ЦС.

  1. Засоби опису архітектури цс в мові vhdl. Синтезуєма підмножина мови vhdl.

В языке VHDL определены многие типы данных, операторов и других синтаксических конструкций, обеспечивающих возможность описания цифровых систем на различных уровнях абстракции и поддержание методологии нисходящего проектирования. По многим аспектам VHDL подобен языкам программирования высокого уровня, в частности, он весьма требователен к корректности определения и применения грамматических выражений. Это позволяет разработчику выявлять возможные ошибки уже на ранних стадиях описания и проектирования ЦС.

Одной из главных целей построения VHDL-модели цифрового устройства является возможность его моделирования с помощью такой модели. Процедура моделирования, в общем случае, состоит из ряда этапов: анализа (analysis), последующих этапов разработки и детализации в соответствии с принципами нисходящего проектирования (elaboration) и выполнения (execution). Первые два этапа также необходимы для возможного дальнейшего логического синтеза ЦУ.

На первом этапе VHDL-описание анализируется с целью выявления возможных синтаксических и семантических ошибок, как это обычно делается при использовании языков программирования.

Второй этап при моделировании (и проектировании вообще) состоит в выполнении действий, связанных с реализацией процедур нисходящего проектирования и созданием всех объектов низших уровней (подсистем, блоков и т. д.), определенных в декларациях. Результатом этого этапа является набор конкретных компонент и подкомпонент, вариантов архитектур, множеств сигналов и процессов, относящихся к соответствующим архитектурным телам, и т.д. В конечном итоге, все компоненты должны быть описаны только на поведенческом уровне, содержать только процессы и допускать возможность моделирования.

Третий этап моделирования состоит в выполнении операторов, образующих модель. Время при этом представляется дискретными шагами, зависящими от наступления события, под которым понимается изменение значения сигнала. Такая процедура обычно называется дискретным событийным моделированием. В процессе моделирования выполнение процесса инициируется изменением значения сигнала, к которому он чувствителен (sensitive). После выполнения некоторой операции процесс приостанавливается и может воспринимать новые значения сигналов при дальнейшем моделировании. Эта процедура часто называется активизацией операции (scheduling a transactions) по отношению к некоторому сигналу. Если новое значение сигнала отличается от предыдущего, то говорят, что произошло событие, и выполнение процессов, чувствительных к этому сигналу, возобновляется.

Моделирование начинается с фазы инициализации, в течение которой каждому сигналу присваивается начальное значение, зависящее от его типа. Отметим, что если некоторый сигнал х при декларации не имеет определенного начального значения, то по умолчанию он принимает значение левой границы декларируемого типа х’left. Например,

signal х1 : integer range 0 to 3; -- при инициализации значение 0;

signal x2 : std_logic; -- при инициализации значение U;

Затем выполняются операции цикла моделирования. Начальное время моделирования принимается равным нулю, далее каждый процесс активизируется, и выпол­няются его после­дователь­ные операторы. Обычно процесс включает операторы назначения сигнала (signal assignment state­ment), которые активи­зируют опе­­­рации над сигналами в дальнейшем процессе моделирования. Выполнение процесса про­­дол­жается пока не будет достигнут оператор wait, который приоста­навливает дальнейшее выполнение.

При реализации мо­де­­ли­рования возмож­ны два подхода, которые раз­ли­­чаю­тся способом описа­ния вре­менных за­дер­жек в логи­ческих эле­­мен­тах и вре­­мени рас­прост­ра­нения сиг­нала. Проил­люст­ри­ру­ем это на простом при­ме­ре.

Пример 3.8.

Рассмотрим двух­уров­­невую логическую схе­­му (рис. 3.3,а) и ва­рианты ее VHDL-описания.

Вариант1.

entity sch1 is

port (x1, x2, x3 : in bit;

y : out bit);

architecture example1 of sch1 is

signal s : bit;

begin

p0: process (x1, x2) is

begin

s <= x1 and x2 after 10 ns;

end process p0;

p1: process (s, x3) is

begin

y <= s or x3 after 20 ns;

end process p1;

end architecture example1;

Во время инициализации каждый сигнал из множества {x1, x2, x3) имеет значение 0. Процесс р0 вычислит значение сигнала s через 10 ns и приостановится (см. временные диаграммы на рис. 3.3, б). Затем процесс р1, который выполняется 20 ns, вычислит значение у. Цикл моделирования начинается, когда один из сигналов изменится; таким образом, выходной сигнал у примет новое значение через 30 ns с начала моделирования (его выполнение начнется после изменения сигнала s). При t = 50 ns изменяется сигнал x2, что приведет к акти­ви­за­ции процесса р0, следовательно, сигнал s через 10 ns приобретет новое значение и т.д.

Вариант 2.

Изменим архитектуру для рассмотренной схемы, удалив ключевые слова after и конкретные временные задержки. Тем самым мы предполагаем, что логические операции, используемые в модели, будут выполняться “мгновенно”, т.е. соответствующие выходные сиг­­налы будут изменяться в те же моменты времени, что и вызвавшие эти операции входные сигналы (рис. 3.3, в).

entity sch1 is

port (x1, x2, x3 : in bit;

y : out bit);

architecture example2 of sch1 is

signal s : bit;

begin

p0: process (x1, x2) is

begin

s <= x1 and x2;

end process p0;

p1: process (s, x3) is

begin

y <= s or x3;

end process p1;

end architecture example2;

Однако взаимодействие процессов р0 и р1, по существу, не из­ме­нилось. По-прежнему, сигнал s изменится только после из­ме­не­ния сигнала x2, а изменение s послужит причиной для запус­ка процесса р1, который активизируется, выполняется, уста­нав­ливая новое зна­че­ние y, и приостанавливается. Чтобы учесть это обстоятельство, в VHDL вводится понятие дельта-задержки (delta delay) или просто дельта. Под этим понимается формально бесконечно малая величина времени (временной шаг дельта), часто принимаемая равной нулю. Дельта-задержка фактически означает, что сигнал не распространяется мгновенно (рис. 3.3, в), но происходит переход к следующему циклу моделирования.

Временной шаг величиной дельта образуется, например, при вы­полнении операторов назначения сигналов, не имеющих фразы after…t ns. С точки зрения логической схемы дельта – это задержка на одном уровне логических элементов, когда при VHDL-описании конкретная задержка элементов не задана явно.

Таким образом, важно подчеркнуть, что значение сигнала при выполнении оператора “<=” не изменяется немедленно. Точнее сказать, что этот оператор “планирует” соответствующую операцию над сигналом (schedule a transaction), которая реализуется после про­дол­жения процесса моделирования (т.е. после изменения вход­ного сигнала). Например, если некоторый процесс содержит фрагмент кода

s <= ‘1’;

…….

if s = ’1’ then …,

то нельзя считать, что процесс выполнит оператор if в пред­поло­же­нии, что сигнал s имеет значение ‘1’. В течение данного процесса s сохранит предыдущее значение, которое изменится лишь в следующем цикле моделирования.

На следующем примере проиллюстрируем некоторые описанные понятия.

Пример 3.9. [6]

Рассмотрим упрощенную функциональную VHDL-модель компьютерной системы (только архитектуру). Система состоит из центрального процессорного устройства (CPU) и памяти, которые связаны адресными сигналами и сигналами данных. Операции, выполняемые в системе, синхронизируются управляющими сигналами mem_read и mem_write и статусным сигналом mem_ready.

architecture abstract of computer_system is

subtype word is bit_vector(31 downto 0);

signal address : natural;

signal read_data, write_data :word;

signal mem_read, mem_write :bit := ‘0’;

signal mem_ready : bit := ‘0’;

begin

cpu: process is

variable instr_reg :word;

variable PC : natural;

. . . -- другие декларации

begin

loop

address <= PC;

mem_read <= ‘1’;

wait until mem_ready =’1’;

instr_reg := read_data;

mem_read <=’0’;

. . . -- выполнение команд

wait until mem_ready = ‘0’;

end loop;

end process cpu;

memory: process is

type memory_array is array (0 to 2**14 –1) of word;

variable srore: memory_array :=

( . . . ) ;

begin

wait until mem_read = ‘1’ or mem_write = ‘1’;

if mem_read = ‘1’ then

read_data <= store(address/4);

mem_ready = ‘1’;

wait until mem_read = ‘0’;

mem_ready <= ‘0’;

else

. . . -- выполнение процесса записи

end if;

end process memory;

end architecture abstract;

Как видно из приведенного VHDL-описания, задержки в явном виде в операторах присваивания значений сигналам отсутствуют, так что синхронизация всех событий происходит через дельта-задержки, как показано наКогда инициируется моделирование, начинают выполняться опе­раторы процесса cpu, а процесс memory временно приостановлен. Опе­раторы процесса cpu “планируют” операции (schedule transactions) присвоения следующих адресных инструкций сигналу address и значения ‘1’ сигналу mem_read, после чего процесс cpu при­ос­та­нав­ли­вается. В следующем цикле моделирования эти сигналы корректируются (т.е. приобретают заданное значение), и возо­бнов­ля­ет­ся процесс memory, так как он “ожидал” изменения сигнала mem_read (wait until mem_read = ‘1’).

Процесс memory активизирует операцию присваивания данных сигналу read_data, значения ‘1’ сигналу mem_ready и затем приостанавливается. В третьем цикле эти сигналы корректируются, и возобно­вляется выполнение процесса cpu, который инициирует прис­вое­ние значения ‘0’ сигналу mem_read и приостанавливается. Далее, в чет­­­вертом цикле корректируется значение сигнала mem_read, и возо­б­нов­ляется процесс memory, который инициирует присвоение ‘0’ сиг­на­лу mem_ready, чтобы завершить организацию взаимодействия про­цес­сов cpu и memory при реализации операции чтения. Наконец, в пятом цикле сигнал mem_ready корректируется, возобновляется процесс cpu, который реализует полученные инструкции.

На рис. 3.4. приведены временные диаграммы, иллюстрирующие взаимодействие процессов cpu и memory при моделировании операции чтения данных. Синхронизация обеспечивается при помощи последовательных циклов моделирования с использованием дельта-задержек.

Поведенческие VHDL-модели с использованием дельта-задержки обычно используются при моделировании на этапе алгоритмического проектирования ЦУ, когда еще отсутствуют конкретные схемы, реализующие моделируемые алгоритмы. Отметим также, что в соответствующих VHDL-моделях часто целесообразно использовать в блоках процессов (process) операторы присваивания значений переменным, а последний оператор блока реализовать как оператор назначения сигнала, вычисляющий выходной сигнал блока. Другой подход заключается в сквозном использовании операторов назначения сигналов. Этот метод часто называют реализацией модели на уровне потоков данных (data flow), он ориентирован на схемную реализацию и более целесообразен на этапе логического проектирования.