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

 
 
7 страниц V  « < 5 6 7  
Reply to this topicStart new topic
> FAQ по языкам описания аппаратуры
Flip-fl0p
сообщение Nov 17 2016, 07:24
Сообщение #91


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

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



Цитата(andrew_b @ Nov 17 2016, 10:03) *
В операторе case вы обязаны перечислить все возможные состояния. Если в каких-то из них ничего делать не надо, то и используется null.
Код
        
             CASE PRESS_STATE IS

                 WHEN IDLE               =>  NULL;                     -- В состоянии ожидания ничего не делаем

                                            
                 WHEN WAIT_FIFO_READING  =>  NULL;                      -- В состоянии ожидания опустошения FIFO буфера мтарицы ничего не  делаем

                 WHEN OTHERS                     =>  NULL;

Тут idle и wait_fifo_reading можно опустить, потому что есть others с таким же (без)действием.

Спасибо. Забыл, что их можно опустить. Просто к чему я задал вопрос:
Я ведь могу задать так:
Код
WHEN OTHERS    =>
        REQ_RD            <= '0';                                     -- По умолчанию нет запроса на чтение
        REQ_WR            <= '0';                                     -- По умолчанию нет запроса на чтение
        CNT_ENA           <= '0';                                     -- Работа счетчиков запрещена
        RESET_ALL_COUNTER <= '0';

По сути ничего не меняется. Quartus количество ячеек не меняет. Где-то в книге читал (но не помню какой), что оператор NULL надо применять о большой осторожностью. Но вот больше ничего конкретного, чего надо остерегаться, написано не было. Вот и хотелось бы разобраться, а так ли страшен черт как его малюют ?

Сообщение отредактировал Flip-fl0p - Nov 17 2016, 07:25
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Nov 25 2016, 08:18
Сообщение #92


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

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



Добрый день, уважаемые форумчане.

Не могли бы Вы мне подсказать один момент:
Допустим у меня есть рабочий проект UART приёмника, состоящий из нескольких более мелких модулей. К примеру все файлы проекта UART приёмника расположенный папке С:\UART_RECEIVER
Я хочу применить этот модуль в своем проекте MY_PROJECT. К примеру он будет расположен в папке С:\MY_PROJECT
Когда я компилирую проект MY_PROJECT мне приходится чтобы Quartus не ругался:
1. Закинуть UART приёмника в папку с проектом MY_PROJECT т.е. С:\MY_PROJECT\UART_RECEIVER
2. Далее обвить проект UART в проекте верхнего уровня MY_PROJECT при помощи ENTITY WORK.UART
3. И каждый файл проекта UART добавить в текущий проект MY_PROJECT т.е для каждого файла выполнить File --> open затем project --> add curent file to project

А можно ли как-то упростить процедуру прикрепления модуля UART приёмника ?
Пытался по-по всякому объявить его при помощи директивы USE. Но Quartus меня не понял....


Go to the top of the page
 
+Quote Post
andrew_b
сообщение Nov 25 2016, 08:37
Сообщение #93


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

Группа: Свой
Сообщений: 1 724
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Flip-fl0p @ Nov 25 2016, 11:18) *
Пытался по-по всякому объявить его при помощи директивы USE.
Причём тут use? Use используется для модулей уже готовой библиотеки. Для вашего модуля нужно сделать отдельную библиотеку для Квартуса. Как это сделать и можно ли это сделать в принципе, я не знаю.
Наверное, как-то это можно сделать через файл qip, как для ядер.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 10 2017, 06:43
Сообщение #94


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

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



Стыдно признаться, но у меня сейчас каша в голове. Собственно никак не могу понять смысл простейшей терминологии:
Большинство авторов книг по VHDL пишут, что есть три стиля описания схем:
- Структурное
- Поведенческое
- Потоковое
Что такое структурное описание вопросов не возникает.
А вот в чём разница между потоковым описанием и поведенческим в книгах толком и не раскрыта. Никак не могу уловить суть. Хотя это знание и никак не влияет на конечный результат, но хочется понимать какой смысл заложен в эти фразы.

Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Jan 10 2017, 07:15
Сообщение #95


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



Потоковое описание (RTL) должно быть синтезопригодным, а поведенческое содержит несинтезируемые конструкции и используется для верификации.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 10 2017, 07:22
Сообщение #96


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

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



Цитата(Poluektovich @ Jan 10 2017, 10:15) *
Потоковое описание (RTL) должно быть синтезопригодным, а поведенческое содержит несинтезируемые конструкции и используется для верификации.

Неужели так просто ? wacko.gif
Go to the top of the page
 
+Quote Post
Fitc
сообщение Jan 11 2017, 20:35
Сообщение #97


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 21-10-11
Пользователь №: 67 894



Цитата(Flip-fl0p @ Jan 10 2017, 09:43) *
Стыдно признаться, но у меня сейчас каша в голове. Собственно никак не могу понять смысл простейшей терминологии:
Большинство авторов книг по VHDL пишут, что есть три стиля описания схем:
- Структурное
- Поведенческое
- Потоковое
Что такое структурное описание вопросов не возникает.
А вот в чём разница между потоковым описанием и поведенческим в книгах толком и не раскрыта. Никак не могу уловить суть. Хотя это знание и никак не влияет на конечный результат, но хочется понимать какой смысл заложен в эти фразы.

Советую почитать главу 2 документации по Yosys там довольно подробно расписано про разницу в данных стилях. Там это называется уровнями абстракции: поведенческий (Behavioural Level) и RTL-уровень рассматриваются с точки зрения синтеза.
http://www.clifford.at/yosys/files/yosys_manual.pdf

Сообщение отредактировал Fitc - Jan 11 2017, 20:36
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 18 2017, 10:20
Сообщение #98


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

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



Возник маленький вопрос при написании тестов на VHDL. А как заставить условие выполняться только один раз ?
Например у меня есть кусок кода тестбенча:
Код
    COUNTER_PROC : PROCESS
    (
        CLK
    )
        VARIABLE COUNTER : INTEGER RANGE 0 TO 15;
    BEGIN
        IF (RISING_EDGE(CLK)) THEN
            IF (COUNTER = 15) THEN
                COUNTER := 0;
            ELSE
                COUNTER := COUNTER + 1;
            END IF;
        END IF;
        
        IF (COUNTER = 14) THEN
            LOAD_DATA <= "0111";
            LOAD_ENA  <= '1';
        ELSE
            LOAD_DATA <= (OTHERS => '0');
            LOAD_ENA  <= '0';
        END IF;

    END PROCESS;

А если мне надо, чтобы данный процесс выполнился только один раз, как мне быть ?
Я придумал вариант, что когда счётчик досчитал до конца он зацикливается, но мне этот вариант не нравится. Такое чувство, что можно описать как-то красивее, правильнее.
Код
        IF (RISING_EDGE(CLK)) THEN
            IF (COUNTER = 15) THEN
                COUNTER := 15;
            ELSE
                COUNTER := COUNTER + 1;
            END IF;
        END IF;

Решение ждать конкретное время:
Код
WAIT FOR 780 ns;
Выглядит чуть более красиво, мне как-то не симпатизирует, поскольку не хочу заморачиваться с подсчётом времени и подстановкой в нужное мне время нужных значений сигналов.

Сообщение отредактировал Flip-fl0p - Jan 18 2017, 10:24
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jan 18 2017, 10:55
Сообщение #99


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

Группа: Свой
Сообщений: 1 724
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



wait без указания времени будет ждать вечность.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 18 2017, 11:29
Сообщение #100


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

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



Цитата(andrew_b @ Jan 18 2017, 13:55) *
wait без указания времени будет ждать вечность.

Спасибо ! Забыл, что можно оператор wait использовать...
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 13 2017, 06:31
Сообщение #101


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

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



А можно ли как-то значение типа STD_LOGIC_VECTOR вывести на консоль Modelsim'a простыми способом ? Может есть какая хитрая библиотека для этого ? На данный момент не вижу альтернатив, кроме как написать собственную функцию для преобразования STD_LOGIC_VECTOR ----> STRING, что делать не очень хочется...
UPD 12:00
Отвечу сам на свой вопрос.
Для того, чтобы напечатать значение STD_LOGIC_VECTOR в консоль можно написать следующее:
Код
    PRINTING_SLV_TO_CONSOLE : PROCESS
    (
        CLOCKx7
    )
    BEGIN
        IF RISING_EDGE(CLOCKX7) THEN                     -- Печатаем значение вектора по каждому фронту частоты CLOCKx7
            FOR i IN (DATA_REG'LENGTH-1) DOWNTO 0 LOOP   -- Для всех разрядов вектора DATA_REG
                REPORT STD_LOGIC'IMAGE(DATA_REG(i));     -- Выводим значение каждого разряда начиная со старшего.
            END LOOP;
            REPORT ""&LF;                                -- После того, как все символы вектора напечатали перейдем на новую строку
        END IF;
    END PROCESS;


В итоге на экране консоли будет следующее:
Код
# '0''0''0''0''1''1''0'
# '0''0''0''1''1''0''0'
# '0''0''1''1''0''0''0'
# '0''1''1''0''0''0''0'
# '1''1''0''0''0''0''0'
# '1''0''0''0''0''0''1'
# '0''0''0''0''0''1''1'


На вид не очень красиво, думаю потом подправлю на "красивый" вариант.

Сообщение отредактировал Flip-fl0p - Feb 13 2017, 09:09
Go to the top of the page
 
+Quote Post

7 страниц V  « < 5 6 7
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th March 2017 - 11:16
Рейтинг@Mail.ru


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