Студопедия — Использование инерционной задержки
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Использование инерционной задержки

УПРАВЛЕНИЕ МОТИВАЦИЕЙ ПЕРСОНАЛА НА МУНИЦИПАЛЬНОМ ПРЕДПРИЯТИИ

 

Использование инерционной задержки.

 

Library IEEE;

Use IEEE.Std_logic_1164.All;

 

Entity buf is

Port(a: in Std_logic;

B: out Std_logic);

end buf;

 

Architecture buf of buf is

Begin

b<=a after 10 ns;

end buf;

 

Использование транспортной задержки.

 

Library IEEE;

Use IEEE.Std_logic_1164.All;

 

Entity delay_line is

Port(a: in Std_logic;

B: out Std_logic);

end delay_line;

 

Architecture delay_line of delay_line is

Begin

b<= Transport a after 10 ns;

end delay_line;

 

Для получения четкого представления о механизмах обоих типов задержек, необходимо подать на вход смоделированного в обеих программах устройства импульсы, длительностью менее 10 наносекунд, а затем длительностью более 10 нс.

Если механизм задержки электронных компонентов не задается, то VHDL симулятор использует в своих вычислениях механизм δ-задержки.

Т.о. инерционная задержка определяется исключительно внутренними свойствами самого электронного компонента, тогда как транспортные задержки – внешними соединениями ИМС, например, свойствами печатного монтажа. Обычно, транспортные задержки сигнала не превышают нескольких наносекунд, однако, поскольку рассматриваемые электронные компоненты фирмы "Altera" представляют собой высокоскоростные цифровые устройства, работающие на высоких частотах в реальном масштабе времени, такой порядок задержек может оказаться существенным, и, прежде всего, с точки зрения их влияния на однозначность логики работы проектируемых устройств.

Механизм инерционной задержки, обычно, рассматривают на последних стадиях проектирования, при окончательной отработке проекта.

 

Пакеты и конфигурации.

 

Пакет (Package) определяет группу логически связанных понятий (типы, объекты, данные этих типов и подпрограммы с параметрами этих типов).

В большинстве языков программирования высокого уровня имеется такое понятие, как "Программный модуль". Программный модуль может подключаться к основной программе.

Любой пакет состоит из декларации (описания) и тела, т.е. из интерфейсной и внутренней частей. Интерфейсная часть определяет характер взаимодействия этого пакета с другими пакетами. Внутренняя часть представляет содержание этого пакета. В некоторых случаях пакет может содержать только интерфейсную часть, например, при определении переменных своего типа, тело пакета в этом случае будет пустым, т.е. формально тело будет присутствовать в пакете, но будет состоять только из заголовка и слова "end".

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

Декларация пакета содержит описание всех понятий, которые могут быть в явном виде использованы вне пакета. Тело пакета содержит подпрограммы, процедуры и функции, которые определены в интерфейсной части пакета, а так же содержит определение локальных имен и переменных, которые использованы внутри пакета.

Любое описание, которое содержится в интерфейсной части, доступно из некоторого VHDL блока, если пакет предварительно скомпилирован в одной из библиотек проекта, а VHDL блок ссылается на этот пакет(Use <имя пакета>).

Рассмотрим пример описания пакета, в котором содержатся два типа данных – восьмиразрядный битовый вектор (Eight_bit) и четырехразрядный битовый вектор (Four_bit), а так же описание функции "Сдвиг вправо" (Shift_Right).

 

--Интерфейсная часть

Package my_pack is

Sub type eight: bit is bit_vector (0 to 7);

Sub type four: bit is bit_vector (0 to 3);

Function Shift_right (val: bit_vector)

Return bit_vector;

End my_pack;

 

--Тело пакета

Package body my_pack is

Function Shift_right (val: bit_vector)

Return bit_vector;

