+7 (812) 670-9095
Обратная связьEnglish
Главная → Статьи → Системное ПО → UDB. Что же это такое? Часть 6. Модуль управления и статуса/Status and Control Module
Полезный совет
Почему премия попадает во 2 раздел отчета 6-НДФЛ отдельным блоком с датой фактического получения дохода, отличной от даты начисления дохода?Подробнее
Версия для печати

UDB. Что же это такое? Часть 6. Модуль управления и статуса/Status and Control Module

22 марта 2019

В прошлых статьях-переводах документации Cypress очень предметно рассматривался операционный автомат — Datapath. Переходим к изучению других модулей UDB, в частности — модуль управления и статуса.




UDB. Что же это такое? Часть 6. Модуль управления и статуса/Status and Control Module


21.3.3. Модуль управления и статуса


Высокоуровневый вид модуля управления и статуса показан на рисунке 21-28. Состояния битов регистра управления передаются на трассировочные ресурсы, давая программе возможность управлять поведением UDB. Регистр статуса получает данные из трассировочных линий, благодаря чему программа может производить мониторинг операций, выполняемых UDB.


Рисунок 21-28. Регистры управления и статуса
Рисунок 21-28. Регистры управления и статуса


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


Рисунок 21-29. Модуль управления и состояния.
Рисунок 21-29. Модуль управления и состояния.


