Перейти к содержанию
    

Цифровой автомат не успевает за такт выполнить операцию

Недавно начал изучение VHDL.

Задачу поставил такую: создать конечный автомат, который приходящий сигнал (16 бит) сравнивает с некоторой константой, если удовлетворяет условию, то считывает 32-х разрядное значение из памяти и прибавляет к нему произведение входного сигнала (16 бит) и счетчика (10 бит). Затем автомат записывает полученное значение в память.

Работать приходится с ПЛИС Microsemi (Actel) ProASIC3, аппаратных умножителей и DSP блоков нет.

На описанные мероприятия отводится строго 200 нс. Тактовую частоту выбрал 60 МГц, те на все операции 12 тактов.

Первый анализ показал, что выполнение сложения необходимо порядка 80 нс, на произведение около 25 нс. За такт не получается выполнить операции.

Подскажите как поступить в данной ситуации?

Можно ли с помощью счетчика не менять стадию автомата в течении 5 тактов и будет ли правильно работать при этом логика перемножителя?

Или надо разбивать логику перемножителя и сумматора явно на такты?

 

Порекомендуете хорошую литературу по VHDL касающуюся принципам построения автоматов и конвеерных схем. Желательно на русском, но можно и на английском.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста

http://www.kit-e.ru/articles/circuit/2009_04_140.php

может немного не то, что вы хотите, но все же.

 

Автомат - это система состояний, меняющихся исходя из каких-либо условий.

т.е. автомат из состояния N-1 входит в состояние N, в нем начинается ваше требуемое описание, по выполнению всех операций, вы переводите автомат в состояние N+1. Это будет внутреннее условие.

Да, требуемое описание, тоже можно описать автоматом.

ну это как простой пример.

 

Опишите, как у вас реализуются переходы в автомате, какой логикой вы все описываете, а то так не очень понятно.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опишите, как у вас реализуются переходы в автомате, какой логикой вы все описываете, а то так не очень понятно.

Я собирался использовать классический автомат Мура. С двумя процессами: в одном смена состояний, а в другом описание состояний.

Раньше использовал атоматы. Но столкнулся с проблемой вычислений. С одной стороны нельзя уменьшать тактовую частоту потомучто надо выполнить много операций не требующих много времени(чтение, запись в память, наращивание счетчика и тд), с другой стороны присутствуют операции (сложение и умножение) которые не успевают выполниться за выбранное время такта.

В литературе не нашел внятно описанных подходов к описанию подобных ситуаций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я собирался использовать классический автомат Мура. С двумя процессами: в одном смена состояний, а в другом описание состояний.

Раньше использовал атоматы. Но столкнулся с проблемой вычислений. С одной стороны нельзя уменьшать тактовую частоту потомучто надо выполнить много операций не требующих много времени(чтение, запись в память, наращивание счетчика и тд), с другой стороны присутствуют операции (сложение и умножение) которые не успевают выполниться за выбранное время такта.

В литературе не нашел внятно описанных подходов к описанию подобных ситуаций.

Возможно, я опять вас не правильно понял, но может как-то поможет.

 

Дурацкая идея, но все же.

Описать это состояние автоматом, со стационарными состояниями, как вы выразились "разбейте все на такты"

 

//always@(posedge clk)

case(state_FSM1):
...
state_(n)_FSM1: 
    begin
    if(!ack)    
        begin
        state_FSM2<=state_FSM2+1;
        case(state_FSM2):
            1:
            2:
            3:
            ...
            n:     begin 
                ack<=1;
                state_FSM2=0;
                end
        endcase
        end
    else
        begin
        state_FSM1<=state_(n+1)_FSM1;
        ack<=0;
        end
    end
...
endcase

 

т.е. переход в автомате1 условный, а переходы в автомате2 по тактам.

на 1 такт вы делаете сложение, и знаете, что оно не успеет сделаться за такт, т.е. 2 такт - пауза, 3 такт - следующее действие.

 

 

 

Изменено пользователем Swup

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с другой стороны присутствуют операции (сложение и умножение) которые не успевают выполниться за выбранное время такта.

Использовать сумматоры с быстрым ускоренным переносом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. переход в автомате1 условный, а переходы в автомате2 по тактам.

на 1 такт вы делаете сложение, и знаете, что оно не успеет сделаться за такт, т.е. 2 такт - пауза, 3 такт - следующее действие.

Один из вопросов так и звучит. Корректно ли делать такие такты-паузы для выполнения операции и как их правильно описать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я так делал, все работало. Описал бы, в данном случае, отсутствием состояния 2. Но так выходит, что автомат не полный, а это достаточно некрасиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

