Wie kann ich ein Bild in Verilog einlesen?

Ich habe ein .mif-Bild, das ich in Verilog verschlüsseln möchte. Dazu muss ich das Bild in das Programm einlesen und in einem Array speichern.

Das Bild wäre 160 x 120 und ich möchte es in einem Array der Größe 160 * 120 * 3 speichern (es wird mit 3 multipliziert, da jedes Pixel eine 3-Bit-Zahl benötigt, um seine Farbe zu speichern). Also im Idealfall würde ich so etwas tun:

wire [16] image = read ("myimage.mif")

Bisher habe ich mir die anfänglichen Blockaden angesehen und sie scheinen zu helfen. Ich konnte jedoch keine spezifische Anleitung zum Einlesen von Bildern finden. Beachten Sie, dass ich dies in Verilog und nicht in SystemVerilog tun muss.

Könnte mir bitte jemand zeigen, wie das geht oder mir zumindest sagen, welche Art von Dingen ich untersuchen sollte, um dies tun zu können? Danke schön.

Antworten (1)

In diesem Fall ist es möglicherweise eine gute Idee, das Bild mit einer anderen Programmiersprache, die tatsächlich über Bildbearbeitungsbibliotheken verfügt, wie Python mit PIL, in ein Zwischenformat vorzuverarbeiten. Sie möchten sich wirklich nicht mit dem Parsen des MIF-Formats in Verilog befassen müssen. Nachdem Sie das Bild eingelesen haben, können Sie ein 160x120-Array in einem Format ausgeben, das Sie problemlos in Verilog einlesen können.

Danke schön. Dies ist für Projekte und eine der Anforderungen ist, dass wir keine Programmiersprachen verwenden können. Das Bild muss nicht im .MIF-Format vorliegen - ich nahm nur an, dass dies der Fall sein sollte, da alle meine Arbeiten mit Bildern in der Vergangenheit .MIF-Bilder verwendet haben. Welches Format schlagen Sie vor und wie würde ich in diesem Format lesen?
Welches Format Sie wählen, hängt stark davon ab, was Sie mit dem Bild machen möchten. Wenn Sie es beispielsweise auf einem TFT anzeigen möchten, können Sie das Rohformat 565 (16 Bit) wählen.
Ein ppm oder bmp wäre höchstwahrscheinlich einfacher zu analysieren als ein MIF.
@alex.forencich Einlesen in bmp wäre perfekt! Wie würde ich das tun?
@Majenko-notGoogle Ich würde das Bild in Untermatrizen aufteilen, die Untermatrizen verschlüsseln, sie wieder zu einem Bild kombinieren und dieses Bild dann über VGA anzeigen.
Rohformate (565, 888 usw.) sind auf den niedrigen Ebenen am einfachsten zu bearbeiten, da sie nur ein Array von Pixeldaten sind. "Echte" Grafikformate wie BMP enthalten Header-Daten und oft Komprimierung und andere Dinge, die im Weg stehen. Das Festhalten an einem Block von Rohpixeldaten würde bedeuten, dass Sie ihn einfach als Daten manipulieren, ohne sich wirklich um das Bildformat zu kümmern - es sind nur Pixel.
Siehe en.wikipedia.org/wiki/BMP_file_format . Wenn Sie eine 24-Bit- oder 32-Bit-Bitmap bekannter Größe speichern, können Sie möglicherweise einfach den Header überspringen und die Pixeldaten direkt lesen.