¿Cómo usar IO Buffer con ubicación definida en VHDL?

Estoy tratando de programar el sintetizador ADF4158 PLL con SPARTAN 6 FPGA usando Microboard LX9. Estudié VHDL durante un semestre 4 años antes, y después de eso no tuve ningún uso práctico. Así que necesito la sugerencia de algunos expertos para refrescar mis conocimientos y lograr mi objetivo. A continuación se muestra el diagrama de bloques para explicar mi objetivo.

ingrese la descripción de la imagen aquí

Estoy planeando usar la PC para escribir los valores de REGISTRO para el ADF4158 en un búfer de E / S usando una herramienta GUI ya que la configuración del registro es muy compleja. Microblaze es el controlador principal, que establece una señal de habilitación ALTA para que el bloque REMITENTE copie los valores de REGISTRO en el ADF4158, cuando finaliza la escritura del búfer de E/S por parte de la PC. El ADF4158 tiene 8 registros cada uno con 32 bits. A continuación se muestra el diagrama de bloques del bloque SENDER:

ingrese la descripción de la imagen aquí

El ADF4158 utiliza una secuencia de tiempo particular para transferir los valores a los 8 registros. El valor del registro deseado se identifica por el LSB de los datos de 32 bits de cada secuencia de bits de registro. La línea de selección debe cambiarse después de cada transferencia de datos de registro. Imagen de arriba.

A continuación se muestra el código que escribí para establecer el objetivo deseado:

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;

Ahora mi pregunta es, quiero que SENDER lea los datos del IO Buffer y los envíe al dispositivo ADF4158. ¿Cómo envié la conexión, o es posible codificar para leer un búfer IO con una dirección definida? Esta ubicación del búfer de E/S es donde la PC almacenará los datos. No estoy seguro de si el código que escribí es correcto, por lo que agradecería cualquier sugerencia de modificación.

¿Por qué su puerto MOSI tiene 8 bits de ancho?
Eso es un error súper grave @mng gracias por señalarlo. Debería ser de 31 a 0. Editaré la publicación.
En realidad, esperaría que MOSI tenga un solo bit de ancho, suponiendo que su módulo emisor esté conectado directamente al chip PLL. Es una interfaz SPI.
@mng gracias por la sugerencia, hice los cambios, sugiera el código actual.
Hay muchos problemas con su código, comenzando con la sintaxis. Debe trabajar con un simulador y probar cada bloque de su diseño por separado antes de armarlo todo. Probablemente también necesite comprender más acerca de cómo usar SPI .
Su fragmento de código está lleno de errores de sintaxis. Por favor, ejecútelo a través de una herramienta como una verificación de cordura antes de publicar el código. La lista de errores está aquí: sigasi.com/sites/www.sigasi.com/files/SO/SO_146804.html

Respuestas (1)

La información que proporcionó para la interfaz de sincronización y comunicaciones parece ser para el enlace entre el remitente y el dispositivo ADF4158. Si quisiera leer los datos del IO Buffer en el Micro Blaze, tendría que descubrir la interfaz entre los IO Buffers y el remitente.

Desde el primer diagrama que publicó, parece que esa interfaz podría ser de una sola vía, es decir, que los datos se pueden enviar desde el Microblaze al búfer de IO y luego al remitente, en cuyo caso el búfer de IO al que se envían los datos está determinado por el software del Microblaze en lugar de señales de control externas.

Si desea obtener más ayuda para descubrir cómo controlar la interfaz entre el microblaze y el remitente, publique algunos detalles sobre la interfaz y podemos continuar desde allí.

Espero que esto haya ayudado.