mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 17:40:41 +00:00
Merge branch 'MPSU:master' into master
This commit is contained in:
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 379 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
@@ -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. Создайте проект;
|
||||
2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`.
|
||||
2. Опишите в файле модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_.
|
||||
3. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`.
|
||||
4. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом.
|
||||
5. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
6. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
|
||||
7. В `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-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде `векторов`.
|
||||
9. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда.
|
||||
10. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`.
|
||||
11. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
|
||||
12. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
13. Убедитесь, что модуль работает корректно и в консоль вывелось сообщение: `fulladder4 SUCCESS!!!`.
|
||||
14. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder32`.
|
||||
15. Опишите модуль `fulladder32` так, чтобы в нем выполнялось поразрядное сложение двух 32-разрядных чисел и входного бита переноса. Его можно реализовать через последовательное соединение восьми 4-битных сумматоров, либо же можно соединить 32 однобитных сумматора (как вручную, так и с помощью конструкции `generate for`).
|
||||
16. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 31-го разряда.
|
||||
17. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder32`.
|
||||
18. Вставьте содержимое файла [`tb_fulladder32.sv`](tb_fulladder32.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
|
||||
19. Запустите моделирование.
|
||||
20. Убедитесь, что модуль работает корректно.
|
||||
21. Следующим шагом вы можете проверить работоспособность вашей цифровой схемы в ПЛИС [здесь](board%20files).
|
||||
1. Создайте проект, согласно [руководству по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md)
|
||||
2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`.
|
||||
3. Опишите в файле модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_.
|
||||
4. Проверьте 1-битный сумматор. Для этого:
|
||||
1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`.
|
||||
2. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом.
|
||||
3. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
4. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
|
||||
5. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder4`.
|
||||
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#векторы).
|
||||
1. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда.
|
||||
7. Проверьте 4-битный сумматор. Для этого:
|
||||
1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`.
|
||||
2. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
|
||||
3. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
4. Проверьте содержимое TCL-консоли. Убедитесь в появлении сообщения о завершении теста. В случае, если в tcl-консоли написано `CLICK THE BUTTON 'Run All'`, вам необходимо нажать соответствующую кнопку на панели моделирования.
|
||||
5. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
|
||||
8. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder32`.
|
||||
9. Опишите модуль `fulladder32` так, чтобы в нем выполнялось поразрядное сложение двух 32-разрядных чисел и входного бита переноса. Его можно реализовать через последовательное соединение восьми 4-битных сумматоров, либо же можно соединить 32 однобитных сумматора (как вручную, так и с помощью конструкции `generate for`).
|
||||
1. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 31-го разряда.
|
||||
10. Проверьте 32-битный сумматор. Для этого:
|
||||
1. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder32`.
|
||||
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).
|
||||
|
@@ -1,6 +1,6 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: MIET
|
||||
// Engineer: Nikita Bulavin
|
||||
// Engineer: Andrei Solodovnikov
|
||||
|
||||
// Module Name: tb_fulladder
|
||||
// Project Name: RISCV_practicum
|
||||
@@ -10,15 +10,12 @@
|
||||
|
||||
module tb_fulladder();
|
||||
|
||||
parameter TIME_OPERATION = 100;
|
||||
parameter TEST_VALUES = 8;
|
||||
|
||||
wire tb_a_i;
|
||||
wire tb_b_i;
|
||||
wire tb_carry_i;
|
||||
wire tb_carry_o;
|
||||
wire tb_sum_o;
|
||||
|
||||
logic tb_a_i;
|
||||
logic tb_b_i;
|
||||
logic tb_carry_i;
|
||||
logic tb_carry_o;
|
||||
logic tb_sum_o;
|
||||
logic [2:0] test_case;
|
||||
|
||||
fulladder DUT (
|
||||
.a_i(tb_a_i),
|
||||
@@ -28,42 +25,18 @@ parameter TEST_VALUES = 8;
|
||||
.carry_o(tb_carry_o)
|
||||
);
|
||||
|
||||
integer i, err_count = 0;
|
||||
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];
|
||||
assign {tb_a_i, tb_b_i, tb_carry_i} = test_case;
|
||||
|
||||
initial begin
|
||||
$display( "Start test: ");
|
||||
for ( i = 0; i < TEST_VALUES; i = i + 1 )
|
||||
begin
|
||||
running_line = line_dump[i*5+:5];
|
||||
#TIME_OPERATION;
|
||||
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin
|
||||
$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);
|
||||
err_count = err_count + 1'b1;
|
||||
end
|
||||
end
|
||||
$display("Number of errors: %d", err_count);
|
||||
if( !err_count ) $display("\nfulladder SUCCESS!!!\n");
|
||||
$finish();
|
||||
$display("\nTest has been started\n");
|
||||
#5ns;
|
||||
test_case = 3'd0;
|
||||
repeat(8) begin
|
||||
#5ns;
|
||||
test_case++;
|
||||
end
|
||||
$display("\nTest has been finished\n");
|
||||
$finish();
|
||||
end
|
||||
|
||||
initial line_dump = {
|
||||
5'b00000,
|
||||
5'b10010,
|
||||
5'b01010,
|
||||
5'b11001,
|
||||
5'b00110,
|
||||
5'b10101,
|
||||
5'b01101,
|
||||
5'b11111};
|
||||
|
||||
endmodule
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: MIET
|
||||
// Engineer: Nikita Bulavin
|
||||
// Engineer: Andrei Solodovnikov
|
||||
|
||||
// Module Name: tb_fulladder4
|
||||
// Project Name: RISCV_practicum
|
||||
@@ -10,14 +10,12 @@
|
||||
|
||||
module tb_fulladder4();
|
||||
|
||||
parameter TIME_OPERATION = 100;
|
||||
parameter TEST_VALUES = 400;
|
||||
|
||||
wire [3:0] tb_a_i;
|
||||
wire [3:0] tb_b_i;
|
||||
wire tb_carry_i;
|
||||
wire tb_carry_o;
|
||||
wire [3:0] tb_sum_o;
|
||||
logic [3:0] tb_a_i;
|
||||
logic [3:0] tb_b_i;
|
||||
logic tb_carry_i;
|
||||
logic tb_carry_o;
|
||||
logic [3:0] tb_sum_o;
|
||||
logic [8:0] test_case;
|
||||
|
||||
fulladder4 DUT (
|
||||
.a_i(tb_a_i),
|
||||
@@ -27,445 +25,19 @@ module tb_fulladder4();
|
||||
.carry_o(tb_carry_o)
|
||||
);
|
||||
|
||||
integer i, err_count = 0;
|
||||
reg [13:0] running_line;
|
||||
reg [14*400:0] line_dump;
|
||||
wire [3:0] sum_dump;
|
||||
wire carry_o_dump;
|
||||
assign {tb_a_i, tb_b_i, tb_carry_i} = test_case;
|
||||
|
||||
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
|
||||
$display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
|
||||
for ( i = 0; i < TEST_VALUES; i = i + 1 )
|
||||
begin
|
||||
running_line = line_dump[i*14+:14];
|
||||
#TIME_OPERATION;
|
||||
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin
|
||||
$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);
|
||||
err_count = err_count + 1'b1;
|
||||
end
|
||||
end
|
||||
$display("Number of errors: %d", err_count);
|
||||
if( !err_count ) $display("\nfulladder4 SUCCESS!!!\n");
|
||||
$finish();
|
||||
$display("Test has been started");
|
||||
$display( "\n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
|
||||
#5ns;
|
||||
test_case = 3'd0;
|
||||
repeat(512) begin
|
||||
#5ns;
|
||||
test_case++;
|
||||
end
|
||||
$display("\nTest has been finished\n");
|
||||
$finish();
|
||||
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 = {
|
||||
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
|
||||
endmodule
|
||||
|
@@ -298,7 +298,7 @@ _Таблица 2. Список операций сравнения._
|
||||
3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран модуль `tb_alu`.
|
||||
4. Убедитесь, что симуляция завершена (об этом будет соответствующее сообщение в консоли). По завершению симуляции, в случае отсутствия ошибок, будет выведено сообщение "SUCCESS", в противном случае будут выведены сообщения об этих ошибках.
|
||||
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), файл ограничений, добавленный в первой лабораторной содержит другие данные, вам необходимо вставить содержимое файла для текущей лабы).
|
||||
7. Проверьте работу АЛУ в ПЛИС.
|
||||
|
||||
|
@@ -346,7 +346,7 @@ mоdulе rf_r𝚒sсv(
|
||||
2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_rf_riscv`).
|
||||
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)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
|
||||
7. Проверьте работу регистрового файла в ПЛИС.
|
||||
|
||||
|
@@ -26,7 +26,7 @@
|
||||
|
||||
Доп. задание, выполняемое дома:
|
||||
|
||||
6. Написать программу для процессора и на модели убедиться в корректности ее выполнения ([#задание по разработке программы](#задание-по-проверке-процессора))
|
||||
6. Написать программу для процессора и на модели убедиться в корректности ее выполнения ([Индивидуальное задание](Индивидуальное%20задание)).
|
||||
|
||||
> Для того, чтобы номера таблиц и рисунков лучше соотносились друг с другом и сопутствующим текстом, первая схема разрабатываемой микроархитектуры будет обозначена как Рисунок 0. Все последующие схемы будут совпадать по нумерации с таблицами, обозначающими способ кодирования инструкций.
|
||||
|
||||
@@ -358,7 +358,7 @@ endmodule
|
||||
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
|
||||
5. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!**
|
||||
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).
|
||||
6. Убедитесь, что у файла, инициализирующего память инструкций выставлен тип `Memory Initialization Files`, а не `Memory File`.
|
||||
7. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
|
||||
|
@@ -188,7 +188,7 @@ _Рисунок 2. Микроархитектура процессора._
|
||||
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
|
||||
5. **Во время симуляции убедитесь, что в логе есть сообщение о завершении теста!**
|
||||
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)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
|
||||
6. Проверьте работу процессора в ПЛИС.
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
В этой лекции вы познакомились с кругом вопросов, которым занимается дисциплина «Архитектура процессорных систем», посмотрели небольшой исторический очерк, обобщенный план дисциплины и разобрали несколько основных определений (которые надо знать!), такие как:
|
||||
|
||||
> **Процессор** — программно-управляемое устройство, выполненное на одной интегральной схеме и предназначенное для цифровой обработки информации и управления этим процессом.
|
||||
> **Процессор** — программно-управляемое устройство, предназначенное для цифровой обработки информации и управляющее этим процессом.
|
||||
> **Архитектура** — абстрактная модель функциональных возможностей процессора (средства, которыми может пользоваться программист).
|
||||
> **Микроархитектура** — физическая модель процессора, которая устанавливает состав, порядок и принципы взаимодействия его основных функциональных частей (структурная организация).
|
||||
|
||||
|
Submodule Lectures/Presentations updated: 2636b2496f...45929dc43b
@@ -6,7 +6,7 @@
|
||||
|
||||
Отдельно подчеркну: нижеизложенное является необходимым, но недостаточным для успешной сдачи экзамена.
|
||||
|
||||
**Процессор** – это программно-управляемое устройство, как правило, выполненное на одной интегральной схеме, осуществляющее цифровую обработку информации и управление этим процессом.
|
||||
**Процессор** – это программно-управляемое устройство, осуществляющее цифровую обработку информации и управление этим процессом.
|
||||
|
||||
**Микроконтроллер** – это устройство, конструктивно выполненное на базе одной интегральной схемы и содержащее в себе процессор, оперативное и постоянное запоминающие устройства, а также различные периферийные устройства (например: АЦП, ЦАП, контроллеры интерфейсов, таймеры, модули ШИМ и т.д.).
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
**Устройство управления** – блок процессора, организующий последовательную выборку команд из памяти, их дешифрацию и формирование соответствующих управляющих сигналов для всех блоков процессора.
|
||||
|
||||
**Конвейер команд** (Вычислительный конвейер) – это способ временного распараллеливания исполняемых команд, при котором выполнение команд разделяется на несколько более простых операций (называемых ступенями), под каждую из которых выделен свой блок аппаратуры и организована передача данных между ними, благодаря чему можно одновременно выполнять несколько команд на разных стадиях конвейера.
|
||||
**Конвейер команд** (Вычислительный конвейер) – это способ временного распараллеливания исполняемых команд, при котором выполнение команд разделяется на несколько более простых операций (называемых ступенями), под каждую из которых выделен свой блок аппаратуры и организована передача данных между ними, благодаря чему можно одновременно выполнять несколько команд на разных стадиях конвейера.
|
||||
|
||||
**Конфликты конвейера** – это ситуации, которые препятствуют выполнению очередной команды из потока команд в предназначенном для нее такте, по причине нехватки ресурсов (структурный конфликт), зависимости от данных, получаемых в еще незавершенной команде (конфликт по данным) или из-за неопределенности – какую команду загружать после команды условного перехода, до того, как истинность условия стала известной (конфликт по управлению).
|
||||
|
||||
|
@@ -15,15 +15,15 @@
|
||||
<details>
|
||||
<summary> Скриншот окна с выставленными фильтрами</summary>
|
||||
|
||||

|
||||

|
||||
|
||||
</details>
|
||||
|
||||
7. В списке выбрать ПЛИС `xc7a100tcsg324-1` → Нажать Next
|
||||
8. Нажать Finish
|
||||
9. Закрыть Vivado
|
||||
10. Удалить папку
|
||||
11. Повторить все действия самостоятельно
|
||||
1. В списке выбрать ПЛИС `xc7a100tcsg324-1` → Нажать Next
|
||||
2. Нажать Finish
|
||||
3. Закрыть Vivado
|
||||
4. Удалить папку
|
||||
5. Повторить все действия самостоятельно
|
||||
|
||||
## Создание модуля на SystemVerilog
|
||||
|
||||
|
Reference in New Issue
Block a user