No need to use a PID. You can have a much simpler hysteresis control.
Thermal capacity of water is around $$4184 J/(kg·K)$$
In my case, the heater´s power was actually $$2kW = 2kJ/s$$
This means, it heats 1kg of water for about 0.5 K per second. In my case, 2kg water usually.
The bigger problem is precise measurement of the water temperature because of thermal convection. You want a circulator in there to keep thermal differences minimal.
Once you have established good measurement, you can do a simple hysteresis control, in my case I switched the heater on with a mechanical relays for 1s to have a 0.25 K rise.
Temp reading error is going to be around 0.5 K anyways, so don't bother with too much of a regulation.
For a purely resistive load, you will be fine with a simple relays, which also does the electrical isolation for you.
If you want to go for electronic switches, an optotriac will be just fine.
By the sounds of it you need to split your design up a bit more. Here's how I would do it:
Run the logic that does the clock configuration on a different clock domain entirely. FPGAs frequently have some low quality internal oscillator which will be available after power on. Use this clock for driving the logic that configures the clock generator.
Feed the logic that runs off the clock synthesiser directly from the synthesiser - don't put a multiplexer in the path (well you can, but you don't need to).
At power on, keep everything in reset except the logic in (1). Once the clock generator has been programmed, bring the rest of the logic out of reset.
As long as you remember to add a clock resynchronisers for signals/flags that go between the two clock domains, you should be fine.
It's frequently the case in FPGA designs that you will essentially have a "management" section of the design that runs off a free-running clock source which is always available. The management hardware is there to get everything ready after the FPGA is configured - things like preparing clock sources, PLLs, and so forth. You can then use that core to bring everything else out of reset once everything is prepared.
Best Answer
The absolute majority of PI(D) controllers in the world are implemented on 8/16/32-bit microprocessors. For example, Microchip has sold over 10 billion microcontrollers as of 2011. Another example: GE uses 99% microcontrollers and 1% FPGA for control loop execution (reaction on @Eugene Sh).
Some of my control loops for power electronics are run at 200 kHz and it's all on the C2000 series from TI- digital signal controllers (32-bit).
FPGAs are for the high-end stuff, such as MRI, ultrasound, etc.
I'd suggest that unless you need super high execution speed/MHz bandwidth or would like to learn VHDL/Verilog then stay with Arduino.
It certainly has better source-base than FPGAs.It is much easier to get started with Arduino than with FPGAs.Arduino Uno also can also sample analog signals, which FPGAs cannot without an external ADC chip. E.g. look at the Mercury FPGA card (http://www.micro-nova.com/mercury/).
The picture below shows the analog ports on the Arduino Uno board.