Сортировка битов 32-битного вектора. Верилог

Мне нужно сделать дизайн, который сортирует биты 32-битного вектора (не уверен, что он называется вектором) следующим образом:

1010010101010 => 00000001111111

У меня должен быть 32-битный параллельный вход и последовательный выход, и он должен быть комбинационным.

Я пробовал что-то вроде этого:

assign c=in[0]+in[1]+in[2]+in[3]+in[4]+in[5]+in[6]+in[7]+in[8]+in[9]+in[10]+in[11]+in[12]+in[13]+in[14]+in[15]+in[16]+in[17]+in[18]+in[19]+in[20]+in[21]+in[22]+in[23]+in[24]+in[25]+in[26]+in[27]+in[28]+in[29]+in[30]+in[31];

assign out=(1<< c)-1;

Но я подумал, что мне нужно будет делать дизайн последовательно, если я буду считать единицы.

Не могли бы вы помочь мне сделать это? У меня голова болит от попыток понять верилог.


person Alex Mihai    schedule 14.05.2016    source источник
comment
Ваше опубликованное решение является комбинационным - вы не используете никаких регистров. Ваш критический путь будет длинным, но он должен работать.   -  person wilcroft    schedule 15.05.2016
comment
Я не думаю, что у вас может быть последовательный вывод, реализованный с помощью комбинационной схемы, вам нужны часы и регистры.   -  person George Gkitsas    schedule 02.12.2016


Ответы (1)


«Последовательный выход» означает 1 бит за цикл. Вам нужен 1-битный сигнал out и счетчик, который выбирает один из 32-битов результата. Предполагая, что ваши часы называются clk, а ваш активный низкий сброс rstn

logic[31:0] result;
logic[4:0] cnt;
assign c=in[0]+in[1]+in[2]+in[3]+in[4]+in[5]+in[6]+in[7]+in[8]+in[9]+in[10]+in[11]+in[12]+in[13]+in[14]+in[15]+in[16]+in[17]+in[18]+in[19]+in[20]+in[21]+in[22]+in[23]+in[24]+in[25]+in[26]+in[27]+in[28]+in[29]+in[30]+in[31];
assign result = (1 << c) - 1;
always_ff @(posedge clk, negedge rstn)
   if (!rstn)
       cnt <= 0;
   else
       cnt <= cnt+1;
assign out = result[cnt];
person rascob    schedule 13.03.2017