Puh, das ist schon eine Weile her... Anbei mal zwei Screenshots, ich hab keine Test-VIs mehr gerade, die das ganze einfacher hätten und das ganze ist sonst eher unübersichtlich...
Zuerst muss man den Memoryblock mit starrer Größe definieren, dann noch einen Fifo, um ihn zu beschreiben. Das setz ich jetzt mal voraus... Dann:
Schreiben ist glaube ich leicht erklärt:
Der N-Anschluss ist mit der Länge des Datenblocks belegt, man muss vor dem Schreiben in den FIFO kontrollieren, ob der Datenblock nicht größer als der vorher reservierte Speicherbereich ist. Ist aber ja eigentlich kein Problem, weil man die Sachen vorher weiß.
Lesen etwas aufwändiger:
Die Ausgabe ist in einer zweistufigen Pipeline, um die Durchlaufzeit gering zu halten. Man kauft sich eine Latenz von einem Schleifendurchlauf ein, dafür ist die Ausgabe genau so schnell wie der DA-Wandler es kann, da die Berechnung vorher deutlich kürzer als die DA-Wandlung ist. Da in der Schleife noch ein paar andere Sachen passieren, ist das dazugehörige Schieberegister außerhalb. Nicht verwirren lassen.
Ich skaliere meine Memoryausgabe auch nochmal im Nachhinein, das sind die Multiplikation und das Shiften im rechten Teil des BD.
Um jetzt mehrmals den Speicherbereich auszugeben, setze ich das ganze in eine For-Schleife, die als Durchlaufanzahl das Produkt aus Speichertiefe und Anzahl der Ausgaben bekommt. Vor die Adressierung des Speichers setze ich jetzt eine Logische Und-Verknüpfung des Durchlaufzählers i mit der Zahl (N_Sp - 1), wobei N_Sp für die Anzahl der Werte im Speicher steht. Damit werden alle Bits die größer sind als die Speichertiefe ausgeblendet und der Speicher wird periodisch ausgegeben. Hielt ich damals für berechnungstechnisch am effektivsten, weiß nicht, ob es da mittlerweile bessere Sachen gibt.
Ach ja, die Sequenz braucht man hier wahrscheinlich nicht... Müsste der Compiler aber ausbügeln...
Viel Erfolg,
ch