Как бихте приложили тази цифрова логика във Verilog или VHDL?

Публикувах отговор на друг въпрос за stackoverflow, който изисква известна цифрова логика за да бъде реализиран във Verilog или VHDL, така че да може да бъде програмиран в FPGA.

Как бихте приложили следната логическа диаграма на Verilog, VHDL или друг език за описание на хардуера?

Номерираните полета представляват битове в поле. Всяко поле има K бита, а битовете за ток и маска ще бъдат осигурени от компютърна система (с помощта на фиксиран регистър или еквивалент). Битовете в next ще бъдат прочетени обратно в същата компютърна система.

http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg

Вижте също: този въпрос за stackoverflow


person e.James    schedule 28.01.2009    source източник
comment
FYI, връзката към изображение (сега) не работи.   -  person luis.espinal    schedule 03.02.2011
comment
@luis.espinal изглежда добре за мен, но знам със сигурност, че много корпоративни уеб филтри (WebSense, например) ще филтрират изображения на трети страни.   -  person e.James    schedule 03.02.2011
comment
DOH! Това е, гледам на това от моята корпоративна мрежа. Няма значение и благодаря :)   -  person luis.espinal    schedule 03.02.2011
comment
Няма проблем. И аз мразя тези филтри.   -  person e.James    schedule 03.02.2011


Отговори (1)


Нещо като това?

module scheduler
 #( parameter K = 10 )
  (
   input wire [K:1] current,
   input wire [K:1] mask,
   output reg [K:1] next
   );

   reg [K:1] a;
   reg [K:1] b;

   //'[i+1]' busses that wrap.
   // eg, for a 4-bit bus...
   // a[i]:        a[4],a[3],a[2],a[1] (obviously...)
   // a_wrap[i]:   a[1],a[4],a[3],a[2] 
   wire [K:1] mask_wrap    = { mask[1],mask[K:2] };
   wire [K:1] a_wrap       = { a[1], a[K:2] };
   wire [K:1] current_wrap = { current[1], current[K:2] };

   integer i;
   always @( * ) begin
      for( i=1; i<=K; i=i+1 ) begin
         a[i] = ~current_wrap[i] && b[i];
         b[i] = a_wrap[i] || mask_wrap[i];
         next[i] = ~a[i] && mask_wrap[i];
      end
   end


endmodule

(Отказ от отговорност: мъхест, но не симулиран)

person Marty    schedule 28.01.2009
comment
Вероятно трябва да спомена, че това е Verilog-2001. И че предпочитам автобусите ми да тръгват от [K-1:0]... - person Marty; 29.01.2009
comment
Достатъчно честно. Индексирането на шината вероятно трябва да е базирано на нула. Благодаря ви за отличния отговор. - person e.James; 29.01.2009