iverilog/ivtest/ivltests/mix_reset.v

65 lines
1.1 KiB
Verilog

module main;
reg [7:0] data_i;
reg [2:0] addr;
reg clk, rst, wr;
reg [7:0] data_o, buff[0:7];
(* ivl_synthesis_on *)
always @(posedge clk or posedge rst)
begin
if (rst)
data_o <= 8'h0;
else if (wr) begin
buff[addr] <= data_i;
data_o <= data_i;
end else
data_o <= buff[addr];
end
(* ivl_synthesis_off *)
initial begin
clk = 0;
rst = 1;
wr = 1;
addr = 0;
data_i = 8'hff;
#1 clk = 1;
#1 clk = 0;
if (data_o !== 8'h00) begin
$display("FAILED -- reset data_o=%b", data_o);
$finish;
end
rst = 0;
wr = 1;
for (addr = 0; addr < 7; addr = addr+1) begin
data_i = addr;
#1 clk = 1;
#1 clk = 0;
if (data_o !== data_i) begin
$display("FAILED -- write data_i=%h, data_o=%h", data_i, data_o);
$finish;
end
end
wr = 0;
data_i = 8'hff;
for (addr = 0 ; addr < 7; addr = addr+1) begin
#1 clk = 1;
#1 clk = 0;
if (data_o !== {5'b00000, addr}) begin
$display("FAILED -- read addr=%h, data_o=%h", addr, data_o);
$finish;
end
end
$display("PASSED");
end
endmodule // main