реклама на сайте
подробности

 
 
> Модуль RTC.
Jenya7
сообщение Sep 4 2017, 11:44
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Сделал модуль RTC
Код
entity RTC is
port(
     RST      : in    Std_logic;
     CLK      : in    Std_logic;
      
    SECONDS   : out    Std_logic_vector(5 downto 0);
    MINUTES   : out    Std_logic_vector(5 downto 0);
    HOURS     : out     Std_logic_vector(4 downto 0);
    
     DAY       : out    Std_logic_vector(5 downto 0);
    MONTH     : out     Std_logic_vector(3 downto 0);
    YEAR      : out    Std_logic_vector(11 downto 0)
  );
end RTC;

и вычисляю часы, минуты, дни и так далее.
Но модуль надо инициализировать реальным временем. Получается надо сделать что то вроде такого
Код
entity RTC is
port(
     RST      : in    Std_logic;
     CLK      : in    Std_logic;
      
    SECONDS_IN   : in    Std_logic_vector(5 downto 0);
    MINUTES_IN   : in    Std_logic_vector(5 downto 0);
    HOURS_IN     : in     Std_logic_vector(4 downto 0);
    DAY_IN       : in     Std_logic_vector(5 downto 0);
    MONTH_IN    : in Std_logic_vector(3 downto 0);
    YEAR_IN      : in Std_logic_vector(11 downto 0);

        SET  : in Std_logic;

    SECONDS_OUT   : out    Std_logic_vector(5 downto 0);
    MINUTES_OUT   : out    Std_logic_vector(5 downto 0);
    HOURS_OUT     : out    Std_logic_vector(4 downto 0);
    DAY_OUT       : out    Std_logic_vector(5 downto 0);
    MONTH_OUT    : out    Std_logic_vector(3 downto 0);
    YEAR_OUT      : out    Std_logic_vector(11 downto 0)
  );
end RTC;

набор для ввода и набор для вывода. А по другому никак?

Сообщение отредактировал Jenya7 - Sep 4 2017, 11:47
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tausinov
сообщение Sep 5 2017, 10:13
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



А зачем преобразования делать в каждой строке? Делаем все необходимые внутренние сигналы - signed/unsigned, а порты - std_logic_vector. Остается лишь в конце сделать out_port <= std_logic_vector(internal_signed);. Единственное, что иногда раздражает - то, что вместо коротеньких SXT/EXT надо лепить resize с кучей преобразований, но это дело привычки.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 5 2017, 12:46
Сообщение #3


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Tausinov @ Sep 5 2017, 13:13) *
А зачем преобразования делать в каждой строке? Делаем все необходимые внутренние сигналы - signed/unsigned, а порты - std_logic_vector. Остается лишь в конце сделать out_port <= std_logic_vector(internal_signed);.

Ну да, так и делаю когда имею дело с шиной данных в блоках DSP. Но для банального счётчика считаю это лишним.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 8 2017, 10:41
Сообщение #4


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(_Anatoliy @ Sep 5 2017, 15:46) *
Ну да, так и делаю когда имею дело с шиной данных в блоках DSP. Но для банального счётчика считаю это лишним.

А я вообще счетчики в отдельных модулях держу. Один раз описал его, отладил и больше к нему не возвращаюсь. Только в параметрах указываю значение максимального счета. Лично я так меньше ошибаюсь при написании проектов
CODE
Код
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;

ENTITY COUNTER_ENA IS
    GENERIC
    (
        MAX_VALUE      : INTEGER := 126                    -- До скольки считает счетчик(от нуля до MAX_VALUE)
    );
    PORT
    (
        CLK                     : IN  STD_LOGIC;
        ENA                     : IN  STD_LOGIC;
        DATA_OUT                : OUT INTEGER RANGE 0 TO MAX_VALUE
    );
END ENTITY;

ARCHITECTURE RTL OF COUNTER_ENA IS
    FUNCTION LOG2 (MAX_VALUE : INTEGER) RETURN INTEGER IS -- Функция вычесления логарифма по основанию 2 для определения разрядности
        VARIABLE CNT    : INTEGER := 0;                   -- Счетчик для подсчета количества делений на 2
        VARIABLE TEMP   : INTEGER := MAX_VALUE + 1;       -- Делимое -  максимальное количество состояний счетчика
    BEGIN
        WHILE (TEMP > 1) LOOP                             -- Пока делимое больше 1 совершаем цикл деления на 2
            CNT  := CNT + 1;                             -- Считаем количество циклов деления
            TEMP := TEMP/2;                               -- Делим число на 2 каждый цикл
        END LOOP;
        RETURN CNT;                                       -- Значение счетчика и есть логарифм
    END LOG2;
  
    SIGNAL COUNTER_INTEGER  : INTEGER RANGE 0 TO MAX_VALUE        := 0;                  -- Счетчик обнуляемый условием максимального счета
    SIGNAL COUNTER_UNSIGNED : UNSIGNED(LOG2(MAX_VALUE)-1 DOWNTO 0)  := (OTHERS => '0');  -- Счетчик с автоматическом обнулени при переполнении
BEGIN

    --================================================================================
==========================
    -- Если максимальное значение счетчика переведенное в двоичное число не состоит из одних только единиц
    -- Значит у нас счетчик обнуляется значением максимального счета т.е до наступления переполнения разрядов
    --================================================================================
