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
|
// Copyright 2015, Brian Swetland <swetland@frotz.net>
// Licensed under the Apache License, Version 2.0.
module top(
input clk,
output reg[15:0]led
);
wire [15:0]wdata;
wire [15:0]waddr;
wire [15:0]raddr;
wire [15:0]rdata;
wire wr;
wire rd;
assign led = raddr;
sram ram0(
.clk(clk),
.waddr(waddr),
.wdata(wdata),
.we(wr),
.raddr(raddr),
.rdata(rdata),
.re(rd)
);
cpu
`ifdef BIGCPU
#(
.RWIDTH(32),
.SWIDTH(5)
)
`endif
cpu0(
.clk(clk),
.mem_raddr_o(raddr),
.mem_rdata_i(rdata),
.mem_waddr_o(waddr),
.mem_wdata_o(wdata),
.mem_wr_o(wr),
.mem_rd_o(rd)
);
endmodule
module sram(
input clk,
input [15:0]waddr,
input [15:0]wdata,
input [15:0]raddr,
output reg [15:0]rdata,
input we,
input re
);
reg [15:0]mem[0:4095];
always @(posedge clk) begin
if (we)
mem[waddr[11:0]] <= wdata;
if (re)
rdata <= mem[raddr[11:0]];
end
endmodule
|