Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions examples/std_kuznechik/std_kuznechik_decoder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

#include "dfcxx/std/crypto/gost_34_12/kuznechik.h"

#include <memory>

std::unique_ptr<dfcxx::Kernel> start() {
using dfcxx::std::KuznechikDecoder;
KuznechikDecoder *kernel = new KuznechikDecoder(true);
return std::unique_ptr<dfcxx::Kernel>(kernel);
}
66 changes: 66 additions & 0 deletions examples/std_kuznechik/std_kuznechik_decoder_testbench0.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

// Total: 0 stages.

`timescale 1s/1s

module KuznechikDecoder_test0();

localparam CIRCUIT_LATENCY = 0;

reg [127:0] encoded;
reg [255:0] key;
reg [127:0] block;
reg [127:0] expected;
reg clk;

KuznechikDecoder inst (
.encoded(encoded),
.key(key),
.block(block),
.clk(clk)
);

initial clk = 0;

always #1 clk = ~clk;

initial begin

@(negedge clk);
$display("[KuznechikDecoder: test 0] Input ready.");

encoded = 128'h7f679d90bebc24305a468d42b9d4edcd;
key = 256'h8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef;
expected = 128'h1122334455667700ffeeddccbbaa9988;
$display("Input: [%0x], key: [%0x]", encoded, key);
end

initial begin
// Wait for the first output.
#(2*CIRCUIT_LATENCY+3);

$dumpfile("KuznechikDecoder_test0.vcd");
$dumpvars(0, KuznechikDecoder_test0);
$display("[KuznechikDecoder: test 0] Started...");

$display("Output: %0h", block);
if (expected == block) begin
$display("GOOD: %0h == %0h", expected, block);
end else begin
$display("BAD: %0h != %0h", expected, block);
$display("[KuznechikDecoder: test 0] Stopped.");
$finish;
end

$display("[KuznechikDecoder: test 0] Stopped.");
$finish;
end

endmodule
17 changes: 17 additions & 0 deletions examples/std_kuznechik/std_kuznechik_encoder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

#include "dfcxx/std/crypto/gost_34_12/kuznechik.h"

#include <memory>

std::unique_ptr<dfcxx::Kernel> start() {
using dfcxx::std::KuznechikEncoder;
KuznechikEncoder *kernel = new KuznechikEncoder(true);
return std::unique_ptr<dfcxx::Kernel>(kernel);
}
66 changes: 66 additions & 0 deletions examples/std_kuznechik/std_kuznechik_encoder_testbench0.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

// Total: 0 stages.

`timescale 1s/1s

module KuznechikEncoder_test0();

localparam CIRCUIT_LATENCY = 0;

reg [127:0] block;
reg [255:0] key;
reg [127:0] encoded;
reg [127:0] expected;
reg clk;

KuznechikEncoder inst (
.block(block),
.key(key),
.encoded(encoded),
.clk(clk)
);

initial clk = 0;

always #1 clk = ~clk;

initial begin

@(negedge clk);
$display("[KuznechikEncoder: test 0] Input ready.");

block = 128'h1122334455667700ffeeddccbbaa9988;
key = 256'h8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef;
expected = 128'h7f679d90bebc24305a468d42b9d4edcd;
$display("Input: [%0x], key: [%0x]", block, key);
end

initial begin
// Wait for the first output.
#(2*CIRCUIT_LATENCY+3);

$dumpfile("KuznechikEncoder_test0.vcd");
$dumpvars(0, KuznechikEncoder_test0);
$display("[KuznechikEncoder: test 0] Started...");

$display("Output: %0h", encoded);
if (expected == encoded) begin
$display("GOOD: %0h == %0h", expected, encoded);
end else begin
$display("BAD: %0h != %0h", expected, encoded);
$display("[KuznechikEncoder: test 0] Stopped.");
$finish;
end

$display("[KuznechikEncoder: test 0] Stopped.");
$finish;
end

endmodule
5 changes: 5 additions & 0 deletions examples/std_magma/add_int_2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dfcir": {
"ADD_INT": 2
}
}
17 changes: 17 additions & 0 deletions examples/std_magma/std_magma_decoder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

#include "dfcxx/std/crypto/gost_34_12/magma.h"

#include <memory>

std::unique_ptr<dfcxx::Kernel> start() {
using dfcxx::std::MagmaDecoder;
MagmaDecoder *kernel = new MagmaDecoder();
return std::unique_ptr<dfcxx::Kernel>(kernel);
}
67 changes: 67 additions & 0 deletions examples/std_magma/std_magma_decoder_testbench0.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

// Addition (integer): 2 stages each.
// Total: 64 stages.

