Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dsd1-10 / dsd-07=Verilog / vhdl+verilog.DOC
Скачиваний:
118
Добавлен:
05.06.2015
Размер:
405.5 Кб
Скачать

Глава 6. Примеры проектирования цифровых устройств с использованием языков описания аппаратуры vhdLиVerilog.

6.1. Общие сведения

Языки описания аппаратуры VHDL и Verilog HDL представляют собой языки высокого уровня (в отличие от AHDL и ABEL HDL) и предназначены для описания цифровых схем и их элементов в первую очередь на поведенческом уровне.

Эти языки поддерживают различные уровни абстракции проекта, включая поддержку особенностей архитектуры ПЛИС, под которую выполняется проект (architecture-specific design). Использование языков описания аппаратуры высокого уровня позволяет проектировать цифровые системы, обладающие высокой мобильностью, то есть возможностью переносимости на другую элементную базу. Для создания законченного проекта необходимо только лишь произвести компиляцию в соответствующей системе в элементную базу выбранного производителя. Но в этом и основной недостаток языков высокого уровня – недостаточный учет специфических архитектурных особенностей используемой элементной базы (specific target technology). В этом разделе мы попытаемся рассмотреть некоторые примеры использования языков описания аппаратуры для создания проектов различного уровня сложности.

При проведении синтеза логической структуры ПЛИС с использованием языков описания аппаратуры (HDL synthesis-based design flow) различают четыре основных стадии проектирования:

  • Создание и функциональная верификация проекта;

  • Реализация проекта в САПР ПЛИС;

  • Программирование ПЛИС

  • Верификация всей системы

При функциональной верификации проекта ввод описания проекта осуществляется на регистровом уровне (RTL-level) в поведенческой области (behavioral). После ввода описания проекта поведенческое (функциональное) моделирование (верификация) позволяют оценить степень правильности функционирования алгоритма. После проведения функционального моделирования, описание синтезируется в список цепей на вентильном уровне (gate-level) в структурной области (structural). После осуществленимя синтеза можно выполнеть структурное (временное и функциональное) моделирование устройства. В результате мы получаем список цепей (как правило, в формате EDIF) для временной верификации проекта.

Рассмотрим применение языков описания аппаратуры высокого уровня (VHDL и Verilog HDL) для описания различных цифровых устройств. Данные описания, если не указывается особо, не ориентированы на какую-либо конкретную систему проектирования или семейство ПЛИС и могут быть воплощены в различных базисах. Такой тип описаний получил название независимого от технологии стиля описания устройств (Technology Independent Coding Styles). Начнем рассмотрение способов описания независимых от технологии устройств с последовательностных устройств (Sequential Devices). В англоязычной литературе приняты термины защелка (latch) для устройств, тактируемых уровнем, и триггер (flip-flop) для устройств, тактируемым фронтом тактового импульса.

6.2. Триггеры и регистры (Flip-Flops, Registers)

Для описания триггерных схем в VHDL используются операторы wait и if вместе с процессом, использующим аттрибуты переднего или заднего фронтов синхроимпульса (см. Главу 4).

Ниже приведены примеры создания описаний срабатывания по фронту:

