Мы работаем над конвейерным процессором, написанным на VHDL, и у нас есть некоторые проблемы с синхронизацией, синхронизацией и регистрами на симуляторе (код не нужно синтезировать, потому что мы будем запускать его только на симуляторе).Проблемы проектирования и синхронизации трубопроводов
Представьте, мы имеем два этапа процессора, А и В, с регистром трубопровода в середине:
- стадии Процессор А представляет собой комбинаторные и не зависит от часов
- трубопровода регистра R, является зарегистрировать и, следовательно, изменить свое состояние на фронте нарастания часов.
- Этап обработки Б представляет собой сложную стадию и имеет свою собственную машину состояний и, следовательно, изменяет свое состояние и выполняет операции внутри процесса VHDL, управляемые нарастающим фронтом часов.
конфигурация будет выглядеть следующим образом
_______ ___ _______
| | | | | |
---| A |---|R|---| B |---
|_____| |_| |_____|
с этой конфигурацией, существует проблема синхронизации:
- Т = 0: А получает данные, и делает его операции
- t = 1: при нарастающем фронте R обновляет свои данные с выходом A.
- t = 2: при восходящем фронте B получает значения R и обновляет его статус и дает результат.
Мы хотели бы, чтобы B менял свое состояние и генерировал выход при t = 1, но нам также нужен регистр посередине, чтобы сделать работу трубопровода.
Решение заключается в обновлении регистра R на заднем фронте. Но тогда мы предполагаем, что все этапы процессора работают в половине такта, а другая половина немного бесполезна.
Как эта проблема обычно решается в трубопроводах?
Я не упоминал, что это присвоение класса. Спасибо за ответ! – markmb
Ah ok :) Тогда просто используйте A непосредственно в B, минуя R (но все равно используйте зарегистрированное значение для других этапов) – artemonster
Спасибо за ответ! Это может работать в симуляторе (все еще не пробовали). Но, если это должно было быть синтезировано (этого не будет, но мне просто интересно), как бы вы справились с такими глюками в выходных значениях A, которые могут распространяться через байпас в модуль B в середине одного такта cyle? – markmb