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

 
 
> Специфический 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
Ответов
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



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

 


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


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