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

Last change on this file was 1899, checked in by murphpo, 11 years ago

Updated clock controller on/off board logic/code

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