72 lines
1.2 KiB
Coq
72 lines
1.2 KiB
Coq
|
|
|
||
|
|
module test
|
||
|
|
(input wire clk,
|
||
|
|
output reg foo, bar,
|
||
|
|
input wire foo_valid, foo_in,
|
||
|
|
input wire bar_valid, bar_in
|
||
|
|
/* */);
|
||
|
|
|
||
|
|
always @(posedge clk)
|
||
|
|
begin
|
||
|
|
if (foo_valid) foo <= foo_in;
|
||
|
|
if (bar_valid) bar <= bar_in;
|
||
|
|
end
|
||
|
|
|
||
|
|
endmodule // test
|
||
|
|
|
||
|
|
|
||
|
|
module main;
|
||
|
|
reg clk;
|
||
|
|
wire foo, bar;
|
||
|
|
reg foo_valid, foo_in;
|
||
|
|
reg bar_valid, bar_in;
|
||
|
|
|
||
|
|
test dut (.clk(clk),
|
||
|
|
.foo(foo), .bar(bar),
|
||
|
|
.foo_valid(foo_valid), .bar_valid(bar_valid),
|
||
|
|
.foo_in(foo_in), .bar_in(bar_in));
|
||
|
|
task fail;
|
||
|
|
begin
|
||
|
|
$display("FAILED -- foo/bar=%b/%b, foo/bar_valid=%b/%b, foo/bar_in=%b/%b",
|
||
|
|
foo, bar, foo_valid, bar_valid, foo_in, bar_in);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
endtask // fail
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
clk = 0;
|
||
|
|
foo_valid = 1;
|
||
|
|
bar_valid = 1;
|
||
|
|
foo_in = 0;
|
||
|
|
bar_in = 0;
|
||
|
|
|
||
|
|
#1 clk = 1;
|
||
|
|
#1 clk = 0;
|
||
|
|
|
||
|
|
if (foo !== 0 || bar !== 0)
|
||
|
|
fail;
|
||
|
|
|
||
|
|
bar_in = 1;
|
||
|
|
|
||
|
|
#1 clk = 1;
|
||
|
|
#1 clk = 0;
|
||
|
|
|
||
|
|
if (foo !== 0 || bar !== 1)
|
||
|
|
fail;
|
||
|
|
|
||
|
|
foo_in = 1;
|
||
|
|
bar_in = 0;
|
||
|
|
foo_valid = 1;
|
||
|
|
bar_valid = 0;
|
||
|
|
|
||
|
|
#1 clk = 1;
|
||
|
|
#1 clk = 0;
|
||
|
|
|
||
|
|
if (foo !== 1 || bar !== 1)
|
||
|
|
fail;
|
||
|
|
|
||
|
|
$display("PASSED");
|
||
|
|
end
|
||
|
|
|
||
|
|
endmodule // main
|