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

 
 
> Подскажите как оптимальнее (fmax) реализовать на ПЛИС
novartis
сообщение Mar 21 2017, 14:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Есть поток данных 32 бит шириной. Данные в нем передаются по специфическому протоколу.
Поток характеризуется тремя наборами бит:
State - лежит в диапазоне от 1 до 20. Выделил 5 бит на этот сигнал.
Switch - четыре бита, возможны все варианты от 0 до 15
Skip - 15 бит. Если младший бит единица, то все остальные тоже единицы. Если второй бит - единица, то с 3 по 15 бит - тоже единицы. И так далее. Такая треугольная матрица получается.

На каждом такте из входного потока я вытаскиваю Switch (это старшие биты байт).
Еще если State = 1, то я переопределяю вектор Skip на основе принятого слова из потока данных.

Итак на каждом такте мне нужно перерасчитать State.

Если делать в лоб и перебирать все возможные состояния, то у меня есть 5 + 4 = 9 бит, которые могут быть любыми, а это 512 состояний. И еще есть вектор skip, который определяет еще 15 состояний.
И того 512*15 = 7680. Это получается нужно написать 7680 ифов (if ... elsif ... elsif ... .... else ...).

За несколько дней написал половину. Скомпилил. Не прохожу по частоте. Частота достаточно высокая (300 МГц, Аррия 10), понизить ее нельзя.
Если делать дальше, то еще хуже будет.

Сейчас думаю, как это можно реализовать по другому.
Буду признателен за любые советы.



Вот смотрю я на расчет CRC32, к примеру один из битов новой crc рассчитывается так:
newcrc(0) := d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(6) xor c(9) xor c(10) xor c(12) xor c(16) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31);
d - это данные, c - это предыдущая crc.
И в том же духе остальные 31 бит.
Может можно как то также (мысли вслух)?



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
novartis
сообщение Mar 21 2017, 15:45
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Цитата
автомат всего с 32 состояниями (State 5 bit) и 4 + 4 входами (Switch + FindFirstOne(Skip) )

Может я чего то не понимаю.
На каждом состоянии автомата (State 5 bit) есть сигнал с 4 + 4 входа (Switch + FindFirstOne(Skip) ).
То есть у меня 32 состояния автомата, на каждом из которых мне нужно дешифрировать сигнал с входа (8 бит). Причем дешифраторы разные, для каждого из 32 состояний свой дешифратор.
5+8 = 13 => 2**13 = 8192. Все равно придется стать героем.

Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 21 2017, 16:00
Сообщение #3


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(novartis @ Mar 21 2017, 18:45) *
Может я чего то не понимаю.
...
5+8 = 13 => 2**13 = 8192. Все равно придется стать героем.

Ну если Вам так хочется - но может будет проще стать космонавтом sm.gif

Все зависит от того что надо получить на выходе, от алгоритма протокола.
Ведь состояний то всего 32 значит и переходов на них столько же.
Значит надо смотреть как объединять логику на входах в зависимости протокола.
В простейшем варианте используя casex можно будет уменьшить Ваши героические достижения.

Удачи! Rob.

P.S. Кажется мне что Вы парсер для FAST ваяете sm.gif

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 16:51
Рейтинг@Mail.ru


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