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.
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:
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.
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.
mng
dDebuggen
mng
dDebuggen
mng
Philipp