`timescale 1s/1s

module MagmaDecoder_test0();

localparam CIRCUIT_LATENCY = 64;

reg [63:0] encoded;
reg [255:0] key;
reg [63:0] block;
reg [63:0] expected;
reg clk;

MagmaDecoder inst (
.encoded(encoded),
.key(key),
.block(block),
.clk(clk)
);

initial clk = 0;

always #1 clk = ~clk;

initial begin

@(negedge clk);
$display("[MagmaDecoder: test 0] Input ready.");

encoded = 64'h4ee901e5c2d8ca3d;
key = 256'hffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff;
expected = 64'hfedcba9876543210;
$display("Input: [%0x], key: [%0x]", block, key);
end

initial begin
// Wait for the first output.
#(2*CIRCUIT_LATENCY+3);

$dumpfile("MagmaDecoder_test0.vcd");
$dumpvars(0, MagmaDecoder_test0);
$display("[MagmaDecoder: test 0] Started...");

$display("Output: %0h", block);
if (expected == block) begin
$display("GOOD: %0h == %0h", expected, block);
end else begin
$display("BAD: %0h != %0h", expected, block);
$display("[MagmaDecoder: test 0] Stopped.");
$finish;
end

$display("[MagmaDecoder: test 0] Stopped.");
$finish;
end

endmodule
17 changes: 17 additions & 0 deletions examples/std_magma/std_magma_encoder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

#include "dfcxx/std/crypto/gost_34_12/magma.h"

#include <memory>

std::unique_ptr<dfcxx::Kernel> start() {
using dfcxx::std::MagmaEncoder;
MagmaEncoder *kernel = new MagmaEncoder();
return std::unique_ptr<dfcxx::Kernel>(kernel);
}
67 changes: 67 additions & 0 deletions examples/std_magma/std_magma_encoder_testbench0.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//===----------------------------------------------------------------------===//
//
// Part of the Utopia HLS Project, under the Apache License v2.0
// SPDX-License-Identifier: Apache-2.0
// Copyright 2025 ISP RAS (http://www.ispras.ru)
//
//===----------------------------------------------------------------------===//

// Addition (integer): 2 stages each.
// Total: 64 stages.

`timescale 1s/1s

module MagmaEncoder_test0();

localparam CIRCUIT_LATENCY = 64;

reg [63:0] block;
reg [255:0] key;
reg [63:0] encoded;
reg [63:0] expected;
reg clk;

MagmaEncoder inst (
.block(block),
.key(key),
.encoded(encoded),
.clk(clk)
);

initial clk = 0;

always #1 clk = ~clk;

initial begin

@(negedge clk);
$display("[MagmaEncoder: test 0] Input ready.");

block = 64'hfedcba9876543210;
key = 256'hffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff;
expected = 64'h4ee901e5c2d8ca3d;
$display("Input: [%0x], key: [%0x]", block, key);
end

initial begin
// Wait for the first output.
#(2*CIRCUIT_LATENCY+3);

$dumpfile("MagmaEncoder_test0.vcd");
$dumpvars(0, MagmaEncoder_test0);
$display("[MagmaEncoder: test 0] Started...");

$display("Output: %0h", encoded);
if (expected == encoded) begin
$display("GOOD: %0h == %0h", expected, encoded);
end else begin
$display("BAD: %0h != %0h", expected, encoded);
$display("[MagmaEncoder: test 0] Stopped.");
$finish;
end

$display("[MagmaEncoder: test 0] Stopped.");
$finish;
end

endmodule
5 changes: 4 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ target_include_directories(ukernel

target_link_libraries(ukernel
PUBLIC
Utopia::DFCXX)
Utopia::DFCXX
Utopia::DFCXXSTD
)
add_library(Utopia::Kernel ALIAS ukernel)

##===----------------------------------------------------------------------===//
Expand All @@ -41,6 +43,7 @@ target_link_libraries(umain
PRIVATE
Utopia::Kernel
Utopia::DFCXX
Utopia::DFCXXSTD
easyloggingpp
CLI
Json
Expand Down
2 changes: 2 additions & 0 deletions src/model/dfcxx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ find_package(CTemplate REQUIRED COMPONENTS nothreads)
set(TEMPLATES_PATH "${PROJECT_SOURCE_DIR}/templates")
add_subdirectory(include)
add_subdirectory(lib)

add_subdirectory(std)
2 changes: 2 additions & 0 deletions src/model/dfcxx/lib/dfcxx/io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include "dfcxx/io.h"

#include <iostream>

namespace dfcxx {

using IODirection = dfcxx::DFVariableImpl::IODirection;
Expand Down
3 changes: 3 additions & 0 deletions src/model/dfcxx/std/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## SPDX-License-Identifier: Apache-2.0

add_subdirectory(dfcxx)
3 changes: 3 additions & 0 deletions src/model/dfcxx/std/dfcxx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## SPDX-License-Identifier: Apache-2.0

add_subdirectory(std)
Loading