Режимы работы:

  • Ввод статуса/Status Input. Состояние линий, заведённых извне, может быть введено и захвачено, как статус, после чего — считано CPU или DMA.
  • Вывод управления/Control Output. CPU или DMA могут записать данные в регистр управления. Эти данные будут задавать состояние линий, уходящих в трассировочные ресурсы.
  • Параллельный ввод/Parallel Input – к параллельному входу Datapath.
  • Параллельный вывод/Parallel Output – от параллельного выхода Datapath.
  • Режим счетчика/Counter Mode. В этом режиме регистр управления работает как 7-битный убывающий счетчик с программируемым периодом и автоматической перезагрузкой. Входы трассировочных каналов могут быть сконфигурированы для управления как включением, так и сбросом счетчика. Когда этот режим активирован, функциональность регистра управления недоступна.
  • Синхронный режим/Sync Mode. В этом режиме регистр статуса работает как 4-битный двойной синхронизатор. Когда этот режим активирован, функциональность регистра статуса недоступна.

  • 21.3.3.1 Режим управления и статуса (Status and Control Mode)


    При работе в режиме управления и статуса этот модуль работает как регистр статуса, регистр прерывания наложения маски и регистр управления в конфигурации, показанной на рисунке 21-30.


    Рисунок 21-30. Работа управления и статуса.
    Рисунок 21-30. Работа управления и статуса.


    Работа регистра статуса


    Каждому UDB доступен один 8-битный регистр статуса. Данные на вход этого регистра поступают от любого сигнала цифровой трассировочной структуры. Регистр статуса разрушаемый: он теряет свое состояние во время сна и после пробуждения имеет значение 0х00. Каждый бит можно независимо запрограммировать на работу в одном из двух режимов.


    Таблица 21-19. Регистр статуса.

    STAT MD Описание
    0 Обычное чтение. Возвращает текущее значение входного сигнала.
    1 Залипание, очищается при чтении. Высокий уровень на входе защёлкивается по тактовому сигналу. Очищается после того, как регистр прочитан.


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


    Обычное чтение статуса


    По умолчанию, CPU прозрачно считывает состояние соответствующей цепи. Этот режим можно использовать для чтения данных, защёлкнутых внутри UDB.


    Залипание статуса с очисткой после чтения


    В этом режиме входные сигналы регистра статуса дискретизируются на каждом цикле тактирования управления и статуса. Если сигнал на данном такте высокий, он захватывается в бит статуса и остается высоким, вне зависимости от последующих состояний входа. Когда CPU или DMA считывает регистр статуса, бит очищается. Очистка регистра статуса не зависит от режима и происходит даже при отключенном тактировании UDB; оно базируется на тактировании шины и происходит в рамках операции чтения.


    Защелкивание статуса во время чтения


    Рисунок 21-31 показывает структуру логики чтения статуса. За регистром залипающего статуса следует защелка, которая защелкивает данные регистра статуса и держит его стабильным во время цикла чтения, вне зависимости от количества тактов ожиданий в текущей операции чтения.


    Рисунок 21-31. Логика чтения статуса.
    Рисунок 21-31. Логика чтения статуса.


    Генерация прерываний


    В большинстве функций генерация прерываний привязана к параметрам битов статуса. Как показано на рисунке 21-31, эта особенность встроена в логику регистра статуса в виде операции наложения маски и применения операции ИЛИ к статусу. Только младшие 7 бит входа статуса можно использовать вместе со встроенными генераторами прерываний. Старший бит (Most Significant Bit, MSB) обычно используется в качестве выхода прерывания и может быть проброшен на контроллер прерываний при помощи цифровых трассировочных каналов. В этой конфигурации из старшего бита регистра статуса считывается состояние бита запроса на прерывание.


    21.3.3.2 Работа регистра управления (Control Register Operation)


    Каждому UDB доступен один 8-битный регистр управления. Он работает как стандартный регистр чтения/записи на системной шине, где выход этих битов регистров управляют линиями цифровой трассировочной структуры.

    Регистр управления разрушаемый: он теряет свое состояние во время сна и после пробуждения имеет значение 0х00.


    Режимы работы регистра управления


    Каждый бит может быть сконфигурирован в одном из трех режимов. Конфигурация задаётся при помощи объединения битов двух 8-битных регистров CTL_MD1[7:0] и CTL_MD0[7:0]. Например, {CTL_MD1[0], CTL_MD0[0]} управляет режимом нулевого бита регистра управления (см. таблицу 21-20).


    Таблица 21-20. Режим нулевого бита регистра управления

    CTL MD Описание
    00 Прямой режим / Direct Mode
    01 Синхронный режим / Sync Mode
    10 (зарезервировано)
    11 Импульсный режим / Pulse Mode

    Прямой режим регистра управления


    По умолчанию, режим является прямым. Как показано на рисунке 21-32, когда в регистр управления записывает CPU или DMA, на том же цикле выход регистра управления направляется напрямую на трассировочную линию.


    Рисунок 21-32. Прямой режим регистра управления.
    Рисунок 21-32. Прямой режим регистра управления.


    Синхронный режим регистра управления


    В синхронном режиме, как показано на рисунке 21-33, выход регистра управления пересинхронизируется с тактированием равным текущему тактированию управления и статуса (Status and Control, SC). Это позволяет управлять временными диаграммами выхода на выбранной частоте SC, а не на частоте тактирования шины.


    Рисунок 21-33. Синхронный режим регистра управления.
    Рисунок 21-33. Синхронный режим регистра управления.


    Импульсный режим регистра управления


    Импульсный режим похож на синхронный режим, так как в нем бит управления повторно дискретизируется на частоте SC; импульс начинается на первом цикле тактирования SC и следует за циклом записи шины. Выход бита управления задается в течение одного полного цикла тактирования SC. В конце данного цикла тактирования бит управления автоматически сбрасывается.

    При таком режиме работы программа может записать 1 в бит регистра управления для генерации импульса. После того как биту присвоено значение 1, программа будет читать его как 1 до завершения импульса, после чего он будет считываться как 0. После этого программа может записать еще одну 1, чтобы начать новый импульс. Таким образом, подавать импульс получится не чаще, чем на каждом втором такте сигнала SC.


    Сброс регистра управления


    Регистр управления имеет два режима сброса, управляемых битом конфигурации EXT RES, как показано на рисунке 21-34. Когда EXT RES равен 0 (по умолчанию), в синхронном или импульсном режиме трассируемый вход сброса сбрасывает синхронизированный выход, но не сам бит управления. Когда EXT RES равен 1, трассируемый вход сброса сбрасывает как бит управления, так и синхронизированный выход.

    Рисунок 21-34. Сброс регистра управления.
    Рисунок 21-34. Сброс регистра управления.


    21.3.3.3 Режим параллельного ввода/вывода (Parallel Input/Output Mode)


    В этом режиме трассировка управления и статуса подключена к сигналам parallel in и parallel out (параллельный ввод/вывод) Datapath. Чтобы активировать этот режим, необходимо взвести биты конфигурации SC OUT для выбора параллельного выхода Datapath. Связь с parallel input (параллельным входом) всегда доступна, однако эти трассировочные связи разделяются со входами регистров статуса, входам управления счетчиком и выходам прерывания.

    Рисунок 21-35. Режим параллельного ввода/вывода.
    Рисунок 21-35. Режим параллельного ввода/вывода.


    21.3.3.4 Режим счётчика (Counter Mode)


    Как показано на рисунке 21-36, когда блок работает в режиме счётчика, 7-битный убывающий счётчик доступен для использования как для операций внутри UDB, так и для нужд программы. К особенностям счётчика относятся:


    • 7-битный регистр периода, (доступен для чтения/записи).
    • 7-битный регистр счета, (доступен для чтения/записи). Доступ возможен только при остановленном счётчике.
    • Автоматическая перезагрузка периода в регистр счёта при достижении нуля.
    • Программно доступный бит управления в регистре вспомогательного управления CNT START, используемый для запуска и остановки счётчика. (Он перекрывает аппаратный сигнал ENABLE и должен быть установлен, чтобы опциональный аппаратный сигнал ENABLE начал функционировать).
    • Выбираемые биты трассировочных каналов опционального динамического управления счётчика для функций запуска и загрузки:
      — EN, трассируемый сигнал для запуска или остановки счёта.
      — LD, трассируемый сигнал загрузки, который вызывает перезагрузку периода. Когда этот сигнал взведен, он перекрывает ожидающий сигнал окончания счёта. Он чувствителен к уровню, и пока сигнал взведён, период продолжает загружаться.
    • 7-битный счётчик может передаваться в трассировочные ресурсы как sc_out[6:0].
    • Сигнал окончания счёта может входить в трассировочные ресурсы как sc_out[7].
    • В режиме «по умолчанию» для сигнала окончания счёта используется режим с защёлкиванием. В альтернативном режиме он переключается в комбинационный режим.
    • В режиме «по умолчанию» опциональный аппаратный сигнал EN, если он используется, должен быть установлен для разрешения работы аппаратного сигнала LD. В альтернативном режиме аппаратные сигналы LD и EN независимы.

    Рисунок 21-36. Режим счётчика
    Рисунок 21-36. Режим счётчика


    Примечание переводчика:

    Примерно к этому месту я понял, что совершенно ничего не понимаю из документа. Нигде не рассказывается про эти режимы «по умолчанию» и «альтернативный». После долгих поисков, удалось найти какой-никакой, а пример. Файл: C:\Program Files (x86)\Cypress\PSoC Creator\4.2\PSoC Creator\psoc\content\CyComponentLibrary\CyComponentLibrary.cylib\bScanComp_v1_10\bScanComp_v1_10.v Поясняющий код:

        cy_psoc3_count7 #(.cy_period(Period),.cy_route_ld(0),.cy_route_en(1), .cy_alt_mode(1))
        ChannelCounter(
            /* input          */ .clock(clk_int),
            /* input          */ .reset(1'b0),
            /* input          */ .load(1'b0),
            /* input          */ .enable(enable_int),
            /* output [06:00] */ .count(count),
            /* output         */ .tc(tc_o)
        );
    

    Само же объявление компонента cy_psoc3_count7 я нашёл только для языка VHDL, похоже, для Verilog оно встроено в средства разработки. Теперь вы примерно знаете, где искать обсуждаемые биты настройки.

    Здесь же рассмотрим таинственные биты, которые называются то SC OUT CTL, то SC_OUT_CTL, но их значения не документированы. Их я не нашёл вообще нигде. Из текста ясно, что они переключают компонент STATUS_CONTROL между режимами. Но в упомянутом ранее VHDL файле C:\Program Files (x86)\Cypress\PSoC Creator\4.2\PSoC Creator\warp\lib\lcpsoc3\cpsoc3.vhd

    мы видим отдельно уже известный нам счётчик

    component cy_psoc3_count7
        generic(cy_period : std_logic_vector (6 downto 0) := "1111111";
                cy_init_value : std_logic_vector (6 downto 0) := "0000000";
         cy_route_ld : boolean := false;
         cy_route_en : boolean := false;
         cy_alt_mode : boolean := false);
        port (clock : in std_logic;
         reset : in std_logic;
         load : in std_logic;
         enable : in std_logic;
         count : out std_logic_vector (6 downto 0);
         tc : out std_logic);
    end component;
    

    отдельно — статус и управление

        attribute atomic_rtl of cy_psoc3_status : component is rtl_generic;
        attribute cpu_access of cy_psoc3_status : component is true;
    component cy_psoc3_statusi
        generic(cy_force_order : boolean := false;
         cy_md_select : std_logic_vector (6 downto 0) := "0000000";
         cy_int_mask : std_logic_vector (6 downto 0) := "0000000");
        port (reset : in std_logic := '0';
         clock : in std_logic := '0';
         status : in std_logic_vector (6 downto 0);
         interrupt : out std_logic);
    end component;
    
        attribute atomic_rtl of cy_psoc3_statusi : component is rtl_generic;
        attribute cpu_access of cy_psoc3_statusi : component is true;
    component cy_psoc3_control
        generic(cy_init_value : std_logic_vector (7 downto 0) := "00000000";
         cy_force_order : boolean := false;
         cy_ctrl_mode_1 : std_logic_vector (7 downto 0) := "00000000";
         cy_ctrl_mode_0 : std_logic_vector (7 downto 0) := "00000000";
         cy_ext_reset : boolean := false);
        port (reset : in std_logic := '0';
         clock : in std_logic := '0';
         control : out std_logic_vector (7 downto 0));
    end component;
    


    отдельно — синхронизатор

    component cy_psoc3_sync
        port (clock : in std_logic := '0';
         sc_in : in std_logic;
         sc_out : out std_logic);
    end component;
    

    Повторю, что в Verilog версии этих объявлений совсем нет (есть только поведенческие модели в каталоге C:\Program Files (x86)\Cypress\PSoC Creator\4.2\PSoC Creator\warp\lib\sim, поэтому я считаю, что биты, устанавливающие режимы, простым программистам недоступны. При чтении этого раздела следует держать данный факт в уме. Кое-что даётся чисто для справки, нам, программистам, оно неподвластно.

    Чтобы включить режим счётчика, в битах SC_OUT_CTI[1:0] должен быть выбран выход счётчика. В этом режиме нормальная работа регистра управления недоступна. В то же время, регистр статуса можно использовать для операций чтения, но для генерации прерывания его использовать не стоит, так как регистр наложения маски также используется в качестве регистра периода счётчика. Регистр периода не разрушается и сохраняет свое состояние после пробуждения. Для периода из N тактов, в регистр периода должно быть загружено значение N-1. Значение N = 1 (период равен нулю) в качестве значения делителя частоты не поддерживается и приведет к постоянной единице на выходе ТС (Terminal count, TC). Доступность режима SYNC зависит от того, используется динамическое управление (LD/EN) или нет. Если оно не используется, это не влияет на режим SYNC. Если оно используется, режим SYNC недоступен.


    21.3.3.5 Синхронный режим (Sync Mode)


    Как показано на рисунке 21-37, регистр статуса может работать как 4-битный двойной синхронизатор, тактируемый текущим значением SC_CLK, если бит SYNC MD задан. Этот режим можно использовать для реализации локальной синхронизации асинхронных сигналов (например, входов GPIO). При этом синхронизируемые сигналы выбираются из SC_IN[3:0], выходы пробрасываются на контакты SC_IO_OUT[3:0], а SYNC MD автоматически переводит контакты SC_IO в режим выхода. В этом режиме нормальная работа регистра статуса недоступна, а режим залипающего бита статуса принудительно отключен, вне зависимости от настроек управления режима. Данный режим не влияет на регистр управления. Счётчик всё ещё можно использовать, но с ограничениями. При таком режиме работы нельзя использовать динамические входы (LD/EN).

    Рисунок 21-37. Синхронный режим.
    Рисунок 21-37. Синхронный режим.


    21.3.3.6 Тактирование управления и статуса (Status and Control Clocking)

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

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

    Тактирование назначается в модуле тактирования и сброса. См. 21.3.4. Модуль управления тактированием и сбросом.

    21.3.3.7 Вспомогательный регистр управления (Auxiliary Control Register)


    Вспомогательный регистр управления для чтения и записи – специальный регистр, который управляет жёстко заданной аппаратурой UDB. Этот регистр позволяет CPU или DMA динамически управлять прерываниями, FIFO и работой счётчика. Биты регистров и их описание приведены ниже:


    Вспомогательный регистр управления
    7 6 5 4 3 2 1 0
    CNT START INT EN FIFO1 LVL FIFO0 LVL FIFO1 CLR FIFO0 CLR

    Очистка FIFO0 и FIFO1 (FIFO0 Clear, FIFO1 Clear)


    Биты FIFO0 CLR и FIFO1 CLR используются для сброса состояния соответствующих FIFO. Когда в эти биты записывается 1, состояние соответствующего FIFO сбрасывается. Для продолжения работы FIFO в эти биты необходимо записать 0. Когда эти биты остаются взведенными FIFO работают как простые однобайтные буферы без статуса.


    Уровень FIFO0 и FIFO1 (FIFO0 Level, FIFO1 Level)


    Биты FIFO0 LVL и FIFO1 LVL задают уровень, при котором 4-байтный FIFO взводит статус шины (когда шина читает или записывает в FIFO). Значение статуса шины FIFO зависит от сконфигурированного направления, как показано в таблице ниже.


    Таблица 21-21. Биты управления уровнем FIFO.

    FIFOx LVL Режим ввода (Шина записывает в FIFO) Режим вывода (Шина читает из FIFO)

    0

    Не полон.
    Можно записать хотя бы 1 байт.
    Не пуст.
    Для чтения доступен хот бы 1 байт.

    1

    Опустошен как минимум на половину.
    Можно записать хотя бы 2 байта.
    Заполнен как минимум на половину.
    Для чтения доступны хотя бы 2 байта.

    Активатор прерывания (Interrupt Enable)


    Когда логика генерации регистра статуса активирована, бит INT EN разрешает прохождение сформированного сигнала прерывания.


    Запуск счётчика/счёта? (Count Start)


    Бит CNT START можно использовать для запуска и остановки счётчика (доступно только если биты SC_OUT_CTL[1:0] сконфигурированы для режима выхода счётчика).


    21.3.3.8 Краткий итог по регистрам управления и статуса


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


    Таблица 21-22. Краткий итог по работе регистров управления и статуса

    Режим Управление/Счётчик (Control/Count) Статус/Синхронизация (Status/SYNC) Наложение маски/Период (Mask/Period)
    Управление (Control) Выход управления (Control Out) Вход статуса или синхронизация (Status In or SYNC) Наложение маски статуса (Status Mask)
    Счётчик (Count) Выход счётчика (Count Out) Период счётчикаa (Count Period)
    Статус (Status) Выход управления или выход счётчика (Control Out or Count Out) Вход статуса (Status In) Наложение маски статуса (Status Mask)
    Синхронизация (SYNC) Синхронизация (SYNC) Не доступноb (NA)


    а. – обратите внимание, что в режиме счётчика регистр наложения маски работает как регистр периода и не может работать как регистр наложения маски. Следовательно, выход прерывания недоступен при активированном режиме счётчика.

    b. – обратите внимание, что в режиме синхронизации регистр статуса недоступен, а, следовательно, регистр наложения маски использовать невозможно. Однако его можно использовать в качестве регистра периода для режима счётчика.

    Продолжение следует…


    Автор: Cypress

    Источник: http://www.cypress.com/file/123561/download

    Теги: PSoC, микроконтроллеры, системное программирование