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

 
 
> Реализация алгоритма на логически элементах, Есть алгоритм работы. Какие микросхемы выбрать?
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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
saab
сообщение Nov 14 2014, 21:22
Сообщение #2


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

Группа: Свой
Сообщений: 1 013
Регистрация: 8-04-14
Пользователь №: 81 284



ПЛИС батенька ПЛИС.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Nov 14 2014, 21:30
Сообщение #3


Знающий
****

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



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

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


--------------------
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Nov 14 2014, 21:58
Сообщение #4





Guests






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


Конечный автомат + карты Карно, для примера.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Nov 14 2014, 22:14
Сообщение #5


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

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



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

Хотите горячую TTL логику - пзу 2k x8 типа 573РФ5 и регистр 155ир35 sm.gif

Ну или штук 20-30 155ла3 и 3 штуки 155тм2 вообще полный oldstyle

Успехов! Rob.

P.S. на 155ЛА3 можно сделать все! даже логику core i7 8-()

Go to the top of the page
 
+Quote Post
ZASADA
сообщение Nov 15 2014, 08:02
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



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


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

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



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

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


Знающий
****

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



Похоже CPLD придётся использовать. На verilog алгоритм написал (оказывается, это не сложно). В симуляторе (iverilog+vvp) проверил - работает.
CODE
module mod_logic(
input wire clock,
input wire [3:0]in_a,
input wire [3:0]in_b,
output reg [3:0]out_c
);

integer i=0,shift=0,position=0;

initial
out_c = 4'b0001;

always @(posedge clock )
begin

shift=0;

// проверка
if((in_a != 4'b0000) & (in_b != 4'b0000))
out_c <= 4'b1000; // обработка ошибок
else
begin

// определяем позицию на выходе
for(i=0; i<4; i=i+1)
begin
if(out_c[i])
position=i+1;
end

// считаем сдвиг в +, если это возможно
if((in_a != 4'b0000) & (out_c != 4'b1000))
begin
for(i=0; i<4; i=i+1)
begin
if(in_a[i])
shift=shift+1;
end

// сдвигаем
if (shift > (4-position))
out_c <= 4'b1000;
else
out_c <= out_c << shift;
end

// считаем сдвиг в -, если это возможно
if((in_b != 4'b0000) & (out_c != 4'b0001))
begin
for(i=0; i<4; i=i+1)
begin
if(in_b[i])
shift=shift+1;
end

// сдвигаем
if (shift > (position-1))
out_c <= 4'b0001;
else
out_c <= out_c >> shift;
end
end

//$display("position %d",position);
//$display("shift %d",shift);

end
endmodule

Один только минус - для симулирования всей схемы (в основном аналоговые компоненты), в которой эта CPLD будет стоять, нужен какой-то mixed-mode симулятор (spice+HDL(Verilog)). Обычную логику многие spice симуляторы умеют моделировать, а вот которые умеют файлы verilog подключать - не видел.


--------------------
Go to the top of the page
 
+Quote Post
iosifk
сообщение Nov 15 2014, 19:15
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(arhiv6 @ Nov 15 2014, 20:59) *
Похоже CPLD придётся использовать. На verilog алгоритм написал (оказывается, это не сложно). В симуляторе (iverilog+vvp) проверил - работает.
CODE
module mod_logic(
input wire clock,
input wire [3:0]in_a,
input wire [3:0]in_b,
output reg [3:0]out_c
);

integer i=0,shift=0,position=0;

initial
out_c = 4'b0001;

always @(posedge clock )
begin

shift=0;

// проверка
if((in_a != 4'b0000) & (in_b != 4'b0000))
out_c <= 4'b1000; // обработка ошибок
else
begin

// определяем позицию на выходе
for(i=0; i<4; i=i+1)
begin
if(out_c[i])
position=i+1;
end

// считаем сдвиг в +, если это возможно
if((in_a != 4'b0000) & (out_c != 4'b1000))
begin
for(i=0; i<4; i=i+1)
begin
if(in_a[i])
shift=shift+1;
end

// сдвигаем
if (shift > (4-position))
out_c <= 4'b1000;
else
out_c <= out_c << shift;
end

// считаем сдвиг в -, если это возможно
if((in_b != 4'b0000) & (out_c != 4'b0001))
begin
for(i=0; i<4; i=i+1)
begin
if(in_b[i])
shift=shift+1;
end

// сдвигаем
if (shift > (position-1))
out_c <= 4'b0001;
else
out_c <= out_c >> shift;
end
end

