Repository navigation
Expand file tree
/
Copy pathstack_behaviour_normal_tb.sv
More file actions
67 lines (57 loc) · 2.08 KB
/
Copy pathstack_behaviour_normal_tb.sv
File metadata and controls
67 lines (57 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
`include "stack_behaviour.sv"
`define NOP 2'b00
`define PUSH 2'b01
`define POP 2'b10
`define GET 2'b11
module stack_behaviour_tb;
reg[3:0] I_DATA; wire[3:0] O_DATA;
reg RESET, CLK;
reg[1:0] COMMAND;
reg[2:0] INDEX;
integer i, k, fd, TIMES; string OUTCSV;
assign O_DATA = I_DATA;
//stack_behaviour_easy stack(O_DATA, RESET, CLK, COMMAND, INDEX, I_DATA);
stack_behaviour_normal stack(O_DATA, RESET, CLK, COMMAND, INDEX);
initial begin
if (!$value$plusargs("TIMES=%d", TIMES))
TIMES = 5;
if (!$value$plusargs("OUTCSV=%s", OUTCSV))
OUTCSV = "st_stack_b.csv";
$display("tb -> %s", OUTCSV);
$display("TIMES -> %d", TIMES);
$display("T\tO_DATA\tRESET\tCLK\tCOMMAND\tINDEX\tI_DATA");
$monitor("%f\t%5b\t%3b\t%6b\t%4b\t%4b\t%5b", $realtime, O_DATA, RESET, CLK, COMMAND, INDEX, I_DATA);
fd = $fopen(OUTCSV, "w");
$fdisplay(fd, "T\tO_DATA\tRESET\tCLK\tCOMMAND\tINDEX\tI_DATA");
k = (TIMES < 5) ? 5 : TIMES;
end
always #1 CLK = ~CLK;
initial begin
CLK = 0; COMMAND = `NOP; RESET = 1; INDEX = 0;
#2 RESET = 0;
for (i = 0; i < TIMES; i+=1) begin
#2; COMMAND = `PUSH; #0.1 I_DATA = i+1;
end
#2 COMMAND = `NOP;
#2 I_DATA = 4'b?;
for (i = 0; i < k; i+=1) begin
#2; COMMAND = `GET; INDEX = i;
end
#2 I_DATA = 4'b?; COMMAND = `NOP;
for (i = 0; i < TIMES; i+=1) begin
#2; COMMAND = `POP;
#2; COMMAND = `GET; INDEX = i;
end
#2; COMMAND = `NOP; RESET = 1;
#2; RESET = 0;
#2 I_DATA = 4'b?; COMMAND = `NOP;
for (i = 0; i < TIMES; i+=1) begin
#2; COMMAND = `POP;
end
$fclose(fd);
$finish;
end
always @(CLK) begin
$fstrobe(fd, "%d\t%b\t%b\t%b\t%b\t%b\t%b", $time, O_DATA, RESET, CLK, COMMAND, INDEX, I_DATA);
end
endmodule