下記のモジュールは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.2Queue内部の波形を見て、動作を確認してください。
|