blob: 3a99b07b091dcf5f463ead0dccebd7b29e7e3dd7 [file] [log] [blame] [edit]
`ifndef VCDFILE
`define VCDFILE "out.vcd"
`endif
`timescale 1 ms / 1 ps
module test;
/* Make a regular pulsing clock. */
reg clk = 0;
always #2 clk = !clk;
reg [3:0] in;
wire [3:0] out;
wire [4:0] vec0;
wire [4:0] vec1;
top uut (.clk(clk), .cen(in[0]), .rst(in[1]), .ina(in[2]), .inb(in[3]),
.outa(out[0]), .outb(out[1]), .outc(out[2]), .outd(out[3]),
.vec0(vec0), .vec1(vec1));
initial begin
$dumpfile(`VCDFILE);
$dumpvars(1, uut);
#3; // get between edges
in <= 4'b0010;
#1; //negedge
if (out != 4'b1000) $error("initial reset %b", out);
#1; // between
in <= 4'b0000;
#1; //posedge
#1; //between
if (out != 4'b1000) $error("set and reg1 %b", out);
#1; //negedge
#1; //between
if (out != 4'b0000) $error("set and reg1 %b", out);
in <= 4'b1101;
#1; //posedge
#1; // b
if (vec0 != 5'b00001) $error("vec0 %b", out);
#1; // neg
#1; // b
if (vec1 != 5'b00001) $error("vec1 %b", out);
#1; // pos
#1; // b
repeat (3)
#4; // full cycle
if (out != 4'b0000) $error("set and reg1 %b", out);
#1; // neg
#1; // b
if (out != 4'b0100) $error("clock to out %b", out);
#1; // pos
#1; // b
if (out != 4'b0111) $error("clock to out %b", out);
#1; // neg
#1; // b
#1; // pos
#1; // b
in <= 4'b0010;
$display("reseting with cen and ina off");
#1; // neg
if (out != 4'b1110) $error("clock to out %b", out);
#1; // b
in <= 4'b0111;
$display("reseting with cen and ina");
#1; // pos
#1; // b
if (vec0 != 5'b00000) $error("vec0 %b", vec0);
if (vec1 != 5'b11111) $error("vec1 %b", vec1);
#1; // neg
#1; // b
if (vec0 != 5'b00000) $error("vec0 %b", vec0);
if (vec1 != 5'b00001) $error("vec1 %b", vec1);
$dumpflush;
$finish;
end // initial begin
endmodule // test