-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAHBSYSDCD.v
50 lines (45 loc) · 1.49 KB
/
AHBSYSDCD.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
`timescale 1ns / 1ps
module AHBSYSDCD(
input wire [31:0] HADDR,
output wire HSEL_S0, // SRAM
output wire HSEL_S1, // LED
output wire HSEL_S2, // UART
output wire HSEL_S3, // GPIO
output wire HSEL_S4,
output wire HSEL_S5,
output wire HSEL_S6,
output wire HSEL_NO_MAP, // no map
output reg [2:0] MUX_SEL
);
reg [7:0] dec;
assign HSEL_S0 = dec[0];
assign HSEL_S1 = dec[1];
assign HSEL_S2 = dec[2];
assign HSEL_S3 = dec[3];
assign HSEL_S4 = dec[4];
assign HSEL_S5 = dec[5];
assign HSEL_S6 = dec[6];
assign HSEL_NO_MAP = dec[7];
always @(*) begin
if((HADDR[31:0] >= 32'h2000_0000) & (HADDR[31:0] < 32'h2000_8000)) begin // SRAM的空间为0x2000_0000 ~ 0x2000_8000
dec <= 8'b0000_0001;
MUX_SEL <= 3'b000;
end
else if(HADDR[31:0] == 32'h4000_0000) begin // LED的地址范围是0x4000_0000
dec <= 8'b0000_0010;
MUX_SEL <= 3'b001;
end
else if(HADDR[31:12] == 20'h4000_5) begin // UART的地址范围是0x4000_5000 ~ 0x4000_5***
dec <= 8'b0000_0100;
MUX_SEL <= 3'b010;
end
else if(HADDR[31:12] == 20'h4000_8) begin // GPIO的地址范围0x4000_8000 ~ 0x4000_8008
dec <= 8'b0000_1000;
MUX_SEL <= 3'b011;
end
else begin // 什么也没选中
dec <= 8'b1000_0000;
MUX_SEL <= 3'b111;
end
end
endmodule