blob: c3b1a23d3afa2c91f2b633ee83481b64e44f7ef3 [file] [log] [blame]
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