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

 
 
> Реализация алгоритма на логически элементах, Есть алгоритм работы. Какие микросхемы выбрать?
arhiv6
сообщение Nov 14 2014, 21:20
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Потребовалось реализовать следующую схему:
Входов 9 штук: clk + a1,a2,a3,a4,b1,b2,b3,b4. Выходов 5 штук c1,c2,c3,c4,c5. Всегда только один из выходов находится в лог 1 (после подачи питания по умолчанию это выход с1). По фронту на входе clk состояние на выходе меняется по следующему алгоритму (перечислены все возможные состояния на входах):
- на на всех входах лог 0 - состояние на выходе не меняется.
- a1 в лог 1 - на выходе произойдёт сдвиг на +1.
- a1,a2 в лог 1 - на выходе произойдёт сдвиг на +2.
- a1,a2,a3 в лог 1 - на выходе произойдёт сдвиг на +3.
- a1,a2,a3,a4 в лог 1 - на выходе произойдёт сдвиг на +4.
- b1 в лог 1 - на выходе произойдёт сдвиг на -1.
- b1,b2 в лог 1 - на выходе произойдёт сдвиг на -2.
- b1,b2,b3 в лог 1 - на выходе произойдёт сдвиг на -3.
- b1,b2,b3,b4 в лог 1 - на выходе произойдёт сдвиг на -4.
Сдвиг на +1 означает, что , например, если лог 1 было на выходе с3, то по фронту на clk на выходе с3 станет лог 0, а на выходе с4 - лог1. Сдвиг нужен без переноса - если, например, лог 1 было на выходе с5, любой сдвиг в + ничего на выходе не изменит.
Вопрос: на каких логически микросхемах (сдвиговые регистры, счётчики и т.п.) можно реализовать такую схему? (микроконтроллер не предлагать sm.gif )


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arhiv6
сообщение Nov 14 2014, 21:30
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Ради 12 ножек? + её программировать ещё надо, а для плис ни разу не писал прошивок. Хочется всё-таки на логике попытаться собрать.

Сообщение отредактировал arhiv6 - Nov 14 2014, 21:30


--------------------
Go to the top of the page
 
+Quote Post
lemorus
сообщение Nov 15 2014, 09:14
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 22-01-14
Из: Нижний Новгород
Пользователь №: 80 151



Цитата(arhiv6 @ Nov 15 2014, 00:30) *
Ради 12 ножек? + её программировать ещё надо, а для плис ни разу не писал прошивок. Хочется всё-таки на логике попытаться собрать.

Правильно написали CPLD, это маленькая ПЛИС, схему можно просто нарисовать, прямо как ЛЕГО набрать из логических элементов.
Потом нажимаете кнопку и схема прошивается в CPLD. Как в том анекдоте "а кто должен кнопку нажимать".
Go to the top of the page
 
+Quote Post
Siluan
сообщение Nov 18 2014, 16:04
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 24-07-12
Пользователь №: 72 889



Цитата(lemorus @ Nov 15 2014, 12:14) *
Правильно написали CPLD, это маленькая ПЛИС, схему можно просто нарисовать, прямо как ЛЕГО набрать из логических элементов.
Потом нажимаете кнопку и схема прошивается в CPLD. Как в том анекдоте "а кто должен кнопку нажимать".


Очень интересно. Применительно к конечным автоматам, какой продукт можете порекомендовать? Возможна ли реализация параллельной работы участков схемы, как в жесткой логике. Есть ли время инициализации, или работает сразу после включения? Есть ли продукты с числом элементов типа и-не, Д-триггеров общим числом не более 200. И самое главное, есть ли среда программирования без написания текста программ, а типа как в Микрокапе собирается схема из готовых деталей. Можно дать ответ в личную почту.
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 24 2014, 12:32
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Siluan @ Nov 18 2014, 19:04) *
Возможна ли реализация параллельной работы участков схемы, как в жесткой логике.

А внутри нее и есть жесткая логика, соединения между которой Вы описываете на том же Verilog-е. Все выражения языка, как то "A+B", например, или "if / else", транслируются синтезатором в различные схемотехнические элементы, в данном случае, сумматор и мультиплексор.

Как раз, Ваш цикл, очень хороший пример.

for(i=0; i<4; i=i+1)
begin
if(in_b[i])
shift=shift+1;
end