//$display("position %d",position);
//$display("shift %d",shift);

end
endmodule

Один только минус - для симулирования всей схемы (в основном аналоговые компоненты), в которой эта CPLD будет стоять, нужен какой-то mixed-mode симулятор (spice+HDL(Verilog)). Обычную логику многие spice симуляторы умеют моделировать, а вот которые умеют файлы verilog подключать - не видел.

Вот:
shift=0;
....
out_c <= 4'b1000; // обработка ошибок

блокирующие и неблокирующие под одним клоком не делают...
И все вот такие
for(i=0; i<4; i=i+1)
begin
if(in_b[i])
shift=shift+1;
end
это что?
Это же не Си, это должно работать в железе. А там, в железе никто не знает, что такое "i"...
вам надо прочесть о синтезируемых и несинтезируемых конструкциях...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Siluan
сообщение Nov 18 2014, 16:04
Сообщение #10


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

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



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


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


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



у каждого производителя есть небольшие отличия. возьмем например древний xilinx 9500...
время включения 200мксек с момента подачи питания.
питание 3,3в, совместимость входов с 5в, 3,3в и 2,5в
частота работы логики до 200 МГц.
от 34 до 192 пользовательских ножек
от 36 до 288 макроячеек.
каждая макроячейка это многовходовая логика (любая) плюс триггер. логикой можно объединить до 90+ сигналов.
и да, можно не изучать никакие языки и тупо нарисовать все в знакомой 74 логике. но это контрпродуктивно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 19 2014, 11:32
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Siluan @ Nov 18 2014, 20:04) *
Применительно к конечным автоматам, какой продукт можете порекомендовать?

EPM3064 и компанию, MaxPlus и вот эти статьи:

http://www.epos.ua/view.php/about_pubs_arc...amp;ucat=3&
http://www.epos.ua/view.php/about_pubs_arc...amp;ucat=3&
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 24 2014, 09:27
Сообщение #13


Гуру
******

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



Цитата(kovigor @ Nov 19 2014, 14:32) *
EPM3064 и компанию, MaxPlus и вот эти статьи:


С ПЛИС согласен, а вот MaxPlus однозначно рекомендовать не стоит, он устарел и морально, и физически, еще лет 10 назад. В том числе, толком не поддерживает verilog, на котором ТС работает.

Для TC:
Я бы рекомендовал, параллельно с этой серией, еще Lattice http://www.latticesemi.com/en/Products/FPG...MACH4000ZE.aspx
Серия аналогична, но имеет пару малозаметных плюсиков - околонулевое потребление в статике, на пару пинов больше для I/O, и среда разработки куда менее монстроидальная, и цена чуток поменьше.

Вдогонку - несложная mixed-signal симуляция имеется вот у них - http://www.tina.com/
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 24 2014, 10:38
Сообщение #14


Гуру
******

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



Цитата(iosifk @ Nov 15 2014, 22:15) *
блокирующие и неблокирующие под одним клоком не делают...

Это да, безоговорочно.

Цитата(iosifk @ Nov 15 2014, 22:15) *
И все вот такие
for(i=0; i<4; i=i+1)
begin
if(in_b[i])
shift=shift+1;
end


А вот это полностью синтезируемо, и нормально. Для информации (для ТС, разумеется) - это синтезируется в 5 последовательно соединенных условных инкременторов (сумматоров, выполняющих функцию A+1/A+0 по условию). Также как и сдвиг "x >> shift" отлично синтезируется в баррелевский сдвигатель.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Nov 24 2014, 11:32
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(SM @ Nov 24 2014, 14:38) *
А вот это полностью синтезируемо, и нормально. Для информации (для ТС, разумеется) - это синтезируется в 5 последовательно соединенных условных инкременторов (сумматоров, выполняющих функцию A+1/A+0 по условию). Также как и сдвиг "x >> shift" отлично синтезируется в баррелевский сдвигатель.

Это значит, что я не правильно выразил идею... Обычно когда пишется "действие" на Си, то берется слово, накладывается маска, сдвигается и т.д. При этом сдвигается столько раз, сколько указано в команде.
А когда делается описание на Верилоге, то все циклы действительно разворачиваются в соответствующее "количество железа". И если в одной команде на Си надо сдвинуть 3 раза, а в другой - 5 раз, то процессор так и сделает. А Верилог сделает совершенно две разные цепи, первая из них будет состоять из 3-х "сдвигателей", а вторая - из 5-ти.
Вот что я хотел сказать...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:06
Рейтинг@Mail.ru


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