1 `define ADDR_NR10 16'hFF10
2 `define ADDR_NR11 16'hFF11
3 `define ADDR_NR12 16'hFF12
4 `define ADDR_NR13 16'hFF13
5 `define ADDR_NR14 16'hFF14
19 /* can be optimized as register file */
20 reg [7:0] nr10 = 0, nr11 = 0, nr12 = 0, nr13 = 0, nr14 = 0;
21 reg [10:0] counter = 0;
23 reg [3:0] delta = 4'b1111;
25 reg [3:0] snd_out = 0;
30 assign snd_data = en ? snd_out : 0;
32 assign data = rdlatch ?
33 addrlatch == `ADDR_NR10 ? nr10 :
34 addrlatch == `ADDR_NR11 ? nr11 :
35 addrlatch == `ADDR_NR12 ? nr12 :
36 addrlatch == `ADDR_NR13 ? nr13 :
37 addrlatch == `ADDR_NR14 ? nr14 : 8'bzzzzzzzz
40 always @ (posedge core_clk) begin
45 `ADDR_NR10: nr10 <= data;
46 `ADDR_NR11: nr11 <= data;
47 `ADDR_NR12: nr12 <= data;
48 `ADDR_NR13: nr13 <= data;
49 `ADDR_NR14: nr14 <= data;
61 always @ (posedge cntclk) begin
63 counter <= counter - 1;
65 counter <= ~{nr14[2:0],nr13} + 1; /* possible A */
69 snd_out <= toggle ? delta : 0; /* Leave it to Dennis. */
72 always @ (posedge lenclk) begin
74 lencnt <= lencnt - 1; /* possible A */
76 lencnt <= ~nr11[4:0] + 1;