8 reg [31:0] counter = 0;
10 always@ (posedge clk_in or posedge rst)
17 else if (counter == 32'd1_000_000)
23 counter <= counter + 1;
26 assign clk_out = ~clk;
36 output [12:0] sdram_a,
37 output [1:0] sdram_ba,
38 output [1:0] sdram_dqm,
48 wire [15:0] mem_addr, mem_data;
49 wire mem_wr, mem_en, mem_busy;
50 wire clk_40mhz, clk, rst;
52 wire [31:0] sdram_dout;
55 wire [15:0] irom [15:0];
56 reg [15:0] ram [127:0];
95 .wmask(sdram && mem_wr ? 4'b0011 : 4'b0000),
97 .addr({ 18'b0, (mem_addr[7:0] << 1) }),
98 .din({ 16'b0, mem_data }),
104 always@ (posedge clk)
105 if (mem_wr && !mem_en)
106 case (mem_addr[15:8])
107 8'h10: ram[mem_addr[7:1]] <= mem_data;
108 8'h80: led <= mem_data[7:0];
112 case (mem_addr[15:8])
113 8'h00: data <= irom[mem_addr[4:1]];
114 8'h10: data <= ram[mem_addr[8:1]];
115 default: data <= 16'hFFFF;
119 assign sdram = mem_addr[15:8] == 8'h20;
121 assign irom[4'h0] = 16'h3180; // lui r1, 0x80
122 assign irom[4'h1] = 16'h3220; // lui r2, 0x20
123 assign irom[4'h2] = 16'h4302; // l: lw r3, [r2]
124 assign irom[4'h3] = 16'h8031; // sw r3, [r1, 0]
125 assign irom[4'h4] = 16'h2301; // addi r3, 1
126 assign irom[4'h5] = 16'h8032; // sw r3, [r2, 0]
127 assign irom[4'h6] = 16'hfffb; // j l
128 assign irom[4'h7] = 16'hffff; //
129 assign irom[4'h8] = 16'hffff; //
130 assign irom[4'h9] = 16'hffff; //
131 assign irom[4'hA] = 16'hffff; //
132 assign irom[4'hB] = 16'hffff;
133 assign irom[4'hC] = 16'hffff;
134 assign irom[4'hD] = 16'hffff;
135 assign irom[4'hE] = 16'hffff;
136 assign irom[4'hF] = 16'hffff;
138 assign wifi_gpio0 = clk;
139 assign mem_data = mem_en && !mem_wr ? (sdram ? sdram_dout[15:0] : data) : 16'bz;