Rev 114 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
104 | lvd | 1 | // TurboFMpro project |
2 | // (C) 2018 NedoPC |
||
3 | |||
4 | // clock generation for YM2203 and SAA1099 |
||
5 | |||
6 | module clocks |
||
7 | ( |
||
8 | input wire fclk, // 56 MHz master clock |
||
9 | |||
10 | input wire saa_enabled, // whether SAA clock is enabled |
||
11 | |||
12 | output wire ymclk, // 3.5 MHz |
||
13 | output wire saaclk // 8 MHz |
||
14 | ); |
||
15 | |||
16 | reg [3:0] ym_cnt; |
||
17 | reg [2:0] saa_cnt; |
||
18 | |||
114 | chrv | 19 | reg main_clk; |
104 | lvd | 20 | |
114 | chrv | 21 | reg add_clk; |
22 | reg add_clk_neg; |
||
23 | |||
104 | lvd | 24 | // make ym clock (div by 16) |
25 | initial ym_cnt = 4'd0; // for simulation |
||
26 | // |
||
27 | always @(posedge fclk) |
||
28 | ym_cnt <= ym_cnt + 4'd1; |
||
29 | // |
||
30 | assign ymclk = ym_cnt[3]; |
||
31 | |||
32 | |||
33 | // make saa clock (div by 7) |
||
34 | // |
||
35 | // saacnt: 1 2 3 4 5 6 0 1 2 3 4 5 |
||
36 | // | | | | | | | | | | | | | |
||
37 | // fclk: _/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\__/``\ |
||
38 | // | | | | | | | | | | | | | |
||
39 | // saaclk:_/````````````````````\____________________/````````````````````\____________ |
||
40 | // |
||
41 | // |
||
42 | // |
||
43 | initial saa_cnt <= 3'd0; |
||
44 | // |
||
406 | chrv | 45 | always @(posedge fclk, negedge saa_enabled) |
46 | if( !saa_enabled ) |
||
47 | saa_cnt <= 3'd0; |
||
48 | else if( saa_cnt[2:1]==2'b11 ) |
||
104 | lvd | 49 | saa_cnt <= 3'd0; |
50 | else |
||
51 | saa_cnt <= saa_cnt + 3'd1; |
||
114 | chrv | 52 | |
53 | |||
54 | |||
104 | lvd | 55 | always @(posedge fclk) |
114 | chrv | 56 | main_clk <= ~saa_cnt[2]; |
57 | |||
58 | always @(posedge fclk) |
||
59 | add_clk <= !(saa_cnt==3'd3 || saa_cnt==3'd4); |
||
60 | always @* |
||
61 | if( !fclk ) |
||
62 | add_clk_neg <= add_clk; |
||
104 | lvd | 63 | |
114 | chrv | 64 | |
65 | assign saaclk = main_clk & add_clk_neg; |
||
66 | |||
104 | lvd | 67 | endmodule |
68 |