-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtop.sv
More file actions
102 lines (91 loc) · 1.73 KB
/
Copy pathtop.sv
File metadata and controls
102 lines (91 loc) · 1.73 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
module slave1 (
input logic clk,
input logic en,
input logic mosi,
output logic miso
);
assign miso = mosi;
endmodule
module slave2 (
input logic clk,
input logic en,
input logic mosi,
output logic miso
);
localparam LENGTH = 13;
logic [LENGTH*8-1:0] message = "Hello World!\n";
logic [15:0] counter = LENGTH*8 - 1;
assign miso = message[counter];
always_ff @(posedge clk) begin
if (en) begin
if ( counter == 0 ) begin
counter <= LENGTH*8 - 1;
end else begin
counter <= counter - 1;
end
end
end
endmodule
module slave3 (
input logic clk,
input logic en,
input logic mosi,
output logic miso,
output logic [4:0] leds = 5'b0
);
logic [6:0] data = 0;
logic [3:0] counter = 7;
assign miso = 0;
always_ff @(posedge clk) begin
if (en) begin
if ( counter == 0 ) begin
counter <= 7;
leds <= {data, mosi};
end else begin
counter <= counter - 1;
data[counter - 1] <= mosi;
end
end
end
endmodule
module top (
input logic clk,
input logic cs1,
input logic cs2,
input logic cs3,
output logic miso,
input logic mosi,
input logic sclk,
output [4:0] leds
);
logic miso1;
logic miso2;
logic miso3;
slave1 i_slave1 (
.clk(sclk),
.en(~cs1),
.mosi(mosi),
.miso(miso1)
);
slave2 i_slave2 (
.clk(sclk),
.en(~cs2),
.mosi(mosi),
.miso(miso2)
);
slave3 i_slave3 (
.clk(sclk),
.en(~cs3),
.mosi(mosi),
.miso(miso3),
.leds(leds)
);
always_comb begin
miso = 0;
casez ({cs1, cs2, cs3})
3'b0zz : miso = miso1;
3'bz0z : miso = miso2;
3'bzz0 : miso = miso3;
endcase
end
endmodule