Или, если максимально упростить, то можно рассмотреть такой пример:
`timescale 10ns/1ns
module test_bit (
input clk,
input reset,
input [7:0] data_1,
output reg P,
);
reg Z;
always @(posedge clk or negedge reset)
begin
if (reset)
begin
Z = 0;
end
else
begin
P = data_1[0] ^ data_1[1] ^ data_1[2] ^ data_1[3] ^ data_1[4] ^ data_1[5] ^ data_1[6] ^ data_1[7];
Z = P;
end
end
endmodule
Тест-бенч:
`timescale 1ps / 1ps
module test_bit_tb;
//Internal signals declarations:
reg clk;
reg reset;
reg [7:0]data_1;
wire P;
reg Z;
// Unit Under Test port map
test_bit UUT (
.clk(clk),
.reset(reset),
.data_1(data_1),
.P(P)
);
initial
begin
clk = 0;
reset = 0;
data_1 = 8'b1111_1111;
end
always
begin
#5 clk = ~clk;
end
initial
begin
clk = 1;
#10
reset = 1;
#10
reset = 0;
//data_1=8'b1111_1111;
#1000
$finish;
end
initial
$monitor($realtime,,"ps %h %h %h ",clk,reset,data_1,P,Z);
endmodule
И внутренний регистр "Z" находится в неопределенном состоянии даже после того как пришел сигнал ресет.
Не могу понять в чем тут дело.