-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestbench.v
89 lines (74 loc) · 2.03 KB
/
testbench.v
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
module testbench();
reg clk = 1;
reg rstn = 0;
wire [31:0] mem_addr;
wire [31:0] mem_wdata;
wire [3:0] mem_wstrb;
wire rom_valid = mem_valid && mem_addr[31:16] == 16'h0005;
wire rom_ready;
wire [31:0] rom_rdata;
wire ram_valid = mem_valid && mem_addr[31:16] == 16'h0000;
wire ram_ready;
wire [31:0] ram_rdata;
wire gpio_valid = mem_valid && mem_addr[31:16] == 16'h0300;
wire gpio_ready;
wire [31:0] gpio_rdata;
wire [31:0] mem_rdata = rom_valid ? rom_rdata
: ram_valid ? ram_rdata
: gpio_valid ? gpio_rdata
: 32'h00000000;
wire mem_ready = (rom_valid & rom_ready)
| (ram_valid & ram_ready)
| (gpio_valid & gpio_ready);
rom rom0 (
.clk(clk),
.mem_valid(rom_valid),
.mem_ready(rom_ready),
.mem_addr(mem_addr),
.mem_rdata(rom_rdata)
);
ram ram0 (
.clk(clk),
.mem_valid(ram_valid),
.mem_ready(ram_ready),
.mem_addr(mem_addr),
.mem_rdata(ram_rdata),
.mem_wdata(mem_wdata),
.mem_wstrb(mem_wstrb)
);
core #(
.RESET_PC(32'h00050000)
) core (
.clk(clk), .rstn(rstn),
.mem_valid(mem_valid),
.mem_ready(mem_ready),
.mem_addr(mem_addr),
.mem_rdata(mem_rdata),
.mem_wdata(mem_wdata),
.mem_wstrb(mem_wstrb)
);
wire [31:0] gpio_oe;
wire [31:0] gpio_do;
wire [31:0] gpio_di = 32'h5a5a5a5a;
mem_gpio gpio (
.clk(clk), .rstn(rstn),
.mem_valid(gpio_valid),
.mem_ready(gpio_ready),
.mem_addr(mem_addr),
.mem_rdata(gpio_rdata),
.mem_wdata(mem_wdata),
.mem_wstrb(mem_wstrb),
.gpio_oe(gpio_oe),
.gpio_do(gpio_do),
.gpio_di(gpio_di)
);
always clk = #1 !clk;
initial begin
$dumpfile("testbench.vcd");
$dumpvars;
#2
rstn = 1;
#10000
$finish;
end
endmodule