npu3pak13 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба День добрый всем. Не пинайте сразу, только начал освоение VHDL, а спросить не у кого. Работаю в Active HDL 10.2. Проблема такая : создал компонент - синхронный счетверённый Д-триггер с общим клоком, всё компилируется и работает. Создаю в том же проекте другой компонент - в основе тот-же 4-Д-триггер с обвеской простой логикой - всё компилится, но при симуляции - неопределённое состояние выходов, т.е. не работает. В чём может быть ошибка? вроде же создают многокомпонентные схемы? или надо другой проект создавать и в него добавлять компонент? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Телепаты уже в летних отпусках. Покажите код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Телепаты уже в летних отпусках. Покажите код. Да там особо нет текста Вот ещё схема для понимания Да там особо нет текста Вот циклограмма 3REG.vhd.pdf 3REG_SCH.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Приветствую! Да там особо нет текста Вот ещё схема для понимания Ну и кто за Вас будет ресетить логику в начале симуляции?. По умолчанию все регистры при старте симуляции ставятся в U состояние (в отличии от реального железа) - это помогает при разработку отслеживать некорректную инициализацию дизайна. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Приветствую! Ну и кто за Вас будет ресетить логику в начале симуляции?. По умолчанию все регистры при старте симуляции ставятся в U состояние (в отличии от реального железа) - это помогает при разработку отслеживать некорректную инициализацию дизайна. Удачи! Rob. Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: с 1 тактом первый триггер принимает состояние 1 со 2 тактом - второй 1, первый ноль, и т.д. бегающая единичка Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: с 1 тактом первый триггер принимает состояние 1 со 2 тактом - второй 1, первый ноль, и т.д. бегающая единичка Добавил сброс вместо земли - не поменялось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Приветствую! Ресет отключен пока в процессе отладки, по логике схема должна работать примерно так: ... Это понятно что по логику - но по факту я вижу схему которая может работать (в симе) как минимум 17-ю разными вариантами в зависимости от того как изначально инициализируются регистры. Один из этих вариантов Вы и видите. Не надейтесь на удачу (даже наоборот - ожидайте неприятностей) - и делайте так чтобы всегда быть уверенным в контроле состояния дизайна. P.S. Какой тощий сброс :( аш жалко. На тригграх ресет какой ? асинхронный или синхронный? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Приветствую! Это понятно что по логику - но по факту я вижу схему которая может работать (в симе) как минимум 17-ю разными вариантами в зависимости от того как изначально инициализируются регистры. Один из этих вариантов Вы и видите. Не надейтесь на удачу (даже наоборот - ожидайте неприятностей) - и делайте так чтобы всегда быть уверенным в контроле состояния дизайна. P.S. Какой тощий сброс :( аш жалко. На тригграх ресет какой ? асинхронный или синхронный? Удачи! Rob. Простой триггер: if ( RS='1') then FF <= '0' ; elsif ( CLK'event and CLK = '1' ) then FF <= D after 1 ns ; end if; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 мая, 2018 Опубликовано 8 мая, 2018 · Жалоба Простой триггер: if ( RS='1') then FF <= '0' ; elsif ( CLK'event and CLK = '1' ) then FF <= D after 1 ns ; end if; Во-первых after 1 ns; не синтезируется. Во-вторых у вас триггер никак не инициализирован. Либо вручную при объявлении сигнала (или порта) присвойте начальное значение, либо сначала сбрасывайте триггер. Хотя это Вам говорили. Что Вы ещё хотите услышать я не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Примерно понял. Но, в примерах триггера не делают предварительную установку значения, и всё работает.. И получается что сигнал сброса, генерируемый в начале тестирования, не устанавливает в ноль, а надо делать заранее установку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Приветстувую! Примерно понял. Но, в примерах триггера не делают предварительную установку значения, и всё работает.. И получается что сигнал сброса, генерируемый в начале тестирования, не устанавливает в ноль, а надо делать заранее установку? Это значит что у Вас что то не так либо с сигналом сброса либо с описанием триггера. Попробуйте сделать сброс шириной в пару тактов CLK, Ну и описание триггера целиком покажите. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Примерно понял. Но, в примерах триггера не делают предварительную установку значения, и всё работает.. Потому-что многим триггерам предварительная установка не требуется. Например есть выход 8-разрядного регистра data_out. И есть сигнал валидности этих данных data_valid. Так вот начальная установка регистра data_out не требуется. А вот сигнал валидности data_valid желательно как-либо установить в начальное значение. Либо путем начального сброса, либо начальной установкой схемы. Более того не все FPGA поддерживают возможность начальной установки значения, на сколько я помню FPGA фирмы Actel не умеют инициализировать триггеры каким-то значением. А некоторые FPGA могут затребовать дополнительных ресурсов для начальной установки значения. Например в чипах Altera cyclone C5SEMA5F31C6 установка начального значения триггера в нули - ресурсов не требует. А вот установка в единицы - требует дополнительный слой логики, что может иметь значение на проектах, критичных к максимальным частотам. И получается что сигнал сброса, генерируемый в начале тестирования, не устанавливает в ноль, а надо делать заранее установку? Не так. Правильно сделанный сброс - устанавливает значение триггера в то значение, в которое Вы его сбрасываете. Ключевая фраза - правильно сделанный сброс. А как делать правильно - зависит от проекта. У меня обычно присутствует начальный сброс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Хорошо, но в данном случае что надо первоначально обнулять? D0...3? Q0...3? FF0...3? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Приветствую! Хорошо, но в данном случае что надо первоначально обнулять? D0...3? Q0...3? FF0...3? Ресетить всегда нужно источник сигнала. Что является источником в Вашей схеме? - выход триггеров. Еще раз повторю - если при подачи на вход сброса RS Ваш триггер не сбрасывается - это значит что что то не так и дальнейшие гадания ни к чему не приведут. Надо для начала разобраться с одним триггером - почему он не сбрасывается? Просимулируйте один триггер - выведите на диаграмму все сигналы из с него (или изнутри 4DF) и посмотрите что и как. Судя по куску кода триггера он асинхронный - может Вы не добавили RS в список чувствительности процесса? P.S. Ну и когда с триггером разберетесь - ресет дизайна нужно делать так чтобы всегда приводить схему в нужное состояние - в Вашей схеме это не так - от ширины импульса на входе RST будет зависть что запишется в регистр и соответственно бегущую единицу Вы получите не всегда. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Хорошо, но в данном случае что надо первоначально обнулять? D0...3? Q0...3? FF0...3? У вас внутренние состояния регистров U - т.е. неопределены, и из-за того, что на первый из регистров подается выход последнего прооренный со входным сигналом, это самое неопределенное состояние так и будет бесконечно на выходе каждого из регистров. Выше вам уже правильно посоветовали либо задать изначальные состояния этих самых регистров, либо устанавливать их по сбросу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба И вопрос остался - надо делать отдельный проект для каждого уровня или в одном можно, сейчас вот так Приветствую! Ресетить всегда нужно источник сигнала. Что является источником в Вашей схеме? - выход триггеров. Еще раз повторю - если при подачи на вход сброса RS Ваш триггер не сбрасывается - это значит что что то не так и дальнейшие гадания ни к чему не приведут. Надо для начала разобраться с одним триггером - почему он не сбрасывается? Просимулируйте один триггер - выведите на диаграмму все сигналы из с него (или изнутри 4DF) и посмотрите что и как. Судя по куску кода триггера он асинхронный - может Вы не добавили RS в список чувствительности процесса? P.S. Ну и когда с триггером разберетесь - ресет дизайна нужно делать так чтобы всегда приводить схему в нужное состояние - в Вашей схеме это не так - от ширины импульса на входе RST будет зависть что запишется в регистр и соответственно бегущую единицу Вы получите не всегда. Удачи! Rob. Вот симуляция триггера - всё работает У вас внутренние состояния регистров U - т.е. неопределены, и из-за того, что на первый из регистров подается выход последнего прооренный со входным сигналом, это самое неопределенное состояние так и будет бесконечно на выходе каждого из регистров. Выше вам уже правильно посоветовали либо задать изначальные состояния этих самых регистров, либо устанавливать их по сбросу. То есть если на элемент ИЛИ на один вход подаётся 1 а другой - неопределённый - логика не сработает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться