|
|
  |
Не работает схема верхнего уровня, Помощь в освоении VHDL |
|
|
|
May 8 2018, 12:43
|

Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439

|
Цитата(andrew_b @ May 8 2018, 15:16)  Телепаты уже в летних отпусках. Покажите код. Да там особо нет текста Вот ещё схема для понимания Цитата(призрак @ May 8 2018, 15:37)  Да там особо нет текста
Вот циклограмма
Эскизы прикрепленных изображений
|
|
|
|
|
May 8 2018, 12:51
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(призрак @ May 8 2018, 15:43)  Да там особо нет текста
Вот ещё схема для понимания Ну и кто за Вас будет ресетить логику в начале симуляции?. По умолчанию все регистры при старте симуляции ставятся в U состояние (в отличии от реального железа) - это помогает при разработку отслеживать некорректную инициализацию дизайна. Удачи! Rob.
|
|
|
|
|
May 8 2018, 13:10
|

Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439

|
Цитата(RobFPGA @ May 8 2018, 15:51)  Приветствую!
Ну и кто за Вас будет ресетить логику в начале симуляции?. По умолчанию все регистры при старте симуляции ставятся в U состояние (в отличии от реального железа) - это помогает при разработку отслеживать некорректную инициализацию дизайна.
Удачи! Rob. Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: с 1 тактом первый триггер принимает состояние 1 со 2 тактом - второй 1, первый ноль, и т.д. бегающая единичка Цитата(призрак @ May 8 2018, 15:55)  Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: с 1 тактом первый триггер принимает состояние 1 со 2 тактом - второй 1, первый ноль, и т.д. бегающая единичка Добавил сброс вместо земли - не поменялось
Эскизы прикрепленных изображений
|
|
|
|
|
May 8 2018, 13:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(призрак @ May 8 2018, 15:55)  Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: ... Это понятно что по логику - но по факту я вижу схему которая может работать (в симе) как минимум 17-ю разными вариантами в зависимости от того как изначально инициализируются регистры. Один из этих вариантов Вы и видите. Не надейтесь на удачу (даже наоборот - ожидайте неприятностей) - и делайте так чтобы всегда быть уверенным в контроле состояния дизайна. P.S. Какой тощий сброс  аш жалко. На тригграх ресет какой ? асинхронный или синхронный? Удачи! Rob.
|
|
|
|
|
May 8 2018, 13:21
|

Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439

