-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtm1638_bus.v
More file actions
130 lines (118 loc) · 2.33 KB
/
Copy pathtm1638_bus.v
File metadata and controls
130 lines (118 loc) · 2.33 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
module tm1638_bus (
clk,
reset_n,
din,
dout,
wr,
rd,
addr,
spi_di,
spi_clk,
spi_cs_n,
spi_dir,
spi_do,
cs_tm1638
);
parameter cfg_addr = 12'hff0;
parameter clk_freq = 50000000; //Hz
input wire clk;
input wire reset_n;
input wire spi_di;
output wire spi_clk;
output wire spi_cs_n;
output wire spi_dir;
output wire spi_do;
output reg cs_tm1638;
input wire [7:0] din;
output reg [7:0] dout;
input wire wr;
input wire rd;
input wire [15:0] addr;
reg [7:0] dig_1;
reg [7:0] dig_2;
reg [7:0] dig_3;
reg [7:0] dig_4;
reg [7:0] dig_5;
reg [7:0] dig_6;
reg [7:0] dig_7;
reg [7:0] dig_8;
reg [7:0] leds;
reg disp_on;
reg [2:0] bright;
wire [7:0] buttons;
//assign dout = buttons;
always @(addr or rd or wr) begin
if (addr[15:4] == cfg_addr) begin
cs_tm1638 = rd;
case (addr[3:0])
4'b 0000: dout = dig_1;
4'b 0001: dout = dig_2;
4'b 0010: dout = dig_3;
4'b 0011: dout = dig_4;
4'b 0100: dout = dig_5;
4'b 0101: dout = dig_6;
4'b 0110: dout = dig_7;
4'b 0111: dout = dig_8;
4'b 1000: dout = leds;
//4'b 1001: dout = buttons;
4'b 1111: dout ={4'b0,disp_on,bright};
default: dout = buttons;
endcase
end else begin
cs_tm1638 = 1'b0;
end
end
always @(posedge clk) begin
if (!reset_n) begin
dig_1<=8'h00;
dig_2<=8'h00;
dig_3<=8'h00;
dig_4<=8'h00;
dig_5<=8'h00;
dig_6<=8'h00;
dig_7<=8'h00;
dig_8<=8'h00;
leds <=8'h00;
disp_on <= 1'b1;
bright<=7;
end else begin
if (addr[15:4] == cfg_addr) begin
if (wr) begin
case (addr[3:0])
4'b 0000: dig_1 <= din;
4'b 0001: dig_2 <= din;
4'b 0010: dig_3 <= din;
4'b 0011: dig_4 <= din;
4'b 0100: dig_5 <= din;
4'b 0101: dig_6 <= din;
4'b 0110: dig_7 <= din;
4'b 0111: dig_8 <= din;
4'b 1000: leds <= din;
4'b 1111: {disp_on,bright} <= din[3:0];
endcase
end
end
end
end
tm1638 #(.clk_freq( clk_freq)) tm1638_inst(
.clk(clk),
.reset_n(reset_n),
.spi_di(spi_di),
.spi_clk(spi_clk),
.spi_cs_n(spi_cs_n),
.spi_dir(spi_dir),
.spi_do(spi_do),
.buttons(buttons),
.dig_1(dig_1),
.dig_2(dig_2),
.dig_3(dig_3),
.dig_4(dig_4),
.dig_5(dig_5),
.dig_6(dig_6),
.dig_7(dig_7),
.dig_8(dig_8),
.leds(leds),
.disp_on(disp_on),
.bright(bright)
);
endmodule