==========================
    GEN_RST_COND :  IF ( TO_UNSIGNED(MAX_VALUE,LOG2(MAX_VALUE) ) /= ( LOG2(MAX_VALUE)-1 DOWNTO 0 => '1' ) ) GENERATE
        CNT_PROC : PROCESS
        (
            CLK
        )
        BEGIN
            IF (RISING_EDGE(CLK)) THEN          
                IF (ENA = '1') THEN                                -- Сигнал разрешения работы счетчика
                    IF (COUNTER_INTEGER = MAX_VALUE) THEN          -- При наступлении максимального значения счетчика
                        COUNTER_INTEGER <= 0;                      -- Обнулим его
                    ELSE
                        COUNTER_INTEGER <= COUNTER_INTEGER + 1;    -- Иначе будем его инкрементировать
                    END IF;
                END IF;
            END IF;
        END PROCESS;              
        DATA_OUT <= COUNTER_INTEGER;
    END GENERATE;
    
    --================================================================================
==========================
    -- Если максимальное значение счетчика это (2**N - 1)
    -- Значит у нас полный счетчик, который обнуляется переполнением разрядов
    --================================================================================
==========================
    GEN : FOR I IN 0 TO 30 GENERATE
        OVERFLOW :  IF (2**I-1 = MAX_VALUE) GENERATE  
            CNT_PROC : PROCESS
            (
                CLK
            )
            BEGIN    
                IF (RISING_EDGE(CLK)) THEN      
                    IF (ENA = '1') THEN                               -- Сигнал разрешения работы счетчика
                        COUNTER_UNSIGNED <= COUNTER_UNSIGNED + "1";   -- Инкрементируем его каждый такт
                    END IF;
                END IF;
            END PROCESS;  
            DATA_OUT <= TO_INTEGER(COUNTER_UNSIGNED);
        END GENERATE;
    END GENERATE;
END ARCHITECTURE;
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Модуль RTC.   Sep 4 2017, 11:44
- - Flip-fl0p   Цитата(Jenya7 @ Sep 4 2017, 14:44) Сделал...   Sep 4 2017, 11:53
|- - Jenya7   Цитата(Flip-fl0p @ Sep 4 2017, 16:53...   Sep 4 2017, 11:57
|- - Flip-fl0p   Цитата(Jenya7 @ Sep 4 2017, 14:57) послед...   Sep 4 2017, 12:02
|- - Jenya7   Цитата(Flip-fl0p @ Sep 4 2017, 17:02...   Sep 4 2017, 12:04
- - Tausinov   Цитата(Jenya7 @ Sep 4 2017, 14:44) Сделал...   Sep 4 2017, 12:42
|- - Jenya7   Цитата(Tausinov @ Sep 4 2017, 17:42) Спос...   Sep 4 2017, 13:27
|- - Maverick   Цитата(Jenya7 @ Sep 4 2017, 16:27) хотело...   Sep 4 2017, 14:01
|- - Jenya7   Цитата(Maverick @ Sep 4 2017, 19:01) чем ...   Sep 4 2017, 14:10
|- - Inanity   Цитата(Jenya7 @ Sep 4 2017, 17:10) железо...   Sep 4 2017, 14:43
|- - Jenya7   Цитата(Inanity @ Sep 4 2017, 19:43) Будьт...   Sep 4 2017, 14:51
|- - Tausinov   Цитата(Jenya7 @ Sep 4 2017, 17:51) Кодfun...   Sep 4 2017, 15:19
|- - Jenya7   Цитата(Tausinov @ Sep 4 2017, 20:19) Возь...   Sep 4 2017, 15:29
|- - Tausinov   Цитата(Jenya7 @ Sep 4 2017, 18:29) так то...   Sep 4 2017, 15:31
|- - Jenya7   Цитата(Tausinov @ Sep 4 2017, 20:31) Ага,...   Sep 4 2017, 15:42
|- - Flip-fl0p   Кодuse IEEE.STD_LOGIC_UNSIGNED.ALL; Уберите её, он...   Sep 4 2017, 16:41
||- - _Anatoliy   Цитата(Flip-fl0p @ Sep 4 2017, 19:41...   Sep 5 2017, 08:20
||- - Flip-fl0p   Так а вы счетчик объявите как тип UNSIGNED и тогда...   Sep 5 2017, 08:43
||- - _Anatoliy   Цитата(Flip-fl0p @ Sep 5 2017, 11:43...   Sep 5 2017, 08:50
|||- - Flip-fl0p   Цитата(_Anatoliy @ Sep 5 2017, 11:50) В т...   Sep 5 2017, 09:03
|||- - _Anatoliy   Цитата(Flip-fl0p @ Sep 5 2017, 12:03...   Sep 5 2017, 09:25
|||- - Flip-fl0p   Цитата(_Anatoliy @ Sep 5 2017, 12:25) То...   Sep 5 2017, 09:42
||- - andrew_b   Цитата(Flip-fl0p @ Sep 5 2017, 11:43...   Sep 5 2017, 09:55
||- - _Anatoliy   Цитата(andrew_b @ Sep 5 2017, 12:55) Когд...   Sep 5 2017, 10:00
||- - Flip-fl0p   Цитата(andrew_b @ Sep 5 2017, 12:55) Когд...   Sep 5 2017, 10:12
|- - andrew_b   Цитата(Jenya7 @ Sep 4 2017, 18:42) Код...   Sep 5 2017, 05:26
|- - Jenya7   Цитата(andrew_b @ Sep 5 2017, 11:26) Хоте...   Sep 5 2017, 06:21


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 03:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01526 секунд с 7
ELECTRONIX ©2004-2016