Wie verwende ich IO-Puffer mit definiertem Speicherort in VHDL?

Ich versuche, den ADF4158 PLL-Synthesizer mit SPARTAN 6 FPGA mit Microboard LX9 zu programmieren. Ich habe vor 4 Jahren VHDL für ein Semester studiert und danach keine praktische Anwendung mehr. Ich brauche also einen Expertenvorschlag, um mein Wissen aufzufrischen und mein Ziel zu erreichen. Unten ist das Blockdiagramm, um mein Ziel zu erklären.

Geben Sie hier die Bildbeschreibung ein

Ich plane, den PC zu verwenden, um die REGISTER-Werte für den ADF4158 mit einem GUI-Tool in einen IO-Puffer zu schreiben, da die Registereinstellungen sehr komplex sind. Microblaze ist der Hauptcontroller, der ein Freigabesignal auf HIGH für den SENDER-Block setzt, um die REGISTER-Werte in den ADF4158 zu kopieren, wenn der IO-Pufferschreibvorgang durch den PC beendet ist. Der ADF4158 hat 8 Register mit je 32 Bit. Unten ist das Blockdiagramm des SENDER-Blocks:

Geben Sie hier die Bildbeschreibung ein

Der ADF4158 verwendet eine bestimmte Timing-Sequenz, um die Werte in die 8 Register zu übertragen. Der Wert für das gewünschte Register wird durch das LSB der 32-Bit-Daten jeder Registerbitsequenz identifiziert. Die Select Line muss nach jeder Registerdatenübertragung umgeschaltet werden. Bild oben.

Unten ist der Code, den ich geschrieben habe, um das gewünschte Ziel festzulegen:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Sender is
Port ( SS : out  STD_LOGIC := 1;
CLK : in  STD_LOGIC;
MOSI : out  STD_LOGIC_VECTOR(31 downto 0);
Enable : in  STD_LOGIC;
Data_IN : in  STD_LOGIC_VECTOR(31 downto 0));
end Sender;

architecture Behavioral of Sender is
variable counter : integer := 0;
variable bitCount : integer := 0;
begin
process(CLK, Enable)
begin
if rising_edge(CLK) and Enable = '1' then
if(bitCount < 320) ---check to avoid 320 bit out of bound
if (counter < 32) ---counter to toggle SS after every 32 bits
SS <= 0;
MOSI <= DataIN(bitCount);
counter <= counter + 1;
bitCount <= bitCount+ 1;
else
SS <= 1;
counter <= 0;
end if;
end if;
end if;
end process;
end Behavioral;

Jetzt ist meine Frage, ich möchte, dass der SENDER die Daten aus dem IO-Puffer liest und an das ADF4158-Gerät sendet. Wie kann ich die Verbindung senden oder ist es möglich, einen IO-Puffer mit einer definierten Adresse zu lesen? Dieser Ort des IO-Puffers ist derjenige, an dem der PC Daten speichert. Ich bin mir nicht sicher, ob der von mir geschriebene Code korrekt ist, daher würde ich mich sehr über Änderungsvorschläge freuen.

Warum ist Ihr MOSI-Port 8 Bit breit?
Das ist ein super schlimmer Fehler @mng danke für den Hinweis. Es sollte von 31 bis 0 sein. Ich werde den Beitrag bearbeiten.
Eigentlich würde ich erwarten, dass MOSI ein Bit breit ist, vorausgesetzt, Ihr Sendermodul ist direkt mit dem PLL-Chip verbunden. Es ist eine SPI-Schnittstelle.
@mng danke für den Vorschlag, ich habe die Änderungen vorgenommen, bitte schlagen Sie den aktuellen Code vor.
Es gibt viele Probleme mit Ihrem Code, beginnend mit der Syntax. Sie sollten mit einem Simulator arbeiten und jeden Block Ihres Designs separat testen, bevor Sie alles zusammensetzen. Sie müssen wahrscheinlich auch mehr über die Verwendung von SPI verstehen .
Ihr Code-Snippet ist voller Syntaxfehler. Bitte führen Sie es als Plausibilitätsprüfung durch ein Tool, bevor Sie Code posten. Die Fehlerliste ist hier: sigasi.com/sites/www.sigasi.com/files/SO/SO_146804.html

Antworten (1)

Die Informationen, die Sie für die Zeitsteuerungs- und Kommunikationsschnittstelle bereitgestellt haben, scheinen für die Verbindung zwischen dem Sender und dem ADF4158-Gerät zu gelten. Wollte man die Daten aus dem IO Buffer auf dem Micro Blaze auslesen, müsste man die Schnittstelle zwischen den IO Buffers und dem Sender auskundschaften.

Aus dem ersten Diagramm, das Sie gepostet haben, sieht es so aus, als ob diese Schnittstelle ein Weg sein könnte, das heißt, dass Daten vom Microblaze an den IO-Puffer und dann an den Absender gesendet werden können, in diesem Fall der IO-Puffer, an den die Daten gesendet werden to wird eher von der Software auf dem Microblaze als von externen Steuersignalen bestimmt.

Wenn Sie weitere Hilfe benötigen, um herauszufinden, wie Sie die Schnittstelle zwischen dem Microblaze und dem Sender steuern können, posten Sie einige Details über die Schnittstelle, und wir können von dort aus weitermachen.

Hoffe das hat geholfen.