Skip to content

Commit ffc6a56

Browse files
committed
ЛР13. Изменение спецификации на контроллеры uart
1 parent 1f5c1bc commit ffc6a56

File tree

3 files changed

+31
-27
lines changed

3 files changed

+31
-27
lines changed

Labs/13. Peripheral units/README.md

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ endmodule
473473
Для того, чтобы передача данных была успешно осуществлена, приемник и передатчик на обоих концах одного провода должны договориться о параметрах передачи:
474474

475475
* её скорости (бодрейт);
476-
* контроля целостности данных (использование бита четности/нечетности/отсутствие контроля);
476+
* контроля целостности данных (использовать или нет [бит четности](https://en.wikipedia.org/wiki/Parity_bit));
477477
* длины стопового бита.
478478

479479
Вам будут предоставлены модули, осуществляющие прием и передачу данных по этому интерфейсу, от вас лишь требуется написать модули, осуществляющие управление предоставленными модулями.
@@ -487,7 +487,7 @@ module uart_rx (
487487
output logic busy_o, // Сигнал о том, что модуль занят приемом данных
488488
input logic [16:0] baudrate_i, // Настройка скорости передачи данных
489489
input logic parity_en_i,// Настройка контроля целостности через бит четности
490-
input logic stopbit_i, // Настройка длины стопового бита
490+
input logic [1:0] stopbit_i, // Настройка длины стопового бита
491491
output logic [7:0] rx_data_o, // Принятые данные
492492
output logic rx_valid_o // Сигнал о том, что прием данных завершен
493493
@@ -504,7 +504,7 @@ module uart_tx (
504504
output logic busy_o, // Сигнал о том, что модуль занят передачей данных
505505
input logic [16:0] baudrate_i, // Настройка скорости передачи данных
506506
input logic parity_en_i,// Настройка контроля целостности через бит четности
507-
input logic stopbit_i, // Настройка длины стопового бита
507+
input logic [1:0] stopbit_i, // Настройка длины стопового бита
508508
input logic [7:0] tx_data_i, // Отправляемые данные
509509
input logic tx_valid_i // Сигнал о старте передачи данных
510510
);
@@ -544,7 +544,7 @@ module uart_rx_sb_ctrl(
544544
logic busy;
545545
logic [16:0] baudrate;
546546
logic parity_en;
547-
logic stopbit;
547+
logic [1:0] stopbit;
548548
logic [7:0] data;
549549
logic valid;
550550
@@ -574,7 +574,7 @@ module uart_tx_sb_ctrl(
574574
logic busy;
575575
logic [16:0] baudrate;
576576
logic parity_en;
577-
logic stopbit;
577+
logic [1:0] stopbit;
578578
logic [7:0] data;
579579
580580
endmodule
@@ -596,34 +596,38 @@ endmodule
596596

597597
В регистр `valid` модуля `uart_rx_sb_ctrl` записывается единица по положительному фронту clk_i, когда выход `rx_valid_o` равен единице. Данный регистр сбрасывается в ноль при выполнении **запроса на чтение** по адресу `0x00`, а также при получении сигнала `interrupt_return_i`. Сам регистр доступен для чтения по адресу `0x04`. Регистр `valid` подключается к выходу `interrupt_request_o`. Что позволяет узнать о пришедших данных и посредством прерывания.
598598

599-
На вход `tx_data_i` модуля `uart_tx` подаются данные из регистра `data` модуля `uart_tx_sb_ctrl`. Доступ на запись в этот регистр происходит по адресу `0x00` в моменты положительного фронта `clk_i`, когда сигнал `busy_o` равен нулю. Доступ на чтение этого регистра может осуществляться в любой момент времени.
599+
Доступ на запись в регистр `data` модуля `uart_tx_sb_ctrl` происходит по адресу `0x00` в моменты положительного фронта `clk_i`, когда сигнал `busy_o` равен нулю. Доступ на чтение этого регистра может осуществляться в любой момент времени.
600+
601+
На вход `tx_data_i` модуля `uart_tx` непрерывно подается младший байт входа `write_data_i`.
600602

601603
На вход `tx_valid_i` модуля `uart_tx` подается единица в момент выполнения **запроса на запись** по адресу `0x00` (при сигнале `busy` равном нулю). В остальное время на вход этого сигнала подается `0`.
602604

603-
В случае **запроса на запись** значения `1` по адресу `0x24` (адресу сброса), все регистры модуля-контроллера должны сброситься. При этом регистр `baudrate` должен принять значение `9600`, регистр `parity` должен принять значение `1`, регистр, `stopbit` должен принять значение `1`. Остальные регистры должны принять значение `0`.
605+
В случае **запроса на запись** значения `1` по адресу `0x24` (адресу сброса), все регистры модуля-контроллера должны сброситься. При этом регистр `baudrate` должен принять значение `9600`, регистр, `stopbit` должен принять значение `1`. Остальные регистры должны принять значение `0`.
604606

605607
Адресное пространство контроллера `uart_rx_sb_ctrl`:
606608

607-
|Адрес|Режим доступа|Допустимые значения| Функциональное назначение |
608-
|-----|-------------|-------------------|---------------------------------------------------------------------------------------------------------|
609-
|0x00 | R | [0:255] | Чтение из регистра `data`, хранящего значение принятых данных |
610-
|0x04 | R | [0:1] | Чтение из регистра `valid`, сообщающего о том, что есть непрочитанные данные в регистре `data` |
611-
|0x08 | R | [0:1] | Чтение из регистра `busy`, сообщающего о том, что модуль находится в процессе приема данных |
612-
|0x0C | RW | [0:131072] | Чтение/запись регистра `baudrate`, отвечающего за скорость передачи данных |
613-
|0x10 | RW | [0:1] | Чтение/запись регистра `parity`, отвечающего за включение отключение проверки данных через бит четности |
614-
|0x14 | RW | [0:1] | Чтение/запись регистра `stopbit`, отвечающего за длину стопового бита |
615-
|0x24 | W | 1 | Запись сигнала сброса |
609+
|Адрес|Режим доступа|Допустимые значения| Функциональное назначение |
610+
|-----|-------------|-------------------|------------------------------------------------------------------------------------------------------------|
611+
|0x00 | R | [0:255] | Чтение из регистра `data`, хранящего значение принятых данных |
612+
|0x04 | R | [0:1] | Чтение из регистра `valid`, сообщающего о том, что есть непрочитанные данные в регистре `data` |
613+
|0x08 | R | [0:1] | Чтение из регистра `busy`, сообщающего о том, что модуль находится в процессе приема данных |
614+
|0x0C | RW | [0:131072] | Чтение/запись регистра `baudrate`, отвечающего за скорость передачи данных |
615+
|0x10 | RW | [0:1] | Чтение/запись регистра `parity_en`, отвечающего за включение отключение проверки данных через бит четности |
616+
|0x14 | RW | [1:2] | Чтение/запись регистра `stopbit`, хранящего длину стопового бита |
617+
|0x24 | W | 1 | Запись сигнала сброса |
616618

617619
Адресное пространство контроллера `uart_tx_sb_ctrl`:
618620

619-
|Адрес|Режим доступа|Допустимые значения| Функциональное назначение |
620-
|-----|-------------|-------------------|---------------------------------------------------------------------------------------------------------|
621-
|0x00 | RW | [0:255] | Чтение и запись регистра `data`, хранящего значение отправляемых данных |
622-
|0x08 | R | [0:1] | Чтение из регистра `busy`, сообщающего о том, что модуль находится в процессе передачи данных |
623-
|0x0C | RW | [0:131072] | Чтение/запись регистра `baudrate`, отвечающего за скорость передачи данных |
624-
|0x10 | RW | [0:1] | Чтение/запись регистра `parity`, отвечающего за включение отключение проверки данных через бит четности |
625-
|0x14 | RW | [0:1] | Чтение/запись регистра `stopbit`, отвечающего за длину стопового бита |
626-
|0x24 | W | 1 | Запись сигнала сброса |
621+
|Адрес|Режим доступа|Допустимые значения| Функциональное назначение |
622+
|-----|-------------|-------------------|------------------------------------------------------------------------------------------------------------|
623+
|0x00 | RW | [0:255] | Чтение и запись регистра `data`, хранящего значение отправляемых данных |
624+
|0x08 | R | [0:1] | Чтение из регистра `busy`, сообщающего о том, что модуль находится в процессе передачи данных |
625+
|0x0C | RW | [0:131072] | Чтение/запись регистра `baudrate`, отвечающего за скорость передачи данных |
626+
|0x10 | RW | [0:1] | Чтение/запись регистра `parity_en`, отвечающего за включение отключение проверки данных через бит четности |
627+
|0x14 | RW | [1:2] | Чтение/запись регистра `stopbit`, хранящего длину стопового бита |
628+
|0x24 | W | 1 | Запись сигнала сброса |
629+
630+
В случае установки регистра `parity_en` в значение `1`, модуль uart_tx будет дополнять посылку битом четности (который вычисляется как исключающее ИЛИ по всем битам передаваемого байта). Модуль `uart_rx` же будет выполнять проверку этого бита с тем, что он рассчитает самостоятельно. Однако в случае появления ошибки, внешне его поведение никак не изменится (поскольку выход `err_o` данного модуля закомментирован ради простоты системы).
627631

628632
### Видеоадаптер
629633

Labs/13. Peripheral units/peripheral modules/uart_rx.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module uart_rx (
2525
output logic busy_o,
2626
input logic [16:0] baudrate_i,
2727
input logic parity_en_i,
28-
input logic stopbit_i,
28+
input logic [1:0] stopbit_i,
2929
output logic [7:0] rx_data_o,
3030
output logic rx_valid_o
3131
//, input logic cfg_en_i,

Labs/13. Peripheral units/peripheral modules/uart_tx.sv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module uart_tx (
2525
output logic busy_o,
2626
input logic [16:0] baudrate_i,
2727
input logic parity_en_i,
28-
input logic stopbit_i,
28+
input logic [1:0] stopbit_i,
2929
input logic [7:0] tx_data_i,
3030
input logic tx_valid_i
3131
//, input logic cfg_en_i,
@@ -161,7 +161,7 @@ module uart_tx (
161161
baudgen_en = 1'b1;
162162
if (bit_done)
163163
begin
164-
if (stopbit_i)
164+
if (stopbit_i[1])
165165
NS = STOP_BIT_LAST;
166166
else
167167
NS = IDLE;

0 commit comments

Comments
 (0)