Ich mache gerade die ersten Schritte mit einem Tang Nano 4K Board und der aktuellen Gowin Entwicklungsumgebung. Mein Ziel ist einfach nur den ARM Core zu instantiieren und per Software die LED blinken zu lassen. Dazu habe ich den angehängten Verilog-Code geschrieben.
Der 27 MHz-Takt (xosc) soll für die CPU auf 1 MHz heruntergeteilt werden und ich möchte einen synchronen Reset erzeugen (cpuresetn_sync, ob's nötig ist oder nicht). Die Signale beobachte ich mit einem Logikanalysator.
Wenn ich den reset_n des ARM Cores direkt an den Reset-Taster anschließe (ext_reset_n, hier auskommentiert), dann funktioniert alles wie es soll, cpuclkout und cpureset werden auf den zugewiesenen Pins ausgegeben und die LED blinkt. Sobald ich aber den reset_n des ARM Cores an cpuresetn_sync anschließe, geht nichts mehr. Es sieht aus, als würde der always-Block keinen Takt mehr bekommen oder im Reset steckenbleiben. Beide Signale (xosc und ext_reset_n) werden auf die Pins test1 und test2 ausgegeben und sind aktiv, so wie es sein soll.
Für mich ist es mysteriös, wie der Reset-Eingang des ARM-Cores den always-Block beeinflussen kann. Hat jemand eine Idee, was da schiefgeht?