FPGA. Slave-модуль интерфейса SPI
Serial Peripheral Interface (SPI) замечателен тем, что позволяет подключать к микроконтроллеру периферийные устройства, при необходимости соединяя их в цепочку устройств, работающих как единый сдвиговый регистр. Подключение микроконтроллера к FPGA именно по интерфейсу SPI удобно с одной стороны небольшим числом используемых выводов, и с другой стороны большинство микроконтроллеров оснащены SPI-интерфейсом. Плюс, конечно же, высокая скорость передачи данных.
Slave-модуль интерфейса SPI
Написанный мною slave-модуль интерфейса SPI не поддерживает режим каскадирования (не имеет вывода SlaveOut), поддерживает режим передачи данных CPOL=0, CPHA=0, MSB first.
Вот его исходный код на языке Verilog (скачать):
// SPI Slave module
// CPOL=0, CPHA=0, MSB first
module SPIslave(
input wire nResetIN,
input wire clkIN,
input wire nSSIN,
input wire SCKIN,
input wire MOSIIN,
output wire MISOOUT,
output reg [7:0] dataOUT,
output reg byteReceivedOUT
);
reg [7:0] data;
assign MISOOUT = data[7];
always @ (negedge SCKIN)
if (nResetIN & ~nSSIN)
data <= { data[6:0], MOSIIN };
reg [3:0] count;
always @ (posedge SCKIN)
if (~nResetIN | nSSIN)
count <= 4'h0;
else
count <= count + 1'b1;
always @ (count[3])
dataOUT <= data;
reg state;
always @ (posedge clkIN)
if (~nResetIN | nSSIN) begin
state <= 1'b0;
byteReceivedOUT <= 1'b0;
end
else
if (~(count[2] | count[1] | count[0])) begin
if (state)
byteReceivedOUT <= 1'b1;
end
else begin
state <= 1'b1;
byteReceivedOUT <= 1'b0;
end
endmodule
В качестве тестового примера я подключил модуль к выводам светодиодов, которыми оснащена плата (скачать BDF):
Подключив к FPGA плату микроконтроллера Olimexino-STM32, я успешно протестировал функционирование данного модуля на скорости передачи 18 МГц (частота тактирования CLK равнялась 48 МГц).
См. также
Автор: Андрей Шаройко <vanyamboe@gmail.com>