это Вы описали последовательно соединенные инкременторы и мультиплексоры, то есть, по сути, такую схему:

// MUX( sel,A,B ) - мультиплексор, выполняющий ф-цию sel ? B:A
sum_0 = MUX(in_b[0], 0, 1)
sum_1 = MUX(in_b[1], sum_0, sum_0+1)
sum_2 = MUX(in_b[2], sum_1, sum_1+1)
sum_3 = MUX(in_b[3], sum_2, sum_2+1)
shift = MUX(in_b[4], sum_3, sum_3+1)


А можете сделать то-же, но параллельно:

wire [1:0] shift_0, shift_1;
wire [2:0] shift;
// сумматор #1 ( A+B+CARRY )
assign shift_0 = in_b[0] + in_b[1] + in_b[2];
// полусумматор #2 ( A+B )
assign shift_1 = in_b[3] + in_b[4];
// сумматор результата
assign shift = shift_0 + shift_1;

Да и в Вашей схеме ( которую Вы описали там - http://electronix.ru/forum/index.php?showt...p;#entry1291840 ), к примеру, position и shift вычисляются совершенно параллельно, несмотря на то, что описаны одно после другого - так как вычисление каждого из них не зависит от результата другого - то и синтезируются они в две параллельно работающие подсхемы. Хорошо запомните - Verilog - это описание схемы на языке, внешне похожим на язык программирования. Но не программирование - так как нет исполнительного устройства, на котором эта программа исполняется. Синтезатор синтезирует схему по Вашему описанию, которая работает так, как Вы описали.

Кстати. Если синтезатору дать в качестве библиотеки (в ней описывается функциональность элементов самого низкого уровня, которые реализуемы в технологии) список микросхем, например, серии 74HCxxxx, вместо списка вариантов внутренностей FPGA, то синтезатор построит схему прямо на них по Вашему описанию.

вот как-то так выглядит результат работы синтезатора:
CODE

.......
(instance AND2_t10 (viewRef PRIM (cellRef AND2 (libraryRef LUCENT)))
)
(instance INV_1 (viewRef PRIM (cellRef INV (libraryRef LUCENT)))
)
(instance AND2_t9 (viewRef PRIM (cellRef AND2 (libraryRef LUCENT)))
)
(instance INV_0 (viewRef PRIM (cellRef INV (libraryRef LUCENT)))
)
(instance OR2_t8 (viewRef PRIM (cellRef OR2 (libraryRef LUCENT)))
)
(instance XOR2_t7 (viewRef PRIM (cellRef XOR2 (libraryRef LUCENT)))
)
(instance XOR2_t6 (viewRef PRIM (cellRef XOR2 (libraryRef LUCENT)))
......
(net fifo_wr_en (joined
(portRef fifo_wr_en)
(portRef A (instanceRef AND2_t10))
))
(net invout_1 (joined
(portRef Z (instanceRef INV_1))
(portRef B (instanceRef AND2_t10))
))
(net wren_i (joined
(portRef Z (instanceRef AND2_t10))
(portRef B1 (instanceRef full_cmp_ci_a))
(portRef A1 (instanceRef full_cmp_ci_a))
(portRef SP (instanceRef FF_101))
(portRef SP (instanceRef FF_102))
(portRef SP (instanceRef FF_103))
(portRef SP (instanceRef FF_104))
(portRef SP (instanceRef FF_105))
(portRef SP (instanceRef FF_106))
(portRef SP (instanceRef FF_107))
(portRef SP (instanceRef FF_108))
(portRef SP (instanceRef FF_109))
(portRef SP (instanceRef FF_110))
(portRef SP (instanceRef FF_111))
(portRef SP (instanceRef FF_112))
(portRef SP (instanceRef FF_113))
(portRef SP (instanceRef FF_114))
(portRef SP (instanceRef FF_115))
(portRef AD2 (instanceRef LUT4_12))
))
(net fifo_full (joined
(portRef Q (instanceRef FF_0))
(portRef A (instanceRef INV_1))
(portRef fifo_full)
))



то есть, мы видим набор логических элементов, и описание цепей, какие выводы этих элементов соединяются с какими - то есть, схему, описанную текстом - нетлист.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:07
Рейтинг@Mail.ru


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