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

 
 
> Специфический Crossbar Switch, Требуется помощь сообщества
LeonY
сообщение Feb 9 2011, 19:44
Сообщение #1


Знающий
****

Группа: Админы
Сообщений: 689
Регистрация: 24-06-04
Из: South Africa
Пользователь №: 164



Вдруг возникла на первый взгляд простейшая задача, но при попытке реализации "уткнулся в стену" - ничего разумного в голову не приходит twak.gif . Может у кого-то что-то подобное уже было (есть) или будут удачные мысли help.gif .

Задача в следующем:
- есть черный ящик с
  • 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.gif help.gif help.gif

Прикрепленное изображение



--------------------
"В мире есть две бесконечные вещи: Вселенная и человеческая глупость. За Вселенную, впрочем, поручиться не могу". (С)

А. Эйнштейн.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
barabek
сообщение Feb 10 2011, 00:01
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(LeonY @ Feb 10 2011, 05:44) *
Вдруг возникла на первый взгляд простейшая задача, но при попытке реализации "уткнулся в стену" - ничего разумного в голову не приходит twak.gif . Может у кого-то что-то подобное уже было (есть) или будут удачные мысли help.gif .

Самое простое - отдать все на откуп синтезатору. Тогда

Код
    
    // {{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

Это по-быстрому, без задействования серого вещества sm.gif, в качестве отправной точки
Go to the top of the page
 
+Quote Post
dvladim
сообщение Feb 10 2011, 08:23
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(LeonY @ Feb 9 2011, 22:44) *
Хочется все это сделать на комбинаторной логике, а не на 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, то выбор входов мультиплексоров относительно прост, если же точек коммутации меньше, то выбор нужных - фактически трассировщик с решением конфликтов.
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 10 2011, 10:16
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Можно сделать коммутатор реализующий произвольную перестановку шин (n->n), и обрезать ему выход до m
См. в Гугле по ключевым словам Benes Network. К сожалению для управления ею шина С напрямую не подойдет, понадобятся промежуточные вычисления (причем явно не в голом железе).
Go to the top of the page
 
+Quote Post
id_gene
сообщение Feb 11 2011, 08:49
Сообщение #5


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



отдаленное похожие задачи обсуждали: раз, два, три и четыре.
Может какие-то подходы найдете.
Go to the top of the page
 
+Quote Post

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

 


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


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