2
私は、残りのコードとは別に、8ビットレジスタのモジュールをテストしています。私は値を設定するためにModelSimを使用しているし、結果を見るために実行しています。 このモジュールには、2進数の入力、クリアビット、イネーブルビット、および出力があります。ここVerilog登録コードバグ条件チェック
module Register8bit(D, Clk, Clear, Enable, OutNum);
input [7:0] D; //8 bit binary data
input Clk; //Clock
input Clear; //Clear bit
input Enable; //Enable bit
output reg [7:0] OutNum;
always @(posedge Clk)
begin
if (Enable)
begin
if (Clear)
OutNum <= 8'b00000000;
else
OutNum <= D;
end
end
endmodule
ので(私はD = 10001111とCLK = 1
Steps CLR Enable OutNum
1 0 0 xxxxxxxx (initially undefined)
2 0 1 10001111 (input data is used)
3 1 0 10001111 (because write-protection)
4 1 1 00000000 (Clear and Enable are true, so set to 0)
5 0 1 10001111 (Clear is false and Enable is true, so use input data)
最初のステップの動作と、(この順番で)期待していたが、第二の一方はない出力されます休むこともできません)。具体的には、OutNumは2番目のステップで未定義のままです。 EnableデータがTrueの場合、入力データでOutNumを更新することは最初のステップで機能します。
このモジュールはどのように修正する必要がありますか?
テストベンチコード:あなたのClk
信号を何度も切り替える必要がある
`timescale 1ns/1ps
module test_register;
//inputs
reg [7:0] D;
reg Clk;
reg Clear;
reg Enable;
//outputs
reg [7:0] OutNum;
//instantiate
Register8bit uut(
.D(D),
.Clk(Clk),
.Clear(Clear),
.Enable(Enable)
);
initial begin
D = 10001111;
Clk = 1;
//step 1
#100;
Clear = 0;
Enable = 0;
#100;
//step 2
Clear = 0;
Enable = 1;
#100;
//step 3
Clear = 1;
Enable = 0;
#100;
//step 4
Clear = 1;
Enable = 1;
#100;
//step 5
Clear = 0;
Enable = 1;
#100;
end
endmodule
テストベンチコードがアップしています。 – Rez