....присутствуют операции (сложение и умножение) которые не успевают выполниться за выбранное время такта.

В литературе не нашел внятно описанных подходов к описанию подобных ситуаций.

 

1) Если между 2 тригерами стоит комбинаторика (умножитель напр.) которая требует более такта то надо использовать CE (Clock enable) входы тригеров, чтобы они переключались медленнее.

Для этого собственно CE и придуманы.

На CE можно подать сигнал с делителя частоты (счётчика).

 

2) Можно итак - увеличить число состояний автомата на время срабатывания комбинаторики (добавить Wait State's)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста

http://www.kit-e.ru/articles/circuit/2009_04_140.php

может немного не то, что вы хотите, но все же.

 

Опишите, как у вас реализуются переходы в автомате, какой логикой вы все описываете, а то так не очень понятно.

ну почему же "не то". Как раз об этом случае я и написал...

Кстати, это же есть и у меня на сайте, в статьях.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Если между 2 тригерами стоит комбинаторика (умножитель напр.) которая требует более такта то надо использовать CE (Clock enable) входы тригеров, чтобы они переключались медленнее.

Простите меня великодушно, но не выдержала душа поэта :cranky: это в каком источнике дается такое ? :wacko:

 

аппаратных умножителей и DSP блоков нет.

Первый анализ показал, что выполнение сложения необходимо порядка 80 нс, на произведение около 25 нс.

если учесть что умножение 16х10 бит требует 10 16 ти битных сумматоров и это у вас работает за 25нс, то сложение 32 х бит не может длиться дольше в 3 раза !!!

 

а лучше всего, если хотите помощи, то функциональную схему в студию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите меня великодушно, но не выдержала душа поэта :cranky: это в каком источнике дается такое ? :wacko:

 

Источник - жизнь.

 

А не уточнители что конкретно Вас смутило?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Источник - жизнь.

 

А не уточнители что конкретно Вас смутило?

Ваша фраза выглядит так : "Нам надо умножитель 180 МГц за такт, но никак не успеваем, давайте подадим на СЕ 90 МГц, пусть считает медленнее и так сойдет"

 

Откуда планируете брать еще требуемые 90 МГц не понятно. Если вы хотели привести решение в контексте ТС, то давайте полное описание решения. Не стоит бросаться такими фразами, вызывает сомнение в адекватности происходящего %)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваша фраза выглядит так : "Нам надо умножитель 180 МГц за такт, но никак не успеваем, давайте подадим на СЕ 90 МГц, пусть считает медленнее и так сойдет"

 

Откуда планируете брать еще требуемые 90 МГц не понятно. Если вы хотели привести решение в контексте ТС, то давайте полное описание решения. Не стоит бросаться такими фразами, вызывает сомнение в адекватности происходящего %)

 

1) Это собственно прямой ответ на прямой вопрос начинающего:

"Можно ли с помощью счетчика не менять стадию автомата в течении 5 тактов и будет ли правильно работать при этом логика перемножителя?"

Какой вопрос - такой и ответ....

 

2) Копнём глубжее....

Допустим ну никак не получается комбинаторика короче одного такта (как и есть в начальной постановке задачи).

И ну очень не хочется Wait state's пустышки в красивое описание FSM добавлять.

И при этом надо создать "реально-професиональную" схему, а не тупо тренироваться....

 

Пожалуйста! притянем за уши моё предложение:

- описываем FSM без Wait state's.

- запускаем счётчик синхронно FSM для деления частоты и формирования нужных CE.

- формируем глобальный FSM.CE но... не меандро-подобный а с розрывами где надо умножать.

 

Так устроит?

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Это собственно прямой ответ на прямой вопрос начинающего:

"Можно ли с помощью счетчика не менять стадию автомата в течении 5 тактов и будет ли правильно работать при этом логика перемножителя?"

Какой вопрос - такой и ответ....

 

2) Копнём глубжее....

Допустим ну никак не получается комбинаторика короче одного такта (как и есть в начальной постановке задачи).

И ну очень не хочется Wait state's пустышки в красивое описание FSM добавлять.

И при этом надо создать "реально-професиональную" схему, а не тупо тренироваться....

 

Пожалуйста! притянем за уши моё предложение:

- описываем FSM без Wait state's.

- запускаем счётчик синхронно FSM для деления частоты и формирования нужных CE.

- формируем глобальный FSM.CE но... не меандро-подобный а с розрывами где надо умножать.

 

Так устроит?

Ваше описание в студию....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваше описание в студию....

 

Вас интересует точное решение задачи поставленной в начале или пример описания FSM которая "шагает не на каждом клоке", как я описал принцип?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...