Years ago I developed high-speed (1.2MHz) PWM modulators with discrete components, see attached schematic. The current mirror is made using ALD1102 (could use other FETs or BJTs, or a resistor pulling up to a much higher voltage, but very low capacitance is important). The comparator U101 was TLV3502, it creates the ramp waveform and compares that with the error amplifier output (VERROR) to create the PWM output.
Getting the reset part of the waveform fast and clean was the trickiest part. I found that resetting the ramp using a very low capacitance schottky (D101, SMSA3923) worked better than an open-drain FET or BJT. RC values were adjusted manually to provide a specific reset pulse duration (was between 10-50ns, I forget exactly). The ramp doesn't reset all the way down to 0V, but this isn't a problem. The resistor network R110, R112, and R113 shifts/scales the error amplifier output (VERROR) to match the amplitude and offset of the ramp waveform.