Variable result (bit_vector (0 to val'length – 1))

Begin

Result:= val;

If (val'length > 1) then

For i in 0 to (val_length – 2) loop

Result(i):=Result(i + 1);

End loop;

Result(val_length – 1):= '0';

Else result(0):= '0';

End if;

Return Result;

End Shift_right;

End my_pack;

 

Для подключения этого пакета после его компиляции к какому-либо проекту, достаточно лишь вписать в начале текстового файла этого проекта следующую строку:

 

"Use my_pack;"

 

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

 


Примеры VHDL – проектов

 

 

Library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

 

 

entity Clk is

generic(constant t:natural:=2 ns);

port(clock: out std_ulogic);

end entity Clk;

architecture aaa of Clk is

Signal c:std_ulogic:='0';

begin

Process(c)

begin

if (c='0') then c<='1' after t; c<='0' after 2*t; end if;

clock<=c;

end process;

end;


 

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

 

 

entity pr1 is

port(clk: out bit:='0');

constant high_time, low_time: time:=0.5 sec;

end pr1;

 

architecture sequential of pr1 is

begin

exlicit_waits: process

begin

clk<='1';

wait for high_time;

clk<='0';

wait for low_time;

end process;

end sequential;

 

 

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

 

entity pr2 is

port(A: in std_logic_vector(7 downto 0);

B: out std_logic_vector(7 downto 0);

C: in std_logic);

end pr2;

 

architecture Behavior of pr2 is

 

Begin

Process(A,C)

begin

if C='1' and (c'event) then B<=A;

end if;

end process;

End Behavior;

 


 

-- Т-триггер с работой по отрицательному перепаду

 

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

 

entity pr3 is

port(C: in std_logic;

q: out std_logic);

end pr3;

 

architecture Beh of pr3 is

Signal d: std_logic:='0';

 

Begin

Process(C)

begin

if C='0' and (c'event) then d<=not d; q<=d;

 

-- для работы по положительному перепаду

-- if C='1' and (c'event) then d<=not d; q<=d;

 

end if;

end process;

 


 

 

library IEEE;

use IEEE.std_logic_1164.all; -- defines std_logic types

 

 

entity pr7 is

port (

clk: in STD_LOGIC;

q: buffer STD_LOGIC_VECTOR (7 downto 0)

);

 

 

end pr7;

 

architecture jcounter_arch of pr7 is

begin

 

process (CLK)

begin

if CLK'event and CLK='1' then -- CLK rising edge

q(7 downto 1) <= q(6 downto 0); -- Shift lower bits

q (0) <= not q(7); -- Circulate inverted MSB

end if;

end process;

 

end jcounter_arch;

 

 


 

 

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

 

ENTITY delay_line_tb IS

---------------------

END delay_line_tb;

 

ARCHITECTURE delay_line_tb OF delay_line_tb IS

COMPONENT delay_line

PORT(

a: IN STD_LOGIC;

b: OUT STD_LOGIC);

END COMPONENT;

 

signal sa: STD_LOGIC:='0';

signal sb: STD_LOGIC;

BEGIN

dut: delay_line;

port (a => sa;

b => sb);

sa<='1'after 5 ns,

'0'after 8 ns,

'1'after 10 ns,

'0'after 25 ns,

'1'after 28 ns,

'0'after 30 ns,

'1'after 45 ns,

'0'after 48 ns;

end delay_line_tb;

 

 


 

 

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

entity proj8 is

port(s,r:inout bit;

q, nq:inout bit);

end proj8;

 

architecture Behavior of proj8 is

 

Begin

s<='1';

r<='1';

gen1: process

begin

s<='0' after 50 ns, '1' after 80 ns;

wait on s;

end process;

 

gen2: process

begin

r<='0' after 20 ns, '1' after 30 ns;

wait for 120 ns;

end process;

process

begin

if s='0' and r='1' then q<='1'; nq<='0';

elsif s='1' and r='0' then q<='0'; nq<='1';

end if;

assert not(s='0' and r='0')

report "ошибка: s,r=0" severity warning;

wait on s,r;

end process;

End Behavior;

 

 


 

%===============================================%

% Функция M_GENERATE %

% Генерирует М-последовательность, заданную %

% характеристическим многочленом М %

% %

% Входы: %

% M - вход многочлена; %

% GENA - разрешение генерации (default=GND);%

% CLK - тактовый вход; %

% LOAD - вход предустановки (default=GND); %

% Выходы: %

% OUT - выход М-последовательности %

% %

% Параметры: %

% M_WIDTH - длина полинома; %

% M_BEGIN - начальное состояние %

%===============================================%

 

INCLUDE lpm_xor.inc;

INCLUDE lpm_constant.inc;

PARAMETERS

(

M_WIDTH,

M_BEGIN = 0

);

SUBDESIGN m_generate

(

M[M_WIDTH-1..0]: INPUT = GND;

CLK: INPUT;

GENA: INPUT = GND;

LOAD: INPUT = GND;

OUT: OUTPUT;

)

VARIABLE

dffs[M_WIDTH-2..0]: DFFE; - триггеры регистра сдвига

shift_node[M_WIDTH-2..0]: NODE;

xor_node[M_WIDTH-2..0]: NODE;

shiftin, shiftout: NODE; - вход и выход регистра сдвига

IF (USED(M_BEGIN)) GENERATE

ac: lpm_constant

WITH (LPM_WIDTH = M_WIDTH, LPM_CVALUE = M_BEGIN);

END GENERATE;

BEGIN

ASSERT (M_WIDTH>0)

REPORT «Значение параметра M_WIDTH должно быть больше нуля»

SEVERITY ERROR;

 

% --------------------- общие выводы триггеров ------------------------%

dffs[].ena = GENA;

dffs[].clk = CLK;

% ---------------------- асинхронные операции ------------------------- %

IF (USED(M_BEGIN)) GENERATE

dffs[].clrn =!load # ac.result[M_WIDTH-2..0];

% установка начального состояния %

dffs[].prn =!load #!ac.result[M_WIDTH-2..0];

% триггеров, заданное M_BEGIN %

ELSE GENERATE

dffs[M_WIDTH-3..0].clrn =!load;

% установка начального состояния %

dffs[M_WIDTH-2].prn =!load;

% триггеров «10000..00 %

END GENERATE;

 

% ----------------------- обратные связи ---------------------- %

xor_node[] = dffs[] & M[M_WIDTH-2..0];

shiftin = lpm_xor(xor_node[])

WITH (LPM_SIZE = M_WIDTH-1, LPM_WIDTH=1);

% ---------------------- операции сдвига ---------------------- %

shift_node[] = (shiftin, dffs[M_WIDTH-2..1]);

shiftout = dffs[0];

%--------------------- синхронные операции ----------------- %

dffs[].d =!load & shift_node[];

%----------------------- подключим выход ------------------- %

OUT = shiftout;

END;


 

--Преобразователь кода представляет собой устройство, на вход которого подается n-битное число в параллельном коде «d», сигнал загрузки «load» и синхроимпульсы «clk». По сигналу загрузки происходит запись входного слова во внутренний регистр и последовательная выдача в течение n тактов этого входного слова в последовательном коде на выходе «о» синхроимпульсами «oclk». После окончания преобразования на выходе «e» появляется высокий уровень сигнала в течение одного такта. Такого рода преобразователи кода часто используются для управления синтезаторами частот 1104ПЛ1 и им подобными.

 

library ieee;

use ieee.std_logic_1164.all;

entity Serial is

port (

clk: in STD_LOGIC;

load: in STD_LOGIC;

reset: in STD_LOGIC;

d: in STD_LOGIC_vector (3 downto 0);

oclk: out STD_LOGIC;

o: out STD_LOGIC;

e: out STD_LOGIC

);

end;

architecture behavioral of Serial is

type t1 is range 0 to 4;

signal s: STD_LOGIC_vector (2 downto 0);

signal i: t1;

begin

process (clk)

begin

if reset = '1' then

i <= 0;

else

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

if (i = 0 and load = '1') then

s(2 downto 0) <= d(3 downto 1);

o <= d(0);

i <= 4;

end if;

if (i > 1) then

o <= s(0);

s(1 downto 0) <= s(2 downto 1);

i <= i - 1;

end if;

if (i = 1) then

e <= '1';

i <= 0;

else

e <= '0';

end if;

end if;

end if;

if i>=0 then

oclk <= not clk;

else

oclk <= '0';

end if;

end process;

end behavioral;




<== предыдущая лекция | следующая лекция ==>
Оценка потребности, способности и мотивации работников к обучению | ОБЩЕПСИХОЛОГИЧЕСКИЙ ПРАКТИКУМ

Дата добавления: 2015-03-11; просмотров: 410. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

Словарная работа в детском саду Словарная работа в детском саду — это планомерное расширение активного словаря детей за счет незнакомых или трудных слов, которое идет одновременно с ознакомлением с окружающей действительностью, воспитанием правильного отношения к окружающему...

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия