Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Desktop / Лабник- версия 28122015.docx
Скачиваний:
65
Добавлен:
26.03.2016
Размер:
346.82 Кб
Скачать

Лабораторная работа № 2. Синхронные схемы. Разработка счетчика.

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

На рисунке 8 приведена ситуация с состоянием устройства, близким к отказу:

Рисунок 8. К необходимости использования синхронизации

Действительно, часть выходных сигналов имеет очень малую временную протяженность. При этом логическая модель идеализирована (хотя есть еще и postp&rмодели), реальный сигнал имеет фронты ненулевой длительности, энергетика сигнала должна обеспечить переключение нагрузки. Таким образом предсказать, как будет реагировать устройство на сигналoutвряд ли невозможно без точного схемотехнического моделирования на уровне транзисторов и описания параметровRC- цепочек. Для проведения схемотехнического моделирования на таком уровне должны быть модели, адекватные как реальным компонентам устройства, так и реальным входным сигналам. Всё это усложняет процесс моделирования, увеличивая ресурсоемкость и время процесса разработки.

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

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

Последовательная синхронная схема должна отвечать следующим критериям:

  • Каждый элемент схемы является либо регистром, либо комбинационной схемой.

  • Как минимум один элемент схемы является регистром

  • Все регистры тактируются единственным тактовым сигналом

  • В каждом циклическом пути присутствует как минимум один регистр

Последовательность разработки синхронной схемы.

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

Организуются входные и выходные регистры с задержками сигнала между ними, гарантированно вписывающимися в тактовые частоты.

Анализируются обратные связи в схеме, организуется их синхронизация.

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

Альтернативный способ- самосинхронизация, разрабатывавшаяся Маллером Д.Е. и Варшавским В.И. основана на принципе «завершившийся процесс формирует флаг, разрешающий выполнение следующего этапа». Этот способ не доведён до состояния конкурентных, четких, ясных и однозначных решений, вполне понятных разработчику. Тем не менее исследовательские работы в этом направлении продолжаются.

На рисунке приведена схема арифметическо- логического устройства, разработанная в 70-е годы ХХ века. Разработчики использовали принцип «все триггеры будут размещены снаружи»- проблемы, включающие синхронизацию, были переданы на следующий уровень. В ситуации с тогдашними технологическими возможностями это было, видимо, вполне разумным. Разработчики устройств, использующих это АЛУ, были вынуждены учитывать различные задержки, формируемые АЛУ для обеспечения нормальной работы всего комплекса.

 

Рисунок 7. АЛУ TI74181, не содержащее триггеры.

Счетчик. К «классическим» синхронным устройствам относятся регистры и счетчики. В лабораторной работе будет рассмотрено создание таких схем.

Сдвиговый регистр представляет собой последовательность D- триггеров, использующих общую синхронизацию и при необходимости общую линию сброса. Сигнал с входаInpпоследовательно с каждым новым фронтом синхросигнала Сlkпередается от триггера к триггеру и оказывается на выходе после того, как число тактов синхронизации станет равным числу триггеров. При реализации на практике таких устройств следует предусматривать начальную установку соответствующим синхронным сигналом, подающимся на вход сброса триггеров.

Счетчики и делители частоты.

Каждый компонент счётчика обеспечивает следующее преобразование входного сигнала:

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

Биты на выходах формируют число, представляющее собой номер импульса (разумеется в пределах разрядности полученного устройства, то есть количества триггеров). В зависимости от того, будут использованы для выхода прямые или инверсные выходы триггеров, счет будет идти «с увеличением» или «с уменьшением» относительно исходного значения.

При разработке счетчиков на ПЛИС подход, называемый поведенческим. Например счетчик на 8 разрядов (диапазон 0…25610) с дополнительным выходом «досчитались до 35» может быть описан так:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

Port ( CLK : in std_logic;

rst : in std_logic;

dat_out : out std_logic_vector(8 downto 0);

mycount : out std_logic;

out_zad : out std_logic;

Q : out std_logic);

process(CLK)

begin

if CLK 'event and CLK = '1' then

--- все изменения происходят только по восходящему фронту синхроимпульса

if (rst) = '1' then

st <= "00000000";

mycount<= '0';

Q<= '0';

--- сброс по rst- по уровню

else

if(st) = 127 then

Q<='1';

--- если досчитались

else st <= st + 1;

Q<='0';

end if;

if(st) = 35 then

mycount <='1';

--- сигнал для выхода

else

mycount <='0';

end if;

end if;

end if;

end process;

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

Задания к лабораторной работе

На вход схемы приходит циклический однобитный сигнал. Восьмиразрядный выход отображает номер такта. Дополнительный выход сообщает о прохождения mтактов с начала работы счетчика. Сигнал с выхода третьего разряда счетчика (тактовая частота, поделенная на 8) отображается дополнительно с задержкой наnтактов. Схема устанавливается в начальное состояние сигналомrst.

Номер варианта

m10

n10

1

8

2

2

9

3

3

10

4

4

11

5

5

12

2

6

13

3

7

14

4

8

17

5

9

18

2

10

19

3

11

20

4

12

21

5

13

22

2

14

23

3

15

24

4

16

25

5

17

26

2

18

27

3

19

28

4

20

29

5

21

30

2

22

31

3

23

33

4

24

34

5

25

35

2

26

36

3

27

37

4

28

38

5

29

39

2

30

40

3

31

41

4

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

Приложение. Реализация счетчика с дополнительным выходным сигналом и триггером на выходе

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

library work;

use work.all;

entity counter is

Port ( CLK : in std_logic;

rst : in std_logic;

dat_out : out std_logic_vector(8 downto 0);

mycount : out std_logic;

out_zad : out std_logic;

Q : out std_logic);

end counter;

architecture Behavioral of counter is

component trig_sh

Port ( c : in STD_LOGIC;

reset : in STD_LOGIC;

d : in STD_LOGIC;

q : out STD_LOGIC);

end component;

signal st : std_logic_vector(8 downto 0);

signal my_data : std_logic;

begin

process(CLK)

begin

if CLK 'event and CLK = '1' then

if (rst) = '1' then

st <= "000000000";

mycount <= '0';

Q <= '0';

else

if(st) = 127 then

Q<='1';

else st <= st + 1;

Q<='0';

end if;

if(st) = 35 then

mycount <='1';

else

mycount <='0';

end if;

end if;

end if;

end process;

dat_out <= st;

my_data <= st(2);

dd11: ENTITY trig_sh port map(c=>clk, reset=>rst, d=>my_data, q=>out_zad);

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

end Behavioral;

library IEEE;

library work;

use work.all;

USE ieee.std_logic_1164.ALL;

USE ieee.numeric_std.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

LIBRARY UNISIM;

USE UNISIM.Vcomponents.ALL;

ENTITY test_bench IS

END test_bench;

ARCHITECTURE behavioral OF test_bench IS

component counter

Port ( CLK : in std_logic;

rst : in std_logic;

dat_out : out std_logic_vector(8 downto 0);

mycount : out std_logic;

out_zad : out std_logic;

Q : out std_logic);

end component;

signal CLK : std_logic;

signal rst : std_logic;

signal dat_out : std_logic_vector(8 downto 0);

signal mycount : std_logic;

signal out_zad : std_logic;

signal Q : std_logic;

constant PERIOD : TIME := 10 ns;

constant DUTY_CYCLE : real := 0.5;

constant OFFSET : time := 3 ns;

begin

UUT: ENTITY counter PORT MAP(

dat_out => dat_out,

rst => rst,

CLK => CLK,

mycount => mycount,

out_zad => out_zad,

Q => Q);

-- *** Clock Process for CLK - User Defined Section 2 ***

clk_gen: PROCESS

BEGIN

WAIT for OFFSET;

CLOCK_LOOP : LOOP

CLK <= '0';

WAIT FOR (PERIOD - (PERIOD * DUTY_CYCLE));

CLK <= '1';

WAIT FOR (PERIOD * DUTY_CYCLE);

END LOOP CLOCK_LOOP;

END PROCESS;

rst_gen: PROCESS

BEGIN

WAIT for OFFSET;

rst <='1';

wait for period * DUTY_CYCLE *5;

rst <='0';

wait;

END PROCESS;

end;