Ok, I'm done with this for now. I'm attaching the files in case anyone interested. The working blinky example:
i2c.addr = 1 # default
osc0.power = always
osc0.matrix = off
osc0.pre_div = 8
osc0.div1 = 1
osc0.out1 = enable
cnt_dly_1.clk_src = osc0
cnt_dly_1.dly_in = low
cnt_dly_1.data = 128
cnt_dly_1.fn_edge = rising_edge_reset
cnt_dly_1.sync = 2dff
lut2_0.in0 = dff_1
lut2_0.in1 = dff_1
lut2_0.lut = nand
dff_1.clk = cnt_dly_1
dff_1.d = lut2_0
io14.input_mode = digital_schmitt
io14.pull_value = 10K
io14.pull_mode = up
lut2_3.in0 = dff_1
lut2_3.in1 = io14
lut2_3.lut = and
io6.output_mode = push_pull_2x
io6.output = lut2_3
io6.output_oe = enable
io3.output_mode = push_pull_2x
io3.output = osc0_1
io3.output_oe = enable
The source clock is 2048 Hz OSC0 pre-divided by 8. It then further divided by cnt_dly_1 by 128. It then goes to the DFF_1 clock and the data input is the inverted output. Note that the same could have been achieved by specifying "dff_1.dff_output = qb" and connecting the output to the input directly. I used lut2_0 as an inverter to show more logic. The output is IO6. It is further gated by IO14 input, again to show more stuff. The 2048 Hz is also output on IO3.
I have not verified all the bit values, so there are likely some mistakes. And it is also likely that some bits can be better grouped/described. But this all will be obvious with use. At least now there is a computer-readable description of the part, which can be used to generate C defines, for example to allow run-time dynamic configuration from the host MCU.
Error checking is very minimal. Conflicting resource use is detected on the bit/register level. If two blocks demand the same bit to be set to different values, then something is conflicting. I have no doubt it is possible to intentionally create situation that is not detected by this system.
But for now I've had my fun and I want to work on other stuff. Now that I know how this part works, I'll keep it in mind and may be it will come in handy in some project.
Also, can anyone attach any generated binary from the IDE? The last 16 bytes on the blank part seem to contain some information. I wonder what IDE puts there. In my experiments I have not tried to reprogram those bits and just left them as is. They are reserved in the datasheet.