## Step 1: Define the symbolic variables
Let's define the symbolic variables for the problem:
- $x_1$ represents the number of 1st generation motherboards
- $x_2$ represents the number of 2nd generation motherboards

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

## 3: Translate the constraints into symbolic notation
The constraints are:
- Silicon: $4x_1 + 6x_2 \leq 450$
- Assembly time: $20x_1 + 30x_2 \leq 900$
- Soldering time: $30x_1 + 40x_2 \leq 500$
- Minimum 1st generation motherboards: $x_1 \geq 6$
- Minimum 2nd generation motherboards: $x_2 \geq 7$
- Non-negativity: $x_1 \geq 0, x_2 \geq 0$

However, since $x_1$ and $x_2$ represent the number of motherboards, they must be integers. But first, we'll model this as a linear program and then adjust for integer solutions if necessary.

## 4: Write down the complete symbolic representation
```json
{
'sym_variables': [('x1', '1st generation motherboards'), ('x2', '2nd generation motherboards')],
'objective_function': '100*x1 + 125*x2',
'constraints': [
    '4*x1 + 6*x2 <= 450',
    '20*x1 + 30*x2 <= 900',
    '30*x1 + 40*x2 <= 500',
    'x1 >= 6',
    'x2 >= 7',
    'x1 >= 0',
    'x2 >= 0'
]
}
```

## 5: Convert the symbolic representation into Gurobi code
```python
import gurobi

def solve_motherboard_production():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(name="x1", lb=0, vtype=gurobi.GRB.INTEGER)  # 1st generation motherboards
    x2 = model.addVar(name="x2", lb=0, vtype=gurobi.GRB.INTEGER)  # 2nd generation motherboards

    # Set the objective function
    model.setObjective(100 * x1 + 125 * x2, gurobi.GRB.MAXIMIZE)

    # Add constraints
    model.addConstr(4 * x1 + 6 * x2 <= 450)  # Silicon constraint
    model.addConstr(20 * x1 + 30 * x2 <= 900)  # Assembly time constraint
    model.addConstr(30 * x1 + 40 * x2 <= 500)  # Soldering time constraint
    model.addConstr(x1 >= 6)  # Minimum 1st generation motherboards
    model.addConstr(x2 >= 7)  # Minimum 2nd generation motherboards

    # Update model
    model.update()

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: x1 = {x1.varValue}, x2 = {x2.varValue}")
    else:
        print("No optimal solution found")

solve_motherboard_production()
```