Merge branch 'MPSU:master' into master

This commit is contained in:
BROsandr
2024-02-12 11:26:06 +03:00
committed by GitHub
14 changed files with 150 additions and 3577 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 379 KiB

After

Width:  |  Height:  |  Size: 379 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -225,7 +225,19 @@ _Рисунок 6. Схема четырехбитного сумматора,
## Задание ## Задание
Вам необходимо реализовать полный 32-разрядный сумматор. Соединять вручную 32 однотипных модуля чревато усталостью и ошибками, поэтому можно сначала создать 4-разрядный сумматор (либо другой разрядности), а затем из набора 4-разрядных сумматоров сделать 32-битный. Опишите полный однобитный сумматор, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_. Прототип модуля следующий:
```SystemVerilog
module fulladder(
input logic a_i,
input logic b_i,
input logic carry_i,
output logic sum_o,
output logic carry_o
);
```
Далее, вам необходимо реализовать полный 32-разрядный сумматор. Соединять вручную 32 однотипных модуля чревато усталостью и ошибками, поэтому можно сначала создать 4-разрядный сумматор (либо другой разрядности), а затем из набора 4-разрядных сумматоров сделать 32-битный.
Модуль должен быть описан в соответствии со следующим прототипом: Модуль должен быть описан в соответствии со следующим прототипом:
@@ -273,26 +285,30 @@ module fulladder32(
### Порядок выполнения задания ### Порядок выполнения задания
1. Согласно [руководству по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md): 1. Создайте проект, согласно [руководству по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md)
1. Создайте проект; 2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`.
2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`. 3. Опишите в файле модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_.
2. Опишите в файле модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_. 4. Проверьте 1-битный сумматор. Для этого:
3. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`. 1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`.
4. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом. 2. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом.
5. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
6. Убедитесь по сигналам временной диаграммы, что модуль работает корректно. 4. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
7. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder4`. 5. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder4`.
8. Опишите модуль `fulladder4`, схема которого представлена на _Рис. 5 и 6_, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде `векторов`. 6. Опишите модуль `fulladder4`, схема которого представлена на _Рис. 5 и 6_, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде [`векторов`](../../Basic%20Verilog%20structures/Modules.md#векторы).
9. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда. 1. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда.
10. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`. 7. Проверьте 4-битный сумматор. Для этого:
11. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`. 1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`.
12. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 2. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
13. Убедитесь, что модуль работает корректно и в консоль вывелось сообщение: `fulladder4 SUCCESS!!!`. 3. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
14. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder32`. 4. Проверьте содержимое TCL-консоли. Убедитесь в появлении сообщения о завершении теста. В случае, если в tcl-консоли написано `CLICK THE BUTTON 'Run All'`, вам необходимо нажать соответствующую кнопку на панели моделирования.
15. Опишите модуль `fulladder32` так, чтобы в нем выполнялось поразрядное сложение двух 32-разрядных чисел и входного бита переноса. Его можно реализовать через последовательное соединение восьми 4-битных сумматоров, либо же можно соединить 32 однобитных сумматора (как вручную, так и с помощью конструкции `generate for`). 5. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
16. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 31-го разряда. 8. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder32`.
17. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder32`. 9. Опишите модуль `fulladder32` так, чтобы в нем выполнялось поразрядное сложение двух 32-разрядных чисел и входного бита переноса. Его можно реализовать через последовательное соединение восьми 4-битных сумматоров, либо же можно соединить 32 однобитных сумматора (как вручную, так и с помощью конструкции `generate for`).
18. Вставьте содержимое файла [`tb_fulladder32.sv`](tb_fulladder32.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`. 1. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 31-го разряда.
19. Запустите моделирование. 10. Проверьте 32-битный сумматор. Для этого:
20. Убедитесь, что модуль работает корректно. 1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder32`.
21. Следующим шагом вы можете проверить работоспособность вашей цифровой схемы в ПЛИС [здесь](board%20files). 2. Вставьте содержимое файла [`tb_fulladder32.sv`](tb_fulladder32.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
3. Запустите моделирование.
4. Проверьте содержимое TCL-консоли. Убедитесь в появлении сообщения о завершении теста. В случае, если в tcl-консоли написано `CLICK THE BUTTON 'Run All'`, вам необходимо нажать соответствующую кнопку на панели моделирования.
5. Если в tcl-консоли были сообщения об ошибках, разберитесь в причине ошибок по временной диаграмме и [исправьте их](../../Vivado%20Basics/Debug%20manual.md).
11. Проверьте работоспособность вашей цифровой схемы в ПЛИС [здесь](https://github.com/MPSU/APS/tree/master/Labs/01.%20Adder/board%20files).

View File

@@ -1,6 +1,6 @@
////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
// Company: MIET // Company: MIET
// Engineer: Nikita Bulavin // Engineer: Andrei Solodovnikov
// Module Name: tb_fulladder // Module Name: tb_fulladder
// Project Name: RISCV_practicum // Project Name: RISCV_practicum
@@ -10,15 +10,12 @@
module tb_fulladder(); module tb_fulladder();
parameter TIME_OPERATION = 100; logic tb_a_i;
parameter TEST_VALUES = 8; logic tb_b_i;
logic tb_carry_i;
wire tb_a_i; logic tb_carry_o;
wire tb_b_i; logic tb_sum_o;
wire tb_carry_i; logic [2:0] test_case;
wire tb_carry_o;
wire tb_sum_o;
fulladder DUT ( fulladder DUT (
.a_i(tb_a_i), .a_i(tb_a_i),
@@ -28,42 +25,18 @@ parameter TEST_VALUES = 8;
.carry_o(tb_carry_o) .carry_o(tb_carry_o)
); );
integer i, err_count = 0; assign {tb_a_i, tb_b_i, tb_carry_i} = test_case;
reg [4:0] running_line;
reg [5*8-1:0] line_dump;
wire sum_dump;
wire carry_o_dump;
assign tb_a_i = running_line[4];
assign tb_b_i = running_line[3];
assign tb_carry_i = running_line[2];
assign sum_dump = running_line[1];
assign carry_o_dump = running_line[0];
initial begin initial begin
$display( "Start test: "); $display("\nTest has been started\n");
for ( i = 0; i < TEST_VALUES; i = i + 1 ) #5ns;
begin test_case = 3'd0;
running_line = line_dump[i*5+:5]; repeat(8) begin
#TIME_OPERATION; #5ns;
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin test_case++;
$display("ERROR! carry_i = %b; (a)%b + (b)%b = ", tb_carry_i, tb_a_i, tb_b_i, "(carry_o)%b (sum_o)%b;", tb_carry_o, tb_sum_o, " carry_o_dump: %b, sum_dump: %b", carry_o_dump, sum_dump); end
err_count = err_count + 1'b1; $display("\nTest has been finished\n");
end $finish();
end
$display("Number of errors: %d", err_count);
if( !err_count ) $display("\nfulladder SUCCESS!!!\n");
$finish();
end end
initial line_dump = {
5'b00000,
5'b10010,
5'b01010,
5'b11001,
5'b00110,
5'b10101,
5'b01101,
5'b11111};
endmodule endmodule

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
// Company: MIET // Company: MIET
// Engineer: Nikita Bulavin // Engineer: Andrei Solodovnikov
// Module Name: tb_fulladder4 // Module Name: tb_fulladder4
// Project Name: RISCV_practicum // Project Name: RISCV_practicum
@@ -10,14 +10,12 @@
module tb_fulladder4(); module tb_fulladder4();
parameter TIME_OPERATION = 100; logic [3:0] tb_a_i;
parameter TEST_VALUES = 400; logic [3:0] tb_b_i;
logic tb_carry_i;
wire [3:0] tb_a_i; logic tb_carry_o;
wire [3:0] tb_b_i; logic [3:0] tb_sum_o;
wire tb_carry_i; logic [8:0] test_case;
wire tb_carry_o;
wire [3:0] tb_sum_o;
fulladder4 DUT ( fulladder4 DUT (
.a_i(tb_a_i), .a_i(tb_a_i),
@@ -27,445 +25,19 @@ module tb_fulladder4();
.carry_o(tb_carry_o) .carry_o(tb_carry_o)
); );
integer i, err_count = 0; assign {tb_a_i, tb_b_i, tb_carry_i} = test_case;
reg [13:0] running_line;
reg [14*400:0] line_dump;
wire [3:0] sum_dump;
wire carry_o_dump;
assign tb_a_i = running_line[13:10];
assign tb_b_i = running_line[9:6];
assign tb_carry_i = running_line[5];
assign sum_dump = running_line[4:1];
assign carry_o_dump = running_line[0];
`ifdef __debug__
initial begin initial begin
$display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop(); $display("Test has been started");
for ( i = 0; i < TEST_VALUES; i = i + 1 ) $display( "\n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
begin #5ns;
running_line = line_dump[i*14+:14]; test_case = 3'd0;
#TIME_OPERATION; repeat(512) begin
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin #5ns;
$display("ERROR! carry_i = %b; (a)%h + (b)%h = ", tb_carry_i, tb_a_i, tb_b_i, "(carry_o)%b (sum_o)%h;", tb_carry_o, tb_sum_o, " carry_o_dump: %b, sum_dump: %h", carry_o_dump, sum_dump); test_case++;
err_count = err_count + 1'b1; end
end $display("\nTest has been finished\n");
end $finish();
$display("Number of errors: %d", err_count);
if( !err_count ) $display("\nfulladder4 SUCCESS!!!\n");
$finish();
end end
`else
initial begin
for ( i = TEST_VALUES-1; i >=0 ; i = i - 1 )
begin
running_line = line_dump[i*14+:14];
#TIME_OPERATION;
end
$finish();
end
`endif
initial line_dump = { endmodule
14'h1787,
14'h1787,
14'h1f8b,
14'h0318,
14'h0c8a,
14'h0b1c,
14'h1110,
14'h0d0e,
14'h1914,
14'h0402,
14'h050a,
14'h1914,
14'h1008,
14'h0402,
14'h0108,
14'h050a,
14'h1218,
14'h1d16,
14'h090c,
14'h090c,
14'h1c0e,
14'h0804,
14'h0318,
14'h1008,
14'h1008,
14'h1a1c,
14'h1008,
14'h0e16,
14'h0210,
14'h1a1c,
14'h1a1c,
14'h0e16,
14'h0804,
14'h0612,
14'h0e16,
14'h180c,
14'h163c,
14'h0826,
14'h0c06,
14'h182e,
14'h102a,
14'h0804,
14'h1c0e,
14'h1008,
14'h0402,
14'h0c28,
14'h0022,
14'h0000,
14'h1c0e,
14'h142c,
14'h0846,
14'h0000,
14'h0064,
14'h0022,
14'h0064,
14'h0804,
14'h0022,
14'h0804,
14'h106c,
14'h0868,
14'h0826,
14'h0804,
14'h0804,
14'h180c,
14'h1008,
14'h180c,
14'h0000,
14'h0804,
14'h0000,
14'h00a6,
14'h1008,
14'h00c6,
14'h0022,
14'h0042,
14'h102a,
14'h0064,
14'h10ce,
14'h0000,
14'h104a,
14'h0022,
14'h00a6,
14'h01ae,
14'h1194,
14'h014a,
14'h00a6,
14'h014a,
14'h012a,
14'h0000,
14'h0064,
14'h0064,
14'h00c6,
14'h012a,
14'h0108,
14'h00e8,
14'h0042,
14'h014a,
14'h0318,
14'h0000,
14'h0022,
14'h039c,
14'h0294,
14'h033a,
14'h014a,
14'h018c,
14'h0294,
14'h0210,
14'h035a,
14'h0000,
14'h00c6,
14'h012a,
14'h073c,
14'h00a6,
14'h0042,
14'h014a,
14'h06fa,
14'h079e,
14'h0402,
14'h014a,
14'h06d8,
14'h052c,
14'h0210,
14'h0084,
14'h0444,
14'h0084,
14'h00a6,
14'h0108,
14'h04ea,
14'h0846,
14'h0210,
14'h07e3,
14'h05f2,
14'h0846,
14'h0ccc,
14'h0b3e,
14'h0e16,
14'h0c6a,
14'h052c,
14'h0804,
14'h0696,
14'h0612,
14'h1dfe,
14'h077e,
14'h018c,
14'h13a7,
14'h182e,
14'h1fad,
14'h1f49,
14'h1aa3,
14'h0b61,
14'h184e,
14'h00c6,
14'h11b6,
14'h14f2,
14'h0a78,
14'h0676,
14'h1323,
14'h1f29,
14'h1dfe,
14'h0ba3,
14'h1936,
14'h161a,
14'h0e16,
14'h0e58,
14'h0888,
14'h0db4,
14'h0970,
14'h058e,
14'h0990,
14'h19da,
14'h146e,
14'h04ea,
14'h165c,
14'h19da,
14'h033a,
14'h0210,
14'h0990,
14'h144c,
14'h0c06,
14'h0108,
14'h090c,
14'h039c,
14'h0b1c,
14'h0696,
14'h014a,
14'h1d58,
14'h0c48,
14'h0c48,
14'h1c50,
14'h02d6,
14'h1110,
14'h0108,
14'h0e9a,
14'h0804,
14'h1914,
14'h0084,
14'h0318,
14'h1c0e,
14'h1914,
14'h1110,
14'h1914,
14'h1e1e,
14'h1008,
14'h0084,
14'h1a81,
14'h050a,
14'h0a14,
14'h1c0e,
14'h1b05,
14'h1008,
14'h0c06,
14'h0210,
14'h071a,
14'h1e1e,
14'h1e1e,
14'h1e1e,
14'h090c,
14'h0108,
14'h0210,
14'h1c0e,
14'h0a14,
14'h0804,
14'h180c,
14'h1008,
14'h0612,
14'h180c,
14'h161a,
14'h0e16,
14'h1008,
14'h1e1e,
14'h0210,
14'h1a1c,
14'h140a,
14'h0634,
14'h0c06,
14'h0402,
14'h0804,
14'h0424,
14'h0c06,
14'h0424,
14'h0424,
14'h0826,
14'h0c06,
14'h102a,
14'h0402,
14'h180c,
14'h0804,
14'h0042,
14'h106c,
14'h0c48,
14'h1870,
14'h1008,
14'h0868,
14'h182e,
14'h0042,
14'h0042,
14'h1870,
14'h1008,
14'h102a,
14'h1008,
14'h102a,
14'h0022,
14'h00a6,
14'h1870,
14'h0868,
14'h10f0,
14'h00c6,
14'h104a,
14'h00e8,
14'h102a,
14'h108c,
14'h00a6,
14'h0064,
14'h0042,
14'h0000,
14'h0022,
14'h10ae,
14'h1194,
14'h102a,
14'h1132,
14'h012a,
14'h0022,
14'h0042,
14'h0000,
14'h00a6,
14'h00a6,
14'h01ae,
14'h0084,
14'h012a,
14'h0042,
14'h0042,
14'h0022,
14'h014a,
14'h0000,
14'h00a6,
14'h0000,
14'h0274,
14'h012a,
14'h0274,
14'h0022,
14'h00e8,
14'h014a,
14'h0000,
14'h0274,
14'h0232,
14'h00a6,
14'h012a,
14'h02f8,
14'h0042,
14'h079e,
14'h071a,
14'h06b8,
14'h0232,
14'h0612,
14'h05b0,
14'h014a,
14'h0232,
14'h0108,
14'h0084,
14'h01f0,
14'h012a,
14'h018c,
14'h0990,
14'h09b2,
14'h0612,
14'h0252,
14'h056e,
14'h0d72,
14'h0000,
14'h04c8,
14'h0c06,
14'h0c6a,
14'h0edc,
14'h09b2,
14'h0042,
14'h00a6,
14'h0e58,
14'h13c7,
14'h094e,
14'h165c,
14'h182e,
14'h0232,
14'h0dd4,
14'h0612,
14'h18b2,
14'h1f29,
14'h1a61,
14'h016c,
14'h0afc,
14'h140a,
14'h05d0,
14'h1110,
14'h06b8,
14'h05f2,
14'h1e1e,
14'h184e,
14'h1301,
14'h0e9a,
14'h1787,
14'h094e,
14'h02d6,
14'h08ca,
14'h11b6,
14'h06fa,
14'h0f21,
14'h0424,
14'h16e3,
14'h1aa3,
14'h039c,
14'h1194,
14'h073c,
14'h108c,
14'h108c,
14'h1b05,
14'h108c,
14'h1512,
14'h184e,
14'h0210,
14'h0b5e,
14'h0804,
14'h180c,
14'h090c,
14'h1fcd,
14'h148e,
14'h0dd4,
14'h129c,
14'h079e,
14'h0000,
14'h0888,
14'h108c,
14'h1194,
14'h1787,
14'h0b1c,
14'h0f83,
14'h1f07,
14'h0084,
14'h0402,
14'h0000,
14'h1110,
14'h108c,
14'h1512};
endmodule

View File

@@ -298,7 +298,7 @@ _Таблица 2. Список операций сравнения._
3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран модуль `tb_alu`. 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран модуль `tb_alu`.
4. Убедитесь, что симуляция завершена (об этом будет соответствующее сообщение в консоли). По завершению симуляции, в случае отсутствия ошибок, будет выведено сообщение "SUCCESS", в противном случае будут выведены сообщения об этих ошибках. 4. Убедитесь, что симуляция завершена (об этом будет соответствующее сообщение в консоли). По завершению симуляции, в случае отсутствия ошибок, будет выведено сообщение "SUCCESS", в противном случае будут выведены сообщения об этих ошибках.
5. В случае, если были найдены ошибки, вы должны найти и исправить их. Для этого руководствуйтесь [документом](../../Vivado%20Basics/Debug%20manual.md). 5. В случае, если были найдены ошибки, вы должны найти и исправить их. Для этого руководствуйтесь [документом](../../Vivado%20Basics/Debug%20manual.md).
5. Добавьте в проект модуль верхнего уровня ([nexys_alu.sv](board%20files/nexys_alu.sv)), соединяющий АЛУ с периферией в ПЛИС. Описание модуля находится [здесь](board%20files) 5. Добавьте в проект модуль верхнего уровня ([nexys_alu.sv](board%20files/nexys_alu.sv)), соединяющий АЛУ с периферией в ПЛИС. Описание модуля находится [здесь](https://github.com/MPSU/APS/tree/master/Labs/02.%20Arithmetic-logic%20unit/board%20files)
6. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc), файл ограничений, добавленный в первой лабораторной содержит другие данные, вам необходимо вставить содержимое файла для текущей лабы). 6. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc), файл ограничений, добавленный в первой лабораторной содержит другие данные, вам необходимо вставить содержимое файла для текущей лабы).
7. Проверьте работу АЛУ в ПЛИС. 7. Проверьте работу АЛУ в ПЛИС.

View File

@@ -346,7 +346,7 @@ mоdulе rf_r𝚒sсv(
2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_rf_riscv`). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_rf_riscv`).
4. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!** 4. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!**
5. Добавьте в проект модуль верхнего уровня ([nexys_rf_riscv.sv](board%20files/nexys_rf_riscv.sv)), соединяющий регистровый файл с периферией в ПЛИС. Описание модуля находится [здесь](board%20files) 5. Добавьте в проект модуль верхнего уровня ([nexys_rf_riscv.sv](board%20files/nexys_rf_riscv.sv)), соединяющий регистровый файл с периферией в ПЛИС. Описание модуля находится [здесь](https://github.com/MPSU/APS/tree/master/Labs/03.%20Register%20file%20and%20memory/board%20files)
6. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе. 6. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
7. Проверьте работу регистрового файла в ПЛИС. 7. Проверьте работу регистрового файла в ПЛИС.

View File

@@ -26,7 +26,7 @@
Доп. задание, выполняемое дома: Доп. задание, выполняемое дома:
6. Написать программу для процессора и на модели убедиться в корректности ее выполнения ([#задание по разработке программы](#задание-по-проверке-процессора)) 6. Написать программу для процессора и на модели убедиться в корректности ее выполнения ([Индивидуальное задание](Индивидуальное%20задание)).
> Для того, чтобы номера таблиц и рисунков лучше соотносились друг с другом и сопутствующим текстом, первая схема разрабатываемой микроархитектуры будет обозначена как Рисунок 0. Все последующие схемы будут совпадать по нумерации с таблицами, обозначающими способ кодирования инструкций. > Для того, чтобы номера таблиц и рисунков лучше соотносились друг с другом и сопутствующим текстом, первая схема разрабатываемой микроархитектуры будет обозначена как Рисунок 0. Все последующие схемы будут совпадать по нумерации с таблицами, обозначающими способ кодирования инструкций.
@@ -358,7 +358,7 @@ endmodule
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня. 4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
5. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!** 5. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!**
6. В этот раз, в конце не будет сообщения о том, работает ли ваше устройство или в нем есть ошибки. Вы должны самостоятельно проверить работу модуля, перенеся его внутренние сигналы на временную диаграмму, и [проверив](../../Vivado%20Basics/Debug%20manual.md) логику их работы. 6. В этот раз, в конце не будет сообщения о том, работает ли ваше устройство или в нем есть ошибки. Вы должны самостоятельно проверить работу модуля, перенеся его внутренние сигналы на временную диаграмму, и [проверив](../../Vivado%20Basics/Debug%20manual.md) логику их работы.
4. Добавьте в проект модуль верхнего уровня ([nexys_cybercobra_demo.sv](board%20files/nexys_cybercobra_demo.sv)), соединяющий процессор с периферией в ПЛИС. Описание работы модуля находится [здесь](board%20files) 4. Добавьте в проект модуль верхнего уровня ([nexys_cybercobra_demo.sv](board%20files/nexys_cybercobra_demo.sv)), соединяющий процессор с периферией в ПЛИС. Описание работы модуля находится [здесь](https://github.com/MPSU/APS/tree/master/Labs/04.%20Primitive%20programmable%20device/board%20files)
5. Замените содержимое файла, инициализирующего память инструкций новой программой, которая размещена [`здесь`](board%20files/demo.mem). 5. Замените содержимое файла, инициализирующего память инструкций новой программой, которая размещена [`здесь`](board%20files/demo.mem).
6. Убедитесь, что у файла, инициализирующего память инструкций выставлен тип `Memory Initialization Files`, а не `Memory File`. 6. Убедитесь, что у файла, инициализирующего память инструкций выставлен тип `Memory Initialization Files`, а не `Memory File`.
7. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе. 7. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.

View File

@@ -188,7 +188,7 @@ _Рисунок 2. Микроархитектура процессора._
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня. 4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
5. **Во время симуляции убедитесь, что в логе есть сообщение о завершении теста!** 5. **Во время симуляции убедитесь, что в логе есть сообщение о завершении теста!**
6. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле. 6. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле.
4. Добавьте в проект модуль верхнего уровня ([nexys_riscv_unit.sv](board%20files/nexys_riscv_unit.sv)), соединяющий основной ваш процессор с периферией в ПЛИС. Описание работы модуля находится [здесь](board%20files). 4. Добавьте в проект модуль верхнего уровня ([nexys_riscv_unit.sv](board%20files/nexys_riscv_unit.sv)), соединяющий основной ваш процессор с периферией в ПЛИС. Описание работы модуля находится [здесь](https://github.com/MPSU/APS/tree/master/Labs/06.%20Datapath/board%20files).
5. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе. 5. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
6. Проверьте работу процессора в ПЛИС. 6. Проверьте работу процессора в ПЛИС.

View File

@@ -2,7 +2,7 @@
В этой лекции вы познакомились с кругом вопросов, которым занимается дисциплина «Архитектура процессорных систем», посмотрели небольшой исторический очерк, обобщенный план дисциплины и разобрали несколько основных определений (которые надо знать!), такие как: В этой лекции вы познакомились с кругом вопросов, которым занимается дисциплина «Архитектура процессорных систем», посмотрели небольшой исторический очерк, обобщенный план дисциплины и разобрали несколько основных определений (которые надо знать!), такие как:
> **Процессор** — программно-управляемое устройство, выполненное на одной интегральной схеме и предназначенное для цифровой обработки информации и управления этим процессом. > **Процессор** — программно-управляемое устройство, предназначенное для цифровой обработки информации и управляющее этим процессом.
> **Архитектура** — абстрактная модель функциональных возможностей процессора (средства, которыми может пользоваться программист). > **Архитектура** — абстрактная модель функциональных возможностей процессора (средства, которыми может пользоваться программист).
> **Микроархитектура** — физическая модель процессора, которая устанавливает состав, порядок и принципы взаимодействия его основных функциональных частей (структурная организация). > **Микроархитектура** — физическая модель процессора, которая устанавливает состав, порядок и принципы взаимодействия его основных функциональных частей (структурная организация).

View File

@@ -6,7 +6,7 @@
Отдельно подчеркну: нижеизложенное является необходимым, но недостаточным для успешной сдачи экзамена. Отдельно подчеркну: нижеизложенное является необходимым, но недостаточным для успешной сдачи экзамена.
**Процессор** это программно-управляемое устройство, как правило, выполненное на одной интегральной схеме, осуществляющее цифровую обработку информации и управление этим процессом. **Процессор** это программно-управляемое устройство, осуществляющее цифровую обработку информации и управление этим процессом.
**Микроконтроллер** это устройство, конструктивно выполненное на базе одной интегральной схемы и содержащее в себе процессор, оперативное и постоянное запоминающие устройства, а также различные периферийные устройства (например: АЦП, ЦАП, контроллеры интерфейсов, таймеры, модули ШИМ и т.д.). **Микроконтроллер** это устройство, конструктивно выполненное на базе одной интегральной схемы и содержащее в себе процессор, оперативное и постоянное запоминающие устройства, а также различные периферийные устройства (например: АЦП, ЦАП, контроллеры интерфейсов, таймеры, модули ШИМ и т.д.).
@@ -34,7 +34,7 @@
**Устройство управления** блок процессора, организующий последовательную выборку команд из памяти, их дешифрацию и формирование соответствующих управляющих сигналов для всех блоков процессора. **Устройство управления** блок процессора, организующий последовательную выборку команд из памяти, их дешифрацию и формирование соответствующих управляющих сигналов для всех блоков процессора.
**Конвейер команд** (Вычислительный конвейер) это способ временного распараллеливания исполняемых команд, при котором выполнение команд разделяется на несколько более простых операций (называемых ступенями), под каждую из которых выделен свой блок аппаратуры и организована передача данных между ними, благодаря чему можно одновременно выполнять несколько команд на разных стадиях конвейера. **Конвейер команд** (Вычислительный конвейер) это способ временного распараллеливания исполняемых команд, при котором выполнение команд разделяется на несколько более простых операций (называемых ступенями), под каждую из которых выделен свой блок аппаратуры и организована передача данных между ними, благодаря чему можно одновременно выполнять несколько команд на разных стадиях конвейера.
**Конфликты конвейера** это ситуации, которые препятствуют выполнению очередной команды из потока команд в предназначенном для нее такте, по причине нехватки ресурсов (структурный конфликт), зависимости от данных, получаемых в еще незавершенной команде (конфликт по данным) или из-за неопределенности какую команду загружать после команды условного перехода, до того, как истинность условия стала известной (конфликт по управлению). **Конфликты конвейера** это ситуации, которые препятствуют выполнению очередной команды из потока команд в предназначенном для нее такте, по причине нехватки ресурсов (структурный конфликт), зависимости от данных, получаемых в еще незавершенной команде (конфликт по данным) или из-за неопределенности какую команду загружать после команды условного перехода, до того, как истинность условия стала известной (конфликт по управлению).

View File

@@ -15,15 +15,15 @@
<details> <details>
<summary> Скриншот окна с выставленными фильтрами</summary> <summary> Скриншот окна с выставленными фильтрами</summary>
![Скриншот окна с выставленными фильтрами](../.pic/Vivado%20Basics/Vivado%20trainer/fpga_filter.png) ![../.pic/Vivado%20Basics/Vivado%20trainer/fig_01.png](../.pic/Vivado%20Basics/Vivado%20trainer/fig_01.png)
</details> </details>
7. В списке выбрать ПЛИС `xc7a100tcsg324-1` → Нажать Next 1. В списке выбрать ПЛИС `xc7a100tcsg324-1` → Нажать Next
8. Нажать Finish 2. Нажать Finish
9. Закрыть Vivado 3. Закрыть Vivado
10. Удалить папку 4. Удалить папку
11. Повторить все действия самостоятельно 5. Повторить все действия самостоятельно
## Создание модуля на SystemVerilog ## Создание модуля на SystemVerilog