module ldo_all( | |
// Output to clock PAD | |
//output CDC_CLK_OUT0, | |
//output CDC_CLK_OUT1, | |
//output CDC_CLK_OUT2, | |
// SPI Interface | |
input ldo_reset, // Active Low Reset | |
input signal_reset, | |
input [3:0] SPI_LDO_SS, // Slave Select | |
input clk, // Serial Clock | |
input SPI_LDO_MOSI, // Master Out Slave In | |
// output SPI_LDO_MISO, | |
// LDO interface | |
//output [72:0] data, | |
output reg [9:0] out, | |
`ifdef USE_POWER_PINS | |
inout vdda1, // User area 1 3.3V supply | |
inout vdda2, // User area 2 3.3V supply | |
inout vssa1, // User area 1 analog ground | |
inout vssa2, // User area 2 analog ground | |
inout vccd1, // User area 1 1.8V supply | |
inout vccd2, // User area 2 1.8v supply | |
inout vssd1, // User area 1 digital ground | |
inout vssd2, // User area 2 digital ground | |
`endif | |
); | |
//wire data_in; //SPI_LDO_MOSI_IN | |
wire [9:0] ldo_1_out; | |
wire [9:0] ldo_2_out; | |
wire [9:0] ldo_3_out; | |
wire [9:0] ldo_4_out; | |
wire [9:0] ldo_5_out; | |
wire [9:0] ldo_6_out; | |
wire [9:0] ldo_7_out; | |
wire [9:0] ldo_8_out; | |
wire [9:0] ldo_9_out; | |
wire [9:0] ldo_10_out; | |
reg [21:0] ldo_reg; | |
reg [21:0] ldo_reg_next; | |
reg [4:0] count; | |
reg [4:0] count_next; | |
ldo_1 ldo_1_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_1_out[9]), // Comparator Output | |
.ctrl_out(ldo_1_out[8:0]) | |
); | |
ldo_2 ldo_2_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_2_out[9]), // Comparator Output | |
.ctrl_out(ldo_2_out[8:0]) | |
); | |
ldo_3 ldo_3_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_3_out[9]), // Comparator Output | |
.ctrl_out(ldo_3_out[8:0]) | |
); | |
ldo_4 ldo_4_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_4_out[9]), // Comparator Output | |
.ctrl_out(ldo_4_out[8:0]) | |
); | |
ldo_5 ldo_5_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_5_out[9]), // Comparator Output | |
.ctrl_out(ldo_5_out[8:0]) | |
); | |
ldo_6 ldo_6_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_6_out[9]), // Comparator Output | |
.ctrl_out(ldo_6_out[8:0]) | |
); | |
ldo_7 ldo_7_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_7_out[9]), // Comparator Output | |
.ctrl_out(ldo_7_out[8:0]) | |
); | |
ldo_8 ldo_8_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_8_out[9]), // Comparator Output | |
.ctrl_out(ldo_8_out[8:0]) | |
); | |
ldo_9 ldo_9_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_9_out[9]), // Comparator Output | |
.ctrl_out(ldo_9_out[8:0]) | |
); | |
ldo_10 ldo_10_macro( | |
.clk(clk), //input | |
.reset(ldo_reset), //input | |
.trim1(ldo_reg[0]), //input | |
.trim2(ldo_reg[1]), | |
.trim3(ldo_reg[2]), | |
.trim4(ldo_reg[3]), | |
.trim5(ldo_reg[4]), | |
.trim6(ldo_reg[5]), | |
.trim7(ldo_reg[6]), | |
.trim8(ldo_reg[7]), | |
.trim9(ldo_reg[8]), | |
.trim10(ldo_reg[9]), | |
.mode_sel(ldo_reg[11:10]), // 2'b00 (Comparator & PT Array Test Mode) // 2'b01 (Controller Test Mode) // 2'b1X (LDO Run Mode) input | |
.std_ctrl_in(ldo_reg[12]), // Standalone Controller Test Input | |
.std_pt_in_cnt(ldo_reg[21:13]), // Standalone PT Array Test Input | |
.cmp_out(ldo_10_out[9]), // Comparator Output | |
.ctrl_out(ldo_10_out[8:0]) | |
); | |
always @(*) begin | |
ldo_reg_next = ldo_reg; | |
count_next = count; | |
case (SPI_LDO_SS) | |
4'b0000: out = ldo_1_out; | |
4'b0001: out = ldo_2_out; | |
4'b0010: out = ldo_3_out; | |
4'b0011: out = ldo_4_out; | |
4'b0100: out = ldo_5_out; | |
4'b0101: out = ldo_6_out; | |
4'b0110: out = ldo_7_out; | |
4'b0111: out = ldo_8_out; | |
4'b1000: out = ldo_9_out; | |
4'b1001: out = ldo_10_out; | |
default: out = ldo_1_out; | |
endcase | |
end | |
always @(negedge clk) begin | |
if(signal_reset) begin | |
if (count <= 5'd21) begin | |
count <= count_next + 1'b1; | |
ldo_reg <= {ldo_reg_next[20:0],SPI_LDO_MOSI}; | |
end | |
else begin | |
count <= count_next; | |
ldo_reg <= ldo_reg_next; | |
end | |
end | |
else begin | |
count <= 0; | |
ldo_reg <= ldo_reg_next; | |
end | |
end | |
endmodule |