課題1.3

下記のモジュールはinに入力されたデータを4クロックサイクル遅延させてoutへ出力するモジュールです。

module Queue (
  out, in, reset, clock
);
parameter WIDTH = 8;
parameter INIT = 8'b0;

input [WIDTH - 1: 0] in;
input reset, clock;
output [WIDTH - 1: 0] out;

reg [WIDTH - 1: 0] out;

reg [WIDTH - 1: 0] queue0;
reg [WIDTH - 1: 0] queue1;
reg [WIDTH - 1: 0] queue2;

always @(posedge clock) begin
if(reset) begin
  out <= INIT;
  queue0 <= INIT;
  queue1 <= INIT;
  queue2 <= INIT;
end else begin
  out <= queue2;
  queue2 <= queue1;
  queue1 <= queue0;
  queue0 <= in;
end

end
endmodule

下記モジュールは上記モジュール'Queue'をテストするモジュールです。

module TestQueue;
// クロックの周期についてのパラメータ
parameter PERIOD = 20;
// テストモジュールについてのパラメータ
parameter WIDTH  = 8;
parameter INIT  = 8'b0;
parameter DEPTH = 4;

// テストするモジュールの入出力ポート
reg [WIDTH - 1: 0] in;
wire [WIDTH - 1: 0] out;
reg clock, reset;

// クロックの生成
initial begin
  clock = 1;
  #(PERIOD / 4)

  forever begin
    #(PERIOD / 2) clock = 0;
    #(PERIOD / 2) clock = 1;
  end
end
// リセットの生成
initial begin
  reset = 1;
  #(PERIOD * 2) reset = 0;
end
// 入力信号の生成
always @(posedge clock) begin
  if(reset) begin
    in <= INIT;
  end else begin
    in <= in + 8'b1;
  end
end

// テストするモジュールの接続
Queue queue (
  .out(out), .in(in), .reset(reset), .clock(clock)
);

endmodule

課題1.3.1

上記テストモジュールを用いてシミュレーションを行い、Queueの出力を確認してください。

課題1.3.2

Queue内部の波形を見て、動作を確認してください。