source: PlatformSupport/CustomPeripherals/pcores/w3_clock_controller_axi_v3_01_b/hdl/verilog/at_boot_reg_writer.v

Last change on this file was 3909, checked in by welsh, 10 years ago

Updating clock controller software.

File size: 2.0 KB
Line 
1module at_boot_reg_writer
2(
3    input clk,
4    input clk_valid,
5
6    input clk_src_sel, //1=on-board, 0=off-board
7
8    output spi_running,
9   
10    output spi_mosi,
11    output spi_sclk,
12    output reg spi_csn = 1
13);
14
15parameter INCLUDE_IBUFGDS = 1;
16parameter NUM_REGS = 3;
17
18//AD9512 registers are 8 bits each, addressed by 7 bit addresses
19
20//reg45[0]: clock src sel (0=CLK2=off-board, 1=CLK1=on-board)
21parameter ADDR0 = 7'h45;
22parameter DATA0 = 8'b0000_0000; //LSB to be overwritten by config input
23
24//reg51[7]: bypass divider for OUT3 (1=bypass)
25parameter ADDR1 = 7'h51;
26parameter DATA1 = 8'b1000_0000;
27
28//reg5A[0]: self-clearing reg update flag
29parameter ADDR2 = 7'h5A;
30parameter DATA2 = 8'b0000_0001;
31
32reg [0:2] cnt_reg = 3'h0;
33reg [0:4] cnt_bit = 5'h0;
34reg [0:3] cnt_clk_en = 4'h0;
35
36wire done;
37
38wire clk_en;
39assign clk_en = (cnt_clk_en == 4'hf);
40
41reg [0:24*3-1] spi_shift_reg = {9'b0, ADDR0, DATA0, 9'b0, ADDR1, DATA1, 9'b0, ADDR2, DATA2};
42//reg [0:24*3-1] spi_shift_reg = {24'h800001, 24'h800001, 24'h800001};//sim test vector
43//reg [0:24*3-1] spi_shift_reg = {24'h800002, 24'h800003, 24'h800004};//sim test vector
44
45always @(posedge clk) begin
46
47    if(!done & clk_en) begin
48
49        cnt_bit <= cnt_bit + 1;
50
51        if(cnt_bit == 5'h1f) begin
52            cnt_bit <= 5'h00;
53            cnt_reg <= cnt_reg + 1;
54        end
55       
56        if( (cnt_bit >= 4) && (cnt_bit < 28) ) begin
57            spi_csn <= 1'b0;
58        end
59        else begin
60            spi_csn <= 1'b1;
61        end
62
63        if( (cnt_bit > 4) && (cnt_bit <= 28) ) begin
64            spi_shift_reg[0:24*NUM_REGS-1] <= {spi_shift_reg[1:24*NUM_REGS-1], 1'b0};
65        end
66        else begin
67            spi_shift_reg <= spi_shift_reg;
68        end
69    end
70end
71
72assign done = ((cnt_bit == 5'h1f) && (cnt_reg == NUM_REGS-1));
73
74//assign spi_mosi = (cnt_bit == 16 && cnt_reg == 0) ? (~clk_src_sel) : spi_shift_reg[0];
75assign spi_mosi = (cnt_bit == 28 && cnt_reg == 0) ? (clk_src_sel) : spi_shift_reg[0];
76assign spi_sclk = cnt_clk_en[0];
77assign spi_running = (!done) || (cnt_reg==5'h0);
78
79always @(posedge clk) begin
80    if((!done) && clk_valid)
81        cnt_clk_en = cnt_clk_en + 1;
82end
83
84endmodule
Note: See TracBrowser for help on using the repository browser.