Files
crypto/ChaCha20_Poly1305_64/sim/chacha20_pipelined_round.py
2025-07-02 06:32:58 -07:00

86 lines
2.3 KiB
Python

import cocotb
import logging
from chacha_helpers import chacha_block, QR
import struct
import random
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge, FallingEdge
from cocotb.queue import Queue
CLK_PERIOD = 4
CONSTANT = [0x65787061, 0x6e642033, 0x322d6279, 0x7465206b]
class TB:
def __init__(self, dut):
self.dut = dut
self.log = logging.getLogger("cocotb.tb")
self.log.setLevel(logging.INFO)
cocotb.start_soon(Clock(self.dut.i_clk, CLK_PERIOD, units="ns").start())
async def cycle_reset(self):
await self._cycle_reset(self.dut.i_rst, self.dut.i_clk)
async def _cycle_reset(self, rst, clk):
rst.setimmediatevalue(0)
await RisingEdge(clk)
await RisingEdge(clk)
rst.value = 1
await RisingEdge(clk)
await RisingEdge(clk)
rst.value = 0
await RisingEdge(clk)
await RisingEdge(clk)
@cocotb.test
async def test_sanity(dut):
tb = TB(dut)
await tb.cycle_reset()
# data_in = [0x65787061, 0x6e642033, 0x322d6279, 0x7465206b,
# 0, 0, 0, 0,
# 0, 0, 0, 0,
# 0, 0, 0, 0]
data = [1, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0]
# data[0], data[4], data[8], data[12] = QR(data[0], data[4], data[8], data[12])
# data[1], data[5], data[9], data[13] = QR(data[1], data[5], data[9], data[13])
# data[2], data[6], data[10], data[14] = QR(data[2], data[6], data[10], data[14])
# data[3], data[7], data[11], data[15] = QR(data[3], data[7], data[11], data[15])
data[0], data[5], data[10], data[15] = QR(data[0], data[5], data[10], data[15])
data[1], data[6], data[11], data[12] = QR(data[1], data[6], data[11], data[12])
data[2], data[7], data[8], data[13] = QR(data[2], data[7], data[8], data[13])
data[3], data[4], data[9], data[14] = QR(data[3], data[4], data[9], data[14])
for val in data:
tb.log.info(f"{val:x}")
# tb.log.info(data_out)
tb.dut.i_ready.value = 1
tb.dut.i_state.value = 1
# tb.dut.i_state.value = 0x657870616e642033322d62797465206b
tb.dut.i_valid.value = 1
await RisingEdge(tb.dut.i_clk)
tb.dut.i_valid.value = 1
await Timer(1, "us")