LeonY 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Вдруг возникла на первый взгляд простейшая задача, но при попытке реализации "уткнулся в стену" - ничего разумного в голову не приходит :twak: . Может у кого-то что-то подобное уже было (есть) или будут удачные мысли . Задача в следующем: - есть черный ящик с n входами In(0) ... In(n-1) m выходами Out(0) ... Out(m-1) m всегда меньше n n-битовая управляющая шина C(0) ... C(n-1) количество активных ("1") бит на шине С всегда меньше или равно m (если это не соблюдается, то желательно выставлять сигнал ошибки, но это не проблема) - требуется для каждого активного бита из С (например C(k)) подключать соответствующий вход In (в данном случае In(k)) к любому из выходов Out (я написал к "любому", но можно и более определенно - если C(k) является наименее значимым (LSB) из всех активных битов - то подключать к Out(0), для следующего активного бита - к Out(1) и так далее, хотя это несущественно). Реальные значения для моей задачи таковы: - максимальное n - 32 - максимальное m - 8 - ширина шин In и Out - 64 бита (а может и 72 - пока не решил) Хочется все это сделать на комбинаторной логике, а не на State Machine - второй вариант тривиален, но потребует буферирования на FIFO всех 32-х входных каналов, чего хочется избежать любыми способами из-за ограничений силикона, и достаточно экономично (по тем-же причинам). Но на данный момент я не могу придумать не только экономичного решения, но вааще никакого, так что :help: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Вдруг возникла на первый взгляд простейшая задача, но при попытке реализации "уткнулся в стену" - ничего разумного в голову не приходит :twak: . Может у кого-то что-то подобное уже было (есть) или будут удачные мысли . Самое простое - отдать все на откуп синтезатору. Тогда // {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! input [3:0] In0; input [3:0] In1; input [3:0] In2; input [3:0] In3; input [3:0] In4; input [3:0] In5; input [3:0] In6; input [3:0] In7; input [7:0] C; output [3:0] Out0; output [3:0] Out1; output [3:0] Out3; output [3:0] Out2; localparam N=8; localparam M=4; int c_i,out_i; logic [N-1:0][3:0]In_arr; logic [N-1:0][3:0]Out_arr; always_comb begin In_arr[0]=In0; In_arr[1]=In1; In_arr[2]=In2; In_arr[3]=In3; In_arr[4]=In4; In_arr[5]=In5; In_arr[6]=In6; In_arr[7]=In7; end always_comb begin Out0=Out_arr[0]; Out1=Out_arr[1]; Out2=Out_arr[2]; Out3=Out_arr[3]; end always_comb begin for(out_i=0;out_i<N;out_i++)Out_arr[out_i]=0; out_i=0; for(c_i=0;c_i<N;c_i++)begin if(C[c_i])begin Out_arr[out_i]=In_arr[c_i]; out_i=out_i+1'b1; end end end Это по-быстрому, без задействования серого вещества :), в качестве отправной точки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Хочется все это сделать на комбинаторной логике, а не на State Machine - второй вариант тривиален, но потребует буферирования на FIFO всех 32-х входных каналов, чего хочется избежать любыми способами из-за ограничений силикона, и достаточно экономично (по тем-же причинам). Наверное не совсем то, но все же: http://citeseerx.ist.psu.edu/viewdoc/downl...p1&type=pdf Таким образом у вас получится m мультиплексоров (с n входами для full или n-m+1 входами для minimal) и останется задача выбора входа для каждого мультиплексора в соответствии с поданными единицами на C. Если у вас full или mininal crossbar, то выбор входов мультиплексоров относительно прост, если же точек коммутации меньше, то выбор нужных - фактически трассировщик с решением конфликтов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Можно сделать коммутатор реализующий произвольную перестановку шин (n->n), и обрезать ему выход до m См. в Гугле по ключевым словам Benes Network. К сожалению для управления ею шина С напрямую не подойдет, понадобятся промежуточные вычисления (причем явно не в голом железе). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба отдаленное похожие задачи обсуждали: раз, два, три и четыре. Может какие-то подходы найдете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться