このデジタル ロジックを Verilog または VHDL でどのように実装しますか?

StackOverflow https://stackoverflow.com/questions/486471

  •  20-08-2019
  •  | 
  •  

質問

投稿しました 答えスタックオーバーフローの別の質問 これには、FPGA にプログラムできるように、デジタル ロジックを Verilog または VHDL で実装する必要があります。

次の論理図を Verilog、VHDL、またはその他のハードウェア記述言語で実装するにはどうすればよいでしょうか?

番号付きのボックスはフィールド内のビットを表します。各フィールドには、 K ビットとそのビット 現在 そして マスク コンピュータ システムによって提供されます (ラッチ レジスタまたは同等のものを使用)。中のビット 同じコンピュータ システムに読み戻されます。

代替テキスト http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg

以下も参照してください。 このスタックオーバーフローの質問

役に立ちましたか?

解決

このような何か?

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

(免責事項:LINTEDが、シミュレートされません)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top