So lesen Sie Werte aus einem ROM, um einen VGA-Monitor zu steuern

Zuerst muss ich sagen, dass ich immer noch ein Anfänger bin und VHDL lerne, daher ist jeder Rat eine große Hilfe.

Was ich versuche, ist, ein Bild in einem VGA-Monitor mit einem FPGA (Cyclone II) zu steuern, indem ich eine .mif- Datei mit den Bits verwende, die diesem Bild entsprechen, und sie in ein ROM lade , damit ich dann die Werte und lesen kann Zeig's ihnen.

Mein Problem tritt auf, wenn ich die Ports für die Komponente festlegen muss, die ich in meinem Code verwende.

architecture aa of VGA is

--some signal declarations here

component RomImage is
port(   address : in std_logic_vector(13 downto 0);
        inclock : in std_logic;
        outclock : in std_logic;
        qrom : out std_logic_vector(23 downto 0)
);
end component;

begin

RomIm : lpm_rom
generic map(lpm_file=>"GameOver.mif",lpm_numwords=>9500, lpm_width=>24, lpm_widthad=>14)
port map(address=>address,inclock=>inclock,outclock=>outclock,q=>qrom);

-- other process and logic

-- Output logic (only red, same for blue and green)

redout(9 downto 7) <= qrom(23 downto 21) when x>=225 and x<=415 and y>=250 and y<=300 else
                      rojo(5 downto 3);

Ich weiß nicht wirklich, welchen Takt ich für inclock und outclock verwenden muss , einer davon dient zum Lesen der Adresse und der andere für die Ausgabe q[].
Im Design gebe ich einen 50-MHz-Takt ein und teile dann für den VGA-Takt die Frequenz, um 25 MHz zu erhalten, die ich brauche, damit der Bildschirm funktioniert.

Ich könnte mir vorstellen, dass der Screensweep mit der Frequenz synchronisiert werden muss, mit der man die Werte aus dem ROM lesen muss.

Tut mir leid, wenn es zu viel Code oder verwirrend ist, ich werde versuchen, es bei Bedarf zu erweitern

Antworten (1)

Seit einem Tag unbeantwortet, also lass es mich versuchen. Dieses ROM ist sehr ungewöhnlich. Ich bin seit mehr als 25 Jahren ASIC-Ingenieur und habe noch nie ein ROM (oder einen Speicher) mit einem Port und zwei Takten gesehen.
Versuchen Sie, das Modell für dieses ROM zu finden, oder finden Sie die Spezifikationen, wenn es sich um ein FPGA-Bibliothekselement handelt. Andernfalls wäre es am besten, für beide Ports dieselbe Uhr zu verwenden. Sie sagen, Sie arbeiten an VGA, das 25 MHz benötigt, also ist das wahrscheinlich Ihr Pixeltakt. Dann müssen Sie in jedem Taktzyklus drei analoge Signale ausgeben. (Und hsync, vsync + Pixeltakt). Ihr 24 Bit breites ROM ist wahrscheinlich RGB als 888, daher müssen Sie dieses ROM mit 25 MHz austakten.
Alternativ könnten Sie versuchen, einen entgegengesetzten Takt für Adresse und Daten zu verwenden.

Es sah für mich zunächst auch ungewöhnlich aus, aber als ich die lpm_rom-Dokumentation überprüfte, war es einfach so, dass inclock für die Registrierung des Adressbusses und outclock für die Registrierung von Mem-Inhalten in q dient. Es stehen Dual-Clock-Modus und Single-Clock-Modus zur Verfügung.
Ah, sorry, wie Sourabh sagte, ist der Inclock für die Adresse und der Outclock für die Ausgabe. Ich verstehe, was du meinst, das nächste Mal, wenn ich kann, werde ich das versuchen und sehen, was passiert, aber ich glaube, ich weiß, was ich jetzt tun muss, danke!
Versuchen Sie, hier eine FPGA-FRAGE zu posten