(clk'event and clk='1') –аттрибут срабатывания по переднему фронту

(clk'event and clk='0') -- аттрибут срабатывания по заднему фронту

rising_edge(clock) –вызов функции по переднему фронту

falling_edge(clock) -- вызов функции по заднему фронту

В этих примерах иллюстрируется применение аттрибута переднего фронта (rising edge 'event attribute). Использование аттрибутов следует рекомендовать в тех случаях, когда система проектирования не поддерживает вызов функции по событию. Однако , использование функций позволяет избежать коллизий, связанных с переходом из неопределенного состояния, поскольку функция определяет только переходы уровней (из 0 в 1 или из 1 в 0), не не переход из неопределенного состояния в 1 или 0. Это становиться достаточно важным в случае использования многозначных типов данных, например std_logic, который имеет 9 возможных значений(U, X, 0, 1, Z, W, L, H, -). Далее рассмотрим основные типы триггеров.

Триггеры, тактируемые передним фронтом (Rising Edge Flip-Flop)

Ниже приводиться пример описания D триггера без цепей асинхронного сброса (reset) или предустановки (preset). На Рис. 1 приведено схемное обозначение рассматриваемого триггера.

Рис.6.1

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff is

port (data, clk : in std_logic;

q :out std_logic);

end dff;

architecture behav of dff is

begin

process (clk) begin

if (clk'event and clk = '1') then

q <= data;

end if;

end process;

end behav;

Описание на Verilog

module dff (data, clk, q);

input data, clk;

output q;

reg q;

always @(posedge clk)

q = data;

endmodule

Триггеры, тактируемые передним фронтом с асинхронным сбросом (Rising Edge Flip-Flop with Asynchronous Reset)

Обозначение устройства приведено на Рис.6.2

Рис.6.2.

Пример описания на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_async_rst is

port (data, clk, reset : in std_logic;

q :out std_logic);

end dff_async_rst;

architecture behav of dff_async_rst is

begin

process (clk, reset) begin

if (reset = '0') then

q <= '0';

elsif (clk'event and clk = '1') then

q <= data;

end if;

end process;

end behav;

Пример описания на Verilog

module dff_async_rst (data, clk, reset, q);

input data, clk, reset;

output q;

reg q;

always @(posedge clk or negedge reset)

if (~reset)

q = 1'b0;

else

q = data;

endmodule

Триггеры, тактируемые передним фронтом с асинхронной предустановкой (Rising Edge Filp-Flop with Asynchronous Preset)

Обозначение устройства на схеме приведено на Рис.6.3

Рис.6.3

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_async_pre is

port (data, clk, preset : in std_logic;

q :out std_logic);

end dff_async_pre;

architecture behav of dff_async_pre is

begin

process (clk, preset) begin

if (preset = '0') then

q <= '1';

elsif (clk'event and clk = '1') then

q <= data;

end if;

end process;

end behav;

Описание на Verilog

module dff_async_pre (data, clk, preset, q);

input data, clk, preset;

output q;

reg q;

always @(posedge clk or negedge preset)

if (~preset)

q = 1'b1;

else

q = data;

endmodule

Триггеры, тактируемые передним фронтом с асинхронным сбросом и предустановкой (Rising Edge Filp-Flop with Asynchronous Reset and Preset)

Обозначение на схеме приведено на Рис.6.4

Рис.6.4

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_async is

port (data, clk, reset, preset : in std_logic;

q :out std_logic);

end dff_async;

architecture behav of dff_async is

begin

process (clk, reset, preset) begin

if (reset = '0') then

q <= '0';

elsif (preset = '1') then

q <= '1';

elsif (clk'event and clk = '1') then

q <= data;

end if;

end process;

end behav;

Описание на Verilog

module dff_async (reset, preset, data, q, clk);

input clk;

input reset, preset, data;

output q;

reg q;

always @(posedge clk or negedge reset or posedge preset)

if (~reset)

q = 1'b0;

else if (preset)

q = 1'b1;

else q = data;

endmodule

Триггеры, тактируемые передним фронтом с синхронным сбросом (Rising Edge Filp-Flop with Synchronous Reset)

Обозначение на схеме приведено на Рис.6.5

Рис.6.5.

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_sync_rst is

port (data, clk, reset : in std_logic;

q :out std_logic);

end dff_sync_rst;

architecture behav of dff_sync_rst is

begin

process (clk) begin

if (clk'event and clk = '1') then

if (reset = '0') then

q <= '0';

else q <= data;

end if;

end if;

end process;

end behav;

Описание на Verilog

module dff_sync_rst (data, clk, reset, q);

input data, clk, reset;

output q;

reg q;

always @(posedge clk)

if (~reset)

q = 1'b0;

else q = data;

endmodule

Триггеры, тактируемые передним фронтом с синхронной предустановкой (Rising Edge Filp-Flop with Synchronous Preset)

Обозначение на схеме приведено на Рис.6.6

Рис.6.6

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_sync_pre is

port (data, clk, preset : in std_logic;

q :out std_logic);

end dff_sync_pre;

architecture behav of dff_sync_pre is

begin

process (clk) begin

if (clk'event and clk = '1') then

if (preset = '0') then

q <= '1';

else q <= data;

end if;

end if;

end process;

end behav;

Описание на Verilog

module dff_sync_pre (data, clk, preset, q);

input data, clk, preset;

output q;

reg q;

always @(posedge clk)

if (~preset)

q = 1'b1;

else q = data;

endmodule

Триггеры, тактируемые передним фронтом с асинхронным сбросом и разрешением тактового сигнала (Rising Edge Filp-Flop with Asynchronous Reset and Clock Enable)

Пример схемного обозначения приведен на Рис.6.7

Рис.6. 7.

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity dff_ck_en is

port (data, clk, reset, en : in std_logic;

q :out std_logic);

end dff_ck_en;

architecture behav of dff_ck_en is

begin

process (clk, reset) begin

if (reset = '0') then

q <= '0';

elsif (clk'event and clk = '1') then

if (en = '1') then

q <= data;

end if;

end if;

end process;

end behav;

Описание на Verilog

module dff_ck_en (data, clk, reset, en, q);

input data, clk, reset, en;

output q;

reg q;

always @(posedge clk or negedge reset)

if (~reset)

q = 1'b0;

else if (en)

q = data;

endmodule

Далее рассмотрим защелки на основе D-триггеров (D-Latches)

Защелка с разрешением выхода (D-Latch with Data and Enable)

Обозначение на схеме приведено на Рис.6.8

Рис.6.8

Описание на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity d_latch is

port(enable, data: in std_logic;

y :out std_logic);

end d_latch;

architecture behave of d_latch is

begin

process (enable, data)

begin

if (enable = '1') then

y <= data;

end if;

end process;

end behave;

Описание на Verilog

module d_latch (enable, data, y);

input enable, data;

output y;

reg y;

always @(enable or data)

if (enable)

y = data;

endmodule

Защелка с входом данных с разрешением (D-Latch with Gated Asynchronous Data)

Пример обозначения приведен на Рис.6.9

Рис.6.9.

Пример на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity d_latch_e is

port (enable, gate, data : in std_logic;

q :out std_logic);

end d_latch_e;

architecture behave of d_latch_e is

begin

process (enable, gate, data) begin

if (enable = '1') then

q <= data and gate;

end if;

end process;

end behave;

Пример на Verilog

module d_latch_e(enable, gate, data, q);

input enable, gate, data;

output q;

reg q;

always @ (enable or data or gate)

if (enable)

q = (data & gate);

endmodule

Защелка с входом разрешения (D-Latch with Gated Enable) (Рис.6.10)

Рис.6.10

Пример на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity d_latch_en is

port (enable, gate, d: in std_logic;

q :out std_logic);

end d_latch_en;

architecture behave of d_latch_en is

begin

process (enable, gate, d) begin

if ((enable and gate) = '1') then

q <=d;

end if;

end process;

end behave;

Пример на Verilog

module d_latch_en(enable, gate, d, q);

input enable, gate, d;

output q;

reg q;

always @ (enable or d or gate)

if (enable & gate)

q =d;

endmodule

Защелка с асинхронным сбросом (D-Latch with Asynchronous Reset) (Рис.6.11)

Рис.6.11.

Пример описания на VHDL

library IEEE;

use IEEE.std_logic_1164.all;

entity d_latch_rst is

port (enable, data, reset: in std_logic;

q :out std_logic);

end d_latch_rst;

architecture behav of d_latch_rst is

begin

process (enable, data, reset) begin

if (reset = '0') then

q <= '0';

elsif (enable = '1') then

q <= data;

end if;

end process;

end behav;

Пример описания на Verilog

module d_latch_rst (reset, enable, data, q);

input reset, enable, data;

output q;

reg q;

always @ (reset or enable or data)

if (~reset)

q = 1'b0;

else if (enable)

q = data;

endmodule

Соседние файлы в папке dsd-07=Verilog