How would you implement this digital logic in Verilog or VHDL?

前端 未结 1 1481
误落风尘
误落风尘 2021-01-16 20:27

I posted an answer to another stackoverflow question which requires some digital logic to be implemented in Verilog or VHDL so that it can be programmed into an FPGA.

<
相关标签:
1条回答
  • 2021-01-16 20:45

    Something like this?

    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
    

    (Disclaimer: linted but not simulated)

    0 讨论(0)
提交回复
热议问题