77 lines
2.7 KiB
Plaintext
77 lines
2.7 KiB
Plaintext
|
package GlitchFilter_Test;
|
||
|
|
||
|
import Assert::*;
|
||
|
import StmtFSM::*;
|
||
|
|
||
|
import GlitchFilter::*;
|
||
|
import Testing::*;
|
||
|
|
||
|
module mkTB();
|
||
|
let testflags <- mkTestFlags();
|
||
|
let cycles <- mkCycleCounter();
|
||
|
|
||
|
let dut <- mkGlitchFilter(3, 0);
|
||
|
|
||
|
// Slight indirection to appease the compiler: GlitchFilter
|
||
|
// requires a write on every cycle, and with just the test FSM, the
|
||
|
// compiler can't prove that this is satisfied. So, give it a
|
||
|
// default value when the test isn't driving the input, on the
|
||
|
// first few cycles of the test.
|
||
|
Wire#(bit) pin_in <- mkDWire(0);
|
||
|
(* no_implicit_conditions,fire_when_enabled *)
|
||
|
rule push_in;
|
||
|
dut <= pin_in;
|
||
|
endrule
|
||
|
|
||
|
function Action check_dut(bit in, bit want_out);
|
||
|
return action
|
||
|
if (testflags.verbose)
|
||
|
$display("%0d: GlitchFilter(%0d) => %0d, want %0d", cycles.all, in, dut, want_out);
|
||
|
dynamicAssert(dut == want_out, "wrong GlitchFilter output");
|
||
|
pin_in <= in;
|
||
|
endaction;
|
||
|
endfunction
|
||
|
|
||
|
runTest(100,
|
||
|
mkTest("GlitchFilter", seq
|
||
|
// Simple 0->1 transition
|
||
|
check_dut(0, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 1);
|
||
|
check_dut(1, 1);
|
||
|
|
||
|
// Simple 1->0 transition
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 0);
|
||
|
check_dut(0, 0);
|
||
|
|
||
|
// Glitchy 0->1
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(0, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(0, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 0);
|
||
|
check_dut(1, 1);
|
||
|
check_dut(1, 1);
|
||
|
|
||
|
// Glitchy 1->0
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(1, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(1, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 1);
|
||
|
check_dut(0, 0);
|
||
|
check_dut(0, 0);
|
||
|
endseq));
|
||
|
endmodule
|
||
|
|
||
|
endpackage
|