He hecho el mismo ejemplo, pero ahora la rom en vez de tener el contenido "cableado" en el propio código verilog, lo lee del fichero externo rom2.list
Para que funcione en icestudio es necesario poner el fichero rom2.list en el directorio app/_build de icestudio. Lo ideal sería que se leyese desde el directorio donde está el propio proyecto, pero es algo que modificaremos para la próxima versión
Leer el contenido de una memoria desde un fichero externo es muy importante. Es lo que se usa para cargar las roms con el código máquina y datos de los procesadores diseñados en FPGA (soft-procesors), como por ejemplo el del Apollo XI. Un ensamblador externo genera este fichero
https://github.com/Obijuan/ACC/tree/master/hw/roadmap/07-rom-test-2