To be honest, the motivation we chose iCE40UltraPlus is its low-power-consumption feature. We have a project powered by single core optical fiber, and a photovoltaic cell is used to convert light to electricity. Considering the ultra low power consumption of iCE40, our team leader made the ultimate decision and he allocated this job to me. ice40up5k only has 48 IO pins, including power and ground, literally the general input/output ports are less, so the hardware engineer connected a DDR SPI RAM to it with only 4 pins used. (CS, SCLK, MISO, MOSI)
but the SCLK is Double-Data-Rate, the first time I see DDR SPI.
In conclusion, if Lattice does not offer DDR primitives, I tend to use two clock domains in my design, clockA for general use, clockA*2 for operating DDR SPI.