To solve this optimization problem, we first need to define the decision variables, objective function, and constraints based on the given information.

Let's denote:
- \(x_1\) as the number of 1st generation motherboards produced.
- \(x_2\) as the number of 2nd generation motherboards produced.

The objective is to maximize profit. Given that the profit per 1st generation motherboard is $100 and per 2nd generation motherboard is $125, the objective function can be written as:
\[ \text{Maximize:} \quad 100x_1 + 125x_2 \]

Now, let's outline the constraints based on the available resources and minimum production requirements:

1. **Silicon Constraint**: The total silicon used by both types of motherboards cannot exceed 450 units.
   - A 1st generation motherboard requires 4 units of silicon.
   - A 2nd generation motherboard requires 6 units of silicon.
   - \(4x_1 + 6x_2 \leq 450\)

2. **Assembly Time Constraint**: The total assembly time used cannot exceed 900 minutes.
   - A 1st generation motherboard requires 20 minutes of assembly.
   - A 2nd generation motherboard requires 30 minutes of assembly.
   - \(20x_1 + 30x_2 \leq 900\)

3. **Soldering Time Constraint**: The total soldering time used cannot exceed 500 minutes.
   - A 1st generation motherboard requires 30 minutes of soldering.
   - A 2nd generation motherboard requires 40 minutes of soldering.
   - \(30x_1 + 40x_2 \leq 500\)

4. **Minimum Production Constraints**:
   - At least 6 1st generation motherboards must be made: \(x_1 \geq 6\)
   - At least 7 2nd generation motherboards must be made: \(x_2 \geq 7\)

5. **Non-Negativity Constraints**: Both \(x_1\) and \(x_2\) must be non-negative since the number of motherboards cannot be negative.

Given these constraints and the objective function, we can now formulate this problem in Gurobi Python code:

```python
from gurobipy import *

# Create a new model
m = Model("Motherboard_Production")

# Define variables
x1 = m.addVar(vtype=GRB.INTEGER, name="First_Gen_Motherboards", lb=6)  # Minimum of 6 first gen motherboards
x2 = m.addVar(vtype=GRB.INTEGER, name="Second_Gen_Motherboards", lb=7)  # Minimum of 7 second gen motherboards

# Objective function: Maximize profit
m.setObjective(100*x1 + 125*x2, GRB.MAXIMIZE)

# Constraints
m.addConstr(4*x1 + 6*x2 <= 450, name="Silicon_Constraint")
m.addConstr(20*x1 + 30*x2 <= 900, name="Assembly_Time_Constraint")
m.addConstr(30*x1 + 40*x2 <= 500, name="Soldering_Time_Constraint")

# Solve the model
m.optimize()

# Print results
for v in m.getVars():
    print(f"{v.varName}: {v.x}")
print(f"Objective (Max Profit): {m.objVal}")

```