Hay muchos detalles que deberá resolver, pero la forma básica de hacerlo es tener una máquina de estados con 5 estados: inactivo, transmitir primero, transmitir segundo, transmitir tercero y transmitir cuarto. Cuando ingresa una palabra de 32 bits, pasa de Inactivo a través de los estados de transmisión, escribe un byte por ciclo de reloj, luego regresa al estado inactivo o tal vez comienza a transmitir el primer byte de la siguiente palabra si está disponible.
Las cosas adicionales que deberá averiguar son si necesita control de flujo en el bus de entrada de 32 bits, cómo el receptor determinará el inicio y el final del mensaje, si un mensaje de 32 bits es un paquete completo o si necesita para transmitir paquetes más largos generados 32 bits a la vez.
8b10 hace que la mayoría de estas opciones sea bastante fácil, ya que determina automáticamente el marco de bytes y proporciona palabras de código de control que se pueden usar para el marco de mensajes, pero debe asegurarse de que funcione para su aplicación.
El código se vería así:
reg [31:0] data_in;
reg [7:0] data_out;
always @(*) begin
case (state)
Idle: data_out = 8'b0;
Send1: data_out = data_in[31:24];
Send2: data_out = data_in[23:16];
Send3: data_out = data_in[15:8];
Send4: data_out = data_in[7:0];
endcase
end
Luego, debe asegurarse de que la máquina de estados se repita en los estados Enviar1 ... Enviar4 en el momento adecuado. También es posible que deba bloquear el registro data_in para que no cambie en el medio del envío, e implementar un indicador de ocupado para evitar que el remitente intente enviar un nuevo mensaje mientras el primero está en progreso.