Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab1

.docx
Скачиваний:
3
Добавлен:
02.01.2023
Размер:
92.19 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №1

по дисциплине «Интерфейсы периферийных устройств»

Тема: SPI

Студенты гр.

Преподаватель

Дорохов А. В.

Санкт-Петербург

202

Цель работы 2

Цель работы

Целью работы является проектирование интерфейса SPI.

Задание

Для данной работы используются следующие значения:

№ бригады

Такт, МГц

Режим

Кол-во бит

1

1

0

4

Так как на плате, представленной в лаборатории, тактовый сигнал в 40 МГц, то необходимо поделить его на 40, таким образом получается такт в 1 МГц.

Для данного задания используется одно устройство slave, передача происходит только от master к slave, поэтому можно опустить MISO, оставив только MOSI сигнал.

Выполнение работы

Для проектирования master устройства интерфейса SPI нам необходимо следующее:

  • сдвиговый регистр для передачи данных с параллельной загрузкой данных

  • делитель частоты (с 40 МГц до 2 МГц)

  • конечный автомат, для реализации некоторых функций мастера

Рисунок 1. Верхний уровень устройства

  1. clk_divider

Реализует функции делителя частоты.

Рисунок 2. Делитель частоты

Сначала делим частоту на 10 при помощи счетчика. После этого делим получившуюся частоту еще в два раза при помощи T-триггера.

  1. SPImaster

Реализует конечный автомат, описывающий поведение примитивной реализации интерфейса. Так же реализуется сдвиговый регистр с параллельной загрузкой.

Рисунок 3. Конечный автомат

Состояния:

(начальное) Init – ожидание перед очередной посылкой.

Shift – shift

Load – load

Done – конечное состояние

Исходный код модуля:

module SPImaster

(

input wire clk, // clock

input wire [3:0] data, // transmitted data

output reg sck, // serial clock

output wire mosi, // master output slave input

output wire ss // slave select

);

enum reg[1:0] {IDLE, DATA_R, DATA_W} state, next; // current and next states for FSM

reg [3:0] shift; // shift register

reg [2:0] cntr; // counter for num of writed data

// shift reg realisation

always @(posedge clk)

begin

if (state == DATA_W)

begin

shift = {shift[2:0], 1'b0};

cntr++;

end

else if (state == IDLE)

begin

shift = data;

cntr = '0;

end

else

begin

shift = shift;

cntr = cntr;

end

state = next;

end

// FSM next states block and output block

always @(state, shift)

begin

case (state)

IDLE:

begin

sck = 1'b0;

mosi = 1'b0;

ss = 1'b1;

next = DATA_R;

end

DATA_R:

begin

sck = 1'b1;

mosi = shift[3];

ss = 1'b0;

next = DATA_W;

end

DATA_W:

begin

sck = 1'b0;

mosi = shift[3];

ss = 1'b0;

next = (cntr == 3) ? IDLE : DATA_R;

end

endcase

end

endmodule

Вывод

В результате выполнения данной работы был спроектировано главное устройство, передающее данные по интерфейсу SPI.

Соседние файлы в предмете Интерфейсы Периферийных Устройств