|
Цитата(RobFPGA @ May 8 2018, 16:13)  Приветствую! Это понятно что по логику - но по факту я вижу схему которая может работать (в симе) как минимум 17-ю разными вариантами в зависимости от того как изначально инициализируются регистры. Один из этих вариантов Вы и видите. Не надейтесь на удачу (даже наоборот - ожидайте неприятностей) - и делайте так чтобы всегда быть уверенным в контроле состояния дизайна. P.S. Какой тощий сброс  аш жалко. На тригграх ресет какой ? асинхронный или синхронный? Удачи! Rob. Простой триггер: if ( RS='1') then FF <= '0' ; elsif ( CLK'event and CLK = '1' ) then FF <= D after 1 ns ; end if;
|
|
|
|
|
May 8 2018, 14:53
|

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

|
Цитата(призрак @ May 8 2018, 16:21)  Простой триггер: if ( RS='1') then FF <= '0' ; elsif ( CLK'event and CLK = '1' ) then FF <= D after 1 ns ; end if; Во-первых Код after 1 ns; не синтезируется. Во-вторых у вас триггер никак не инициализирован. Либо вручную при объявлении сигнала (или порта) присвойте начальное значение, либо сначала сбрасывайте триггер. Хотя это Вам говорили. Что Вы ещё хотите услышать я не знаю.
|
|
|
|
|
May 10 2018, 06:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветстувую! Цитата(призрак @ May 10 2018, 09:22)  Примерно понял. Но, в примерах триггера не делают предварительную установку значения, и всё работает.. И получается что сигнал сброса, генерируемый в начале тестирования, не устанавливает в ноль, а надо делать заранее установку? Это значит что у Вас что то не так либо с сигналом сброса либо с описанием триггера. Попробуйте сделать сброс шириной в пару тактов CLK, Ну и описание триггера целиком покажите. Удачи! Rob.
|
|
|
|
|
May 10 2018, 06:42
|

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

|
Цитата(призрак @ May 10 2018, 09:22)  Примерно понял. Но, в примерах триггера не делают предварительную установку значения, и всё работает.. Потому-что многим триггерам предварительная установка не требуется. Например есть выход 8-разрядного регистра data_out. И есть сигнал валидности этих данных data_valid. Так вот начальная установка регистра data_out не требуется. А вот сигнал валидности data_valid желательно как-либо установить в начальное значение. Либо путем начального сброса, либо начальной установкой схемы. Более того не все FPGA поддерживают возможность начальной установки значения, на сколько я помню FPGA фирмы Actel не умеют инициализировать триггеры каким-то значением. А некоторые FPGA могут затребовать дополнительных ресурсов для начальной установки значения. Например в чипах Altera cyclone C5SEMA5F31C6 установка начального значения триггера в нули - ресурсов не требует. А вот установка в единицы - требует дополнительный слой логики, что может иметь значение на проектах, критичных к максимальным частотам. Цитата И получается что сигнал сброса, генерируемый в начале тестирования, не устанавливает в ноль, а надо делать заранее установку? Не так. Правильно сделанный сброс - устанавливает значение триггера в то значение, в которое Вы его сбрасываете. Ключевая фраза - правильно сделанный сброс. А как делать правильно - зависит от проекта. У меня обычно присутствует начальный сброс.
|
|
|
|
|
May 10 2018, 08:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(призрак @ May 10 2018, 11:26)  Хорошо, но в данном случае что надо первоначально обнулять? D0...3? Q0...3? FF0...3? Ресетить всегда нужно источник сигнала. Что является источником в Вашей схеме? - выход триггеров. Еще раз повторю - если при подачи на вход сброса RS Ваш триггер не сбрасывается - это значит что что то не так и дальнейшие гадания ни к чему не приведут. Надо для начала разобраться с одним триггером - почему он не сбрасывается? Просимулируйте один триггер - выведите на диаграмму все сигналы из с него (или изнутри 4DF) и посмотрите что и как. Судя по куску кода триггера он асинхронный - может Вы не добавили RS в список чувствительности процесса? P.S. Ну и когда с триггером разберетесь - ресет дизайна нужно делать так чтобы всегда приводить схему в нужное состояние - в Вашей схеме это не так - от ширины импульса на входе RST будет зависть что запишется в регистр и соответственно бегущую единицу Вы получите не всегда. Удачи! Rob.
|
|
|
|
|
May 10 2018, 08:51
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(призрак @ May 10 2018, 11:26)  Хорошо, но в данном случае что надо первоначально обнулять? D0...3? Q0...3? FF0...3? У вас внутренние состояния регистров U - т.е. неопределены, и из-за того, что на первый из регистров подается выход последнего прооренный со входным сигналом, это самое неопределенное состояние так и будет бесконечно на выходе каждого из регистров. Выше вам уже правильно посоветовали либо задать изначальные состояния этих самых регистров, либо устанавливать их по сбросу.
|
|
|
|
|
May 10 2018, 09:06
|

Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439

|
И вопрос остался - надо делать отдельный проект для каждого уровня или в одном можно, сейчас вот так  Цитата(RobFPGA @ May 10 2018, 11:50)  Приветствую!
Ресетить всегда нужно источник сигнала. Что является источником в Вашей схеме? - выход триггеров.
Еще раз повторю - если при подачи на вход сброса RS Ваш триггер не сбрасывается - это значит что что то не так и дальнейшие гадания ни к чему не приведут. Надо для начала разобраться с одним триггером - почему он не сбрасывается? Просимулируйте один триггер - выведите на диаграмму все сигналы из с него (или изнутри 4DF) и посмотрите что и как. Судя по куску кода триггера он асинхронный - может Вы не добавили RS в список чувствительности процесса?
P.S. Ну и когда с триггером разберетесь - ресет дизайна нужно делать так чтобы всегда приводить схему в нужное состояние - в Вашей схеме это не так - от ширины импульса на входе RST будет зависть что запишется в регистр и соответственно бегущую единицу Вы получите не всегда.
Удачи! Rob.  Вот симуляция триггера - всё работает Цитата(Tausinov @ May 10 2018, 11:51)  У вас внутренние состояния регистров U - т.е. неопределены, и из-за того, что на первый из регистров подается выход последнего прооренный со входным сигналом, это самое неопределенное состояние так и будет бесконечно на выходе каждого из регистров. Выше вам уже правильно посоветовали либо задать изначальные состояния этих самых регистров, либо устанавливать их по сбросу. То есть если на элемент ИЛИ на один вход подаётся 1 а другой - неопределённый - логика не сработает?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|