Compare commits
7 Commits
english_ve
...
4aa7ed1be8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4aa7ed1be8 | ||
|
|
4313c22bee | ||
|
|
007889f849 | ||
|
|
e09e48adff | ||
|
|
8ffbc7a01b | ||
|
|
da422cfccb | ||
|
|
71cb2f3099 |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 41 KiB |
@@ -32,7 +32,7 @@ endmodule
|
||||
module testbench();
|
||||
logic A, B, C;
|
||||
|
||||
adder DUT(
|
||||
half_adder DUT(
|
||||
.A(A), // <- здесь будет ошибка,
|
||||
// т.к. в модуле half_adder нет порта 'A'
|
||||
.b(B),
|
||||
|
||||
@@ -10,32 +10,39 @@ See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
||||
*/
|
||||
module lab_04_tb_CYBERcobra();
|
||||
|
||||
logic [31:0] OUT;
|
||||
logic clk;
|
||||
logic rst;
|
||||
logic [15:0] sw_i;
|
||||
|
||||
|
||||
CYBERcobra DUT(
|
||||
.clk_i(clk),
|
||||
.rst_i(rstn),
|
||||
.rst_i(rst),
|
||||
.sw_i (sw_i),
|
||||
.out_o(OUT)
|
||||
);
|
||||
|
||||
wire [31:0] OUT;
|
||||
reg clk;
|
||||
reg rstn;
|
||||
reg [15:0] sw_i;
|
||||
|
||||
initial clk <= 0;
|
||||
always #5 clk = ~clk;
|
||||
always #5ns clk = ~clk;
|
||||
|
||||
initial begin
|
||||
logic [15:0] count_num;
|
||||
$display("Test has been started");
|
||||
rstn = 1'b1;
|
||||
#10;
|
||||
rstn = 1'b0;
|
||||
sw_i = 16'b100001000; //значение, до которого считает счетчик
|
||||
#10000;
|
||||
$display("\n The test is over \n See the internal signals of the CYBERcobra on the waveform \n");
|
||||
rst = 1'b1;
|
||||
repeat(2)@(posedge clk);
|
||||
rst = 1'b0;
|
||||
count_num = $urandom_range(5, 10);
|
||||
sw_i = count_num;
|
||||
repeat(count_num * 2 + 15) begin
|
||||
@(posedge clk);
|
||||
end
|
||||
$display("\nThe test is over.");
|
||||
$display("See the internal signals of the CYBERcobra on the waveform");
|
||||
$finish;
|
||||
#5;
|
||||
$display("You're trying to run simulation that has finished. Aborting simulation.");
|
||||
@(posedge clk);
|
||||
$display("You're trying to run simulation that has finished.");
|
||||
$display("Aborting simulation.");
|
||||
$fatal();
|
||||
end
|
||||
|
||||
|
||||
@@ -338,7 +338,7 @@ _Таблица 7. Описание портов дешифратора кома
|
||||
|
||||
## Инструменты
|
||||
|
||||
**SystemVerilog** – это язык описания аппаратуры. С помощью этого языка человек объясняет либо синтезатору какое он хочет получить устройство, либо симулятору – как он хочет это устройство проверить. Синтезатор – это программа, которая создает из логических элементов цифровое устройство по описанию, предоставляемому человеком. Синтезатору внутри **Vivado** нужно объяснить, что от него нужно. Например, чтобы спросить дорогу у испанца, придется делать это на испанском языке, иначе он ничем не сможет помочь. А если вы хорошо знаете испанский, то скорее всего сможете это сделать еще и разными способами. В **SystemVerilog** точно также – одно и то же устройство можно описать разным кодом, но результат синтеза будет одним и тем же. Однако, часто два разных кода, одинаковых по смыслу, могут синтезироваться в разную аппаратуру, хотя функционально они будут идентичны, но могут отличаться, например, скоростью работы. Или одни и те же специальные языковые конструкции могут применяться для синтезирования разных цифровых элементов.
|
||||
**SystemVerilog** – это язык описания аппаратуры. С помощью этого языка человек объясняет либо синтезатору какое он хочет получить устройство, либо симулятору – как он хочет это устройство проверить. Синтезатор – это программа, которая создает из логических элементов цифровое устройство по описанию, предоставляемому человеком. Синтезатору внутри **Vivado** нужно объяснить, что от него требуется. Например, чтобы спросить дорогу у испанца, придется делать это на испанском языке, иначе он ничем не сможет помочь. А если вы хорошо знаете испанский, то скорее всего сможете это сделать еще и разными способами. В **SystemVerilog** точно также – одно и то же устройство можно описать разным кодом, но результат синтеза будет одним и тем же. В то же время два одинаковых по смыслу кода могут синтезироваться в разную аппаратуру. Будучи функционально идентичными, они могут отличаться, например, скоростью работы. Или одни и те же специальные языковые конструкции могут применяться для синтезирования разных цифровых элементов.
|
||||
|
||||
Декодер – комбинационная схема. Это значит, что каждый раз подавая на вход одни и те же значения, вы будете получать на выходе один и тот же результат.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ module lab_15_tb_system();
|
||||
logic flash_rx;
|
||||
logic tx_o;
|
||||
logic ps2_clk, ps2_dat;
|
||||
logic sw_i;
|
||||
logic [15:0] sw_i;
|
||||
logic tb_rx;
|
||||
logic flashing_is_done = 0;
|
||||
logic core_reset;
|
||||
|
||||
@@ -17,7 +17,7 @@ OBJCOPY = $(CC_PATH)/$(CC_PREFIX)-objcopy
|
||||
SIZE = $(CC_PATH)/$(CC_PREFIX)-size
|
||||
|
||||
OBJS = core_main.o core_list_join.o core_matrix.o core_state.o core_util.o \
|
||||
barebones/core_portme.o barebones/startup.o barebones/cvt.o \
|
||||
startup.o barebones/core_portme.o barebones/cvt.o \
|
||||
barebones/ee_printf.o
|
||||
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ endmodule
|
||||
module testbench();
|
||||
logic A, B, C;
|
||||
|
||||
adder DUT(
|
||||
half_adder DUT(
|
||||
.A(A), // <- здесь будет ошибка,
|
||||
// т.к. в модуле half_adder нет порта 'A'
|
||||
.b(B),
|
||||
|
||||