Red de conocimiento informático - Material del sitio web - Comunicación SPI basada en Verilog

Comunicación SPI basada en Verilog

t;

reg byte_received; // Nivel alto cuando se recibe un byte

reg [7:0] byte_data_received

always @(posedge clk)

comenzar

if(~SSEL_active)

bitcnt lt;= 3'b000;

else

if (SCK_risingedge)

comenzar

bitcnt lt; = bitcnt 3'b001;

// Implementar el registro de desplazamiento a la izquierda (porque recibimos los datos MSB primero)

byte_data_received lt; = {byte_data_received[6:0], MOSI_data};

end

end

siempre @(posedge clk) byte_received <= SSEL_active amp; SCK_risingedge amp; (bitcnt==3 'b111);

// Usamos el LSB de los datos recibidos para controlar el LED

reg LED;

siempre @(posedge clk) if(byte_received) LED lt;=byte_ data_received[0];

La última es la parte de transmisión.

reg [7:0] byte_data_sent;

reg [7:0] cnt;

siempre @(posedge clk) if( SSEL_startmessage) cntlt;= cnt 8'h1; // cuenta los mensajes

siempre @(posedge clk)

if(SSEL_active)

begin

if (SSEL_ startmessage)

byte_data_sent lt; = cnt; // El primer byte enviado en el mensaje es el recuento de mensajes

else

if(SCK_fallingedge)

comenzar

if(bitcnt==3'b000)

byte_data_sent lt; = 8'h00 // Después de eso, enviamos 0s

else

byte_data_sent lt;= {byte_data_ sent[6:0], 1'b0};

fin

fin

assign MISO = byte_data_sent[7]; // Enviar MSB primero

// Suponemos que solo hay un esclavo en el bus SPI

//Entonces no lo necesitamos establecer tres para el búfer de estado MISO

//De lo contrario, necesitamos tres estados de MISO cuando SSEL no esté activado

endmodule

Hemos establecido entre ARM y ¡Comunicación FPGA!

Ejecutar el código

Cuando ejecutamos el código ARM, podemos

ver los cambios de estado del LED y los datos devueltos por la FPGA.