`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_pcie_s10.vcd");
$dumpvars (0, test_pcie_s10);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_pcie_ptile.vcd");
$dumpvars (0, test_pcie_ptile);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_rgmii_phy.vcd");
$dumpvars (0, test_rgmii_phy);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_xgmii.vcd");
$dumpvars (0, test_xgmii);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_eth_mac.vcd");
$dumpvars (0, test_eth_mac);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_gmii_phy.vcd");
$dumpvars (0, test_gmii_phy);
#1;
end
`endif
masaaki@marsee101-notebook:~/Cocotb/cocotbext-axi/tests/test_square_axis2$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: Entering directory '/home/masaaki/Cocotb/cocotbext-axi/tests/test_square_axis2'
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s test_square_axis2 -f sim_build/cmds.f -g2012 test_square_axis2.v test_square_axis2_control_s_axi.v test_square_axis2_flow_control_loop_pipe.v test_square_axis2_mul_32s_32s_32_2_1.v test_square_axis2_regslice_both.v
rm -f results.xml
MODULE=test_square_axis2 TESTCASE= TOPLEVEL=test_square_axis2 TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /usr/local/lib/python3.10/dist-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 11.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.8.0 from /usr/local/lib/python3.10/dist-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1687378922
0.00ns INFO cocotb.regression Found test test_square_axis2.test_square_axil
0.00ns INFO cocotb.regression running test_square_axil (1/1)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (write)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.24
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control awaddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control awprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control awready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control awvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control wready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wstrb width: 4 bits
0.00ns INFO ...test_square_axis2.s_axi_control wvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control bvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (read)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.24
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control araddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control arprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control arready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control arvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control rready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control rvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source
0.00ns INFO cocotb.test_square_axis2.in_r cocotbext-axi version 0.1.24
0.00ns INFO cocotb.test_square_axis2.in_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.in_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source configuration:
0.00ns INFO cocotb.test_square_axis2.in_r Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis2.in_r Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source signals:
0.00ns INFO cocotb.test_square_axis2.in_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.in_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.in_r tid: not present
0.00ns INFO cocotb.test_square_axis2.in_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.in_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.in_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.in_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink
0.00ns INFO cocotb.test_square_axis2.out_r cocotbext-axi version 0.1.24
0.00ns INFO cocotb.test_square_axis2.out_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.out_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink configuration:
0.00ns INFO cocotb.test_square_axis2.out_r Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis2.out_r Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink signals:
0.00ns INFO cocotb.test_square_axis2.out_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.out_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.out_r tid: not present
0.00ns INFO cocotb.test_square_axis2.out_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.out_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.out_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.out_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r Reset de-asserted
VCD info: dumpfile test_square_axis2.vcd opened for output.
40.00ns INFO ...test_square_axis2.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
70.00ns INFO ...test_square_axis2.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
80.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x00\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=1, sim_time_start=80000, sim_time_end=None)
90.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x01\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=90000, sim_time_end=None)
100.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x02\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=100000, sim_time_end=None)
100.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
100.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
110.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x03\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=110000, sim_time_end=None)
120.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x04\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=120000, sim_time_end=None)
130.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x05\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=130000, sim_time_end=None)
130.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x00\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=130000, sim_time_end=130000)
130.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
130.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
140.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x06\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=140000, sim_time_end=None)
140.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x01\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=140000, sim_time_end=140000)
150.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x07\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=150000, sim_time_end=None)
150.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x04\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=150000, sim_time_end=150000)
160.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x08\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=160000, sim_time_end=None)
160.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\t\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=160000, sim_time_end=160000)
160.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
160.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
170.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\t\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=170000, sim_time_end=None)
170.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x10\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=170000, sim_time_end=170000)
180.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x19\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=180000, sim_time_end=180000)
190.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'$\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=190000, sim_time_end=190000)
190.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
190.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
200.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'1\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=200000, sim_time_end=200000)
210.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'@\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=210000, sim_time_end=210000)
220.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'Q\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=220000, sim_time_end=220000)
220.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 08
220.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
250.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 06
i = 0 tdata = 0
i = 1 tdata = 1
i = 2 tdata = 4
i = 3 tdata = 9
i = 4 tdata = 16
i = 5 tdata = 25
i = 6 tdata = 36
i = 7 tdata = 49
i = 8 tdata = 64
i = 9 tdata = 81
250.00ns INFO cocotb.regression test_square_axil passed
250.00ns INFO cocotb.regression ********************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
********************************************************************************************
** test_square_axis2.test_square_axil PASS 250.00 0.04 6918.54 **
********************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 250.00 0.21 1215.25 **
********************************************************************************************
make[1]: Leaving directory '/home/masaaki/Cocotb/cocotbext-axi/tests/test_square_axis2'
# Makefile (for test_square_axis)
# 2023/06/14 by marsee
SIM ?= icarus
VERILOG_SOURCES += test_square_axis2.v
VERILOG_SOURCES += test_square_axis2_control_s_axi.v
VERILOG_SOURCES += test_square_axis2_flow_control_loop_pipe.v
VERILOG_SOURCES += test_square_axis2_mul_32s_32s_32_2_1.v
VERILOG_SOURCES += test_square_axis2_regslice_both.v
TOPLEVEL = test_square_axis2
MODULE = test_square_axis2
include $(shell cocotb-config --makefiles)/Makefile.sim
# test_aquare_axi.py
# 2023/06/13 by marsee
# I created the software with reference to cocotbext-axi/tests/axil/test_axil.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axil/test_axil.py
# I created the software with reference to cocotbext-axi/tests/axis/test_axis.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axis/test_axis.py
import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge
from cocotbext.axi import AxiLiteBus, AxiLiteMaster, AxiLiteRam
from cocotbext.axi import AxiBus, AxiMaster, AxiRam
from cocotbext.axi import AxiStreamFrame, AxiStreamBus, AxiStreamSource, AxiStreamSink, AxiStreamMonitor
AP_DONE = 0x2
class TEST:
def __init__(self, dut):
self.dut = dut
cocotb.start_soon(Clock(dut.ap_clk, 10, units="ns").start())
self.axil_master = AxiLiteMaster(AxiLiteBus.from_prefix(dut, "s_axi_control"), dut.ap_clk)
self.axis_source = AxiStreamSource(AxiStreamBus.from_prefix(dut, "in_r"), dut.ap_clk)
self.axis_sink = AxiStreamSink(AxiStreamBus.from_prefix(dut, "out_r"), dut.ap_clk)
@cocotb.test()
async def test_square_axis2(dut):
test = TEST(dut)
dut.ap_rst_n.value = 0; # Reset
await Timer(30, units='ns')
dut.ap_rst_n.value = 1; # Normal Operation
await Timer(10, units='ns')
ap_start = 1
await test.axil_master.write(0x00, ap_start.to_bytes(4,'little')) # ap_start
#await test.axil_master.read(0x00, 1)
for i in range(10):
data = i.to_bytes(4, 'little')
source_frame = AxiStreamFrame(data)
if i == 0:
source_frame.tuser = 1
else:
source_frame.tuser = 0
if i == 9:
source_frame.tlast = 1
else:
source_frame.tlast = 0
await test.axis_source.send(source_frame)
data = await test.axil_master.read(0x00, 1) # wait end
data_int = int.from_bytes(data, 'little')
while (data_int & AP_DONE) != AP_DONE:
data = await test.axil_master.read(0x00, 1)
data_int = int.from_bytes(data, 'little')
for i in range(10):
sink_frame = await test.axis_sink.recv()
#print(sink_frame)
tdata_ba = sink_frame.tdata
tuser = sink_frame.tuser
tdata = int.from_bytes(tdata_ba, 'little')
print('i = ', i, ' tdata = ', tdata)
assert tdata == i * i
assert test.axis_source.empty()
assert test.axis_sink.empty()
// ==============================================================
// Generated by Vitis HLS v2023.1
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
// ==============================================================
`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="test_square_axis2_test_square_axis2,hls_ip_2023_1,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z020-clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.912000,HLS_SYN_LAT=14,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=674,HLS_SYN_LUT=436,HLS_VERSION=2023_1}" *)
module test_square_axis2 (
ap_clk,
ap_rst_n,
in_r_tvalid,
out_r_tready,
in_r_TDATA,
in_r_tready,
in_r_TKEEP,
in_r_TSTRB,
in_r_TUSER,
in_r_TLAST,
in_r_TID,
in_r_TDEST,
out_r_TDATA,
out_r_tvalid,
out_r_TKEEP,
out_r_TSTRB,
out_r_TUSER,
out_r_TLAST,
out_r_TID,
out_r_TDEST,
s_axi_control_AWVALID,
s_axi_control_AWREADY,
s_axi_control_AWADDR,
s_axi_control_WVALID,
s_axi_control_WREADY,
s_axi_control_WDATA,
s_axi_control_wstrb,
s_axi_control_ARVALID,
s_axi_control_ARREADY,
s_axi_control_ARADDR,
s_axi_control_RVALID,
s_axi_control_RREADY,
s_axi_control_RDATA,
s_axi_control_RRESP,
s_axi_control_BVALID,
s_axi_control_BREADY,
s_axi_control_BRESP,
interrupt
);
parameter ap_ST_fsm_pp0_stage0 = 1'd1;
parameter C_S_AXI_CONTROL_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_ADDR_WIDTH = 5;
parameter C_S_AXI_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_WSTRB_WIDTH = (32 / 8);
parameter C_S_AXI_WSTRB_WIDTH = (32 / 8);
input ap_clk;
input ap_rst_n;
input in_r_tvalid;
input out_r_tready;
input [31:0] in_r_TDATA;
output in_r_tready;
input [3:0] in_r_TKEEP;
input [3:0] in_r_TSTRB;
input [0:0] in_r_TUSER;
input [0:0] in_r_TLAST;
input [0:0] in_r_TID;
input [0:0] in_r_TDEST;
output [31:0] out_r_TDATA;
output out_r_tvalid;
output [3:0] out_r_TKEEP;
output [3:0] out_r_TSTRB;
output [0:0] out_r_TUSER;
output [0:0] out_r_TLAST;
output [0:0] out_r_TID;
output [0:0] out_r_TDEST;
input s_axi_control_AWVALID;
output s_axi_control_AWREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_AWADDR;
input s_axi_control_WVALID;
output s_axi_control_WREADY;
input [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_WDATA;
input [C_S_AXI_CONTROL_WSTRB_WIDTH - 1:0] s_axi_control_wstrb;
input s_axi_control_ARVALID;
output s_axi_control_ARREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_ARADDR;
output s_axi_control_RVALID;
input s_axi_control_RREADY;
output [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_RDATA;
output [1:0] s_axi_control_RRESP;
output s_axi_control_BVALID;
input s_axi_control_BREADY;
output [1:0] s_axi_control_BRESP;
output interrupt;
reg ap_rst_n_inv;
wire ap_start;
wire ap_done;
reg ap_idle;
(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm;
wire ap_CS_fsm_pp0_stage0;
wire ap_enable_reg_pp0_iter0;
reg ap_enable_reg_pp0_iter1;
reg ap_enable_reg_pp0_iter2;
reg ap_enable_reg_pp0_iter3;
reg ap_idle_pp0;
wire ap_ready;
wire [0:0] icmp_ln14_fu_142_p2;
reg ap_block_state1_pp0_stage0_iter0;
wire ap_block_state2_pp0_stage0_iter1;
wire regslice_both_out_r_V_data_V_U_apdone_blk;
reg ap_block_state3_pp0_stage0_iter2;
reg ap_block_state4_pp0_stage0_iter3;
wire ap_loop_exit_ready;
reg ap_loop_exit_ready_pp0_iter2_reg;
reg ap_block_pp0_stage0_subdone;
reg ap_condition_exit_pp0_iter0_stage0;
reg ap_ready_int;
reg in_r_TDATA_blk_n;
wire ap_block_pp0_stage0;
reg out_r_TDATA_blk_n;
reg [0:0] icmp_ln14_reg_194;
reg ap_block_pp0_stage0_11001;
reg [0:0] icmp_ln14_reg_194_pp0_iter1_reg;
reg signed [31:0] val_data_reg_198;
reg [3:0] val_keep_reg_204;
reg [3:0] val_keep_reg_204_pp0_iter1_reg;
reg [3:0] val_strb_reg_209;
reg [3:0] val_strb_reg_209_pp0_iter1_reg;
reg [0:0] val_user_reg_214;
reg [0:0] val_user_reg_214_pp0_iter1_reg;
reg [0:0] val_last_reg_219;
reg [0:0] val_last_reg_219_pp0_iter1_reg;
reg [0:0] val_id_reg_224;
reg [0:0] val_id_reg_224_pp0_iter1_reg;
reg [0:0] val_dest_reg_229;
reg [0:0] val_dest_reg_229_pp0_iter1_reg;
wire [31:0] grp_fu_129_p2;
reg [3:0] i_fu_82;
wire [3:0] i_2_fu_148_p2;
wire ap_loop_init;
reg [3:0] ap_sig_allocacmp_i_1;
reg ap_block_pp0_stage0_01001;
reg grp_fu_129_ce;
reg ap_done_reg;
wire ap_continue_int;
reg ap_done_int;
reg ap_loop_exit_ready_pp0_iter1_reg;
reg [0:0] ap_NS_fsm;
wire ap_enable_pp0;
wire ap_start_int;
wire regslice_both_in_r_V_data_V_U_apdone_blk;
wire [31:0] in_r_TDATA_int_regslice;
wire in_r_TVALID_int_regslice;
reg in_r_TREADY_int_regslice;
wire regslice_both_in_r_V_data_V_U_ack_in;
wire regslice_both_in_r_V_keep_V_U_apdone_blk;
wire [3:0] in_r_TKEEP_int_regslice;
wire regslice_both_in_r_V_keep_V_U_vld_out;
wire regslice_both_in_r_V_keep_V_U_ack_in;
wire regslice_both_in_r_V_strb_V_U_apdone_blk;
wire [3:0] in_r_TSTRB_int_regslice;
wire regslice_both_in_r_V_strb_V_U_vld_out;
wire regslice_both_in_r_V_strb_V_U_ack_in;
wire regslice_both_in_r_V_user_V_U_apdone_blk;
wire [0:0] in_r_TUSER_int_regslice;
wire regslice_both_in_r_V_user_V_U_vld_out;
wire regslice_both_in_r_V_user_V_U_ack_in;
wire regslice_both_in_r_V_last_V_U_apdone_blk;
wire [0:0] in_r_TLAST_int_regslice;
wire regslice_both_in_r_V_last_V_U_vld_out;
wire regslice_both_in_r_V_last_V_U_ack_in;
wire regslice_both_in_r_V_id_V_U_apdone_blk;
wire [0:0] in_r_TID_int_regslice;
wire regslice_both_in_r_V_id_V_U_vld_out;
wire regslice_both_in_r_V_id_V_U_ack_in;
wire regslice_both_in_r_V_dest_V_U_apdone_blk;
wire [0:0] in_r_TDEST_int_regslice;
wire regslice_both_in_r_V_dest_V_U_vld_out;
wire regslice_both_in_r_V_dest_V_U_ack_in;
reg out_r_TVALID_int_regslice;
wire out_r_TREADY_int_regslice;
wire regslice_both_out_r_V_data_V_U_vld_out;
wire regslice_both_out_r_V_keep_V_U_apdone_blk;
wire regslice_both_out_r_V_keep_V_U_ack_in_dummy;
wire regslice_both_out_r_V_keep_V_U_vld_out;
wire regslice_both_out_r_V_strb_V_U_apdone_blk;
wire regslice_both_out_r_V_strb_V_U_ack_in_dummy;
wire regslice_both_out_r_V_strb_V_U_vld_out;
wire regslice_both_out_r_V_user_V_U_apdone_blk;
wire regslice_both_out_r_V_user_V_U_ack_in_dummy;
wire regslice_both_out_r_V_user_V_U_vld_out;
wire regslice_both_out_r_V_last_V_U_apdone_blk;
wire regslice_both_out_r_V_last_V_U_ack_in_dummy;
wire regslice_both_out_r_V_last_V_U_vld_out;
wire regslice_both_out_r_V_id_V_U_apdone_blk;
wire regslice_both_out_r_V_id_V_U_ack_in_dummy;
wire regslice_both_out_r_V_id_V_U_vld_out;
wire regslice_both_out_r_V_dest_V_U_apdone_blk;
wire regslice_both_out_r_V_dest_V_U_ack_in_dummy;
wire regslice_both_out_r_V_dest_V_U_vld_out;
reg ap_condition_192;
wire ap_ce_reg;
wire [31:0] ap_return;
// power-on initialization
initial begin
#0 ap_CS_fsm = 1'd1;
#0 ap_enable_reg_pp0_iter1 = 1'b0;
#0 ap_enable_reg_pp0_iter2 = 1'b0;
#0 ap_enable_reg_pp0_iter3 = 1'b0;
#0 ap_done_reg = 1'b0;
end
test_square_axis2_control_s_axi #(
.C_S_AXI_ADDR_WIDTH( C_S_AXI_CONTROL_ADDR_WIDTH ),
.C_S_AXI_DATA_WIDTH( C_S_AXI_CONTROL_DATA_WIDTH ))
control_s_axi_U(
.AWVALID(s_axi_control_AWVALID),
.AWREADY(s_axi_control_AWREADY),
.AWADDR(s_axi_control_AWADDR),
.WVALID(s_axi_control_WVALID),
.WREADY(s_axi_control_WREADY),
.WDATA(s_axi_control_WDATA),
.WSTRB(s_axi_control_wstrb),
.ARVALID(s_axi_control_ARVALID),
.ARREADY(s_axi_control_ARREADY),
.ARADDR(s_axi_control_ARADDR),
.RVALID(s_axi_control_RVALID),
.RREADY(s_axi_control_RREADY),
.RDATA(s_axi_control_RDATA),
.RRESP(s_axi_control_RRESP),
.BVALID(s_axi_control_BVALID),
.BREADY(s_axi_control_BREADY),
.BRESP(s_axi_control_BRESP),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.ap_start(ap_start),
.interrupt(interrupt),
.ap_ready(ap_ready),
.ap_done(ap_done),
.ap_idle(ap_idle),
.ap_return(32'd0)
);
test_square_axis2_mul_32s_32s_32_2_1 #(
.ID( 1 ),
.NUM_STAGE( 2 ),
.din0_WIDTH( 32 ),
.din1_WIDTH( 32 ),
.dout_WIDTH( 32 ))
mul_32s_32s_32_2_1_U1(
.clk(ap_clk),
.reset(ap_rst_n_inv),
.din0(val_data_reg_198),
.din1(val_data_reg_198),
.ce(grp_fu_129_ce),
.dout(grp_fu_129_p2)
);
test_square_axis2_flow_control_loop_pipe flow_control_loop_pipe_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.ap_start(ap_start),
.ap_ready(ap_ready),
.ap_done(ap_done),
.ap_start_int(ap_start_int),
.ap_loop_init(ap_loop_init),
.ap_ready_int(ap_ready_int),
.ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0),
.ap_loop_exit_done(ap_done_int),
.ap_continue_int(ap_continue_int),
.ap_done_int(ap_done_int),
.ap_continue(1'b1)
);
test_square_axis2_regslice_both #(
.DataWidth( 32 ))
regslice_both_in_r_V_data_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TDATA),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_data_V_U_ack_in),
.data_out(in_r_TDATA_int_regslice),
.vld_out(in_r_TVALID_int_regslice),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_data_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 4 ))
regslice_both_in_r_V_keep_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TKEEP),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_keep_V_U_ack_in),
.data_out(in_r_TKEEP_int_regslice),
.vld_out(regslice_both_in_r_V_keep_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_keep_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 4 ))
regslice_both_in_r_V_strb_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TSTRB),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_strb_V_U_ack_in),
.data_out(in_r_TSTRB_int_regslice),
.vld_out(regslice_both_in_r_V_strb_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_strb_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_in_r_V_user_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TUSER),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_user_V_U_ack_in),
.data_out(in_r_TUSER_int_regslice),
.vld_out(regslice_both_in_r_V_user_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_user_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_in_r_V_last_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TLAST),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_last_V_U_ack_in),
.data_out(in_r_TLAST_int_regslice),
.vld_out(regslice_both_in_r_V_last_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_last_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_in_r_V_id_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TID),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_id_V_U_ack_in),
.data_out(in_r_TID_int_regslice),
.vld_out(regslice_both_in_r_V_id_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_id_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_in_r_V_dest_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(in_r_TDEST),
.vld_in(in_r_tvalid),
.ack_in(regslice_both_in_r_V_dest_V_U_ack_in),
.data_out(in_r_TDEST_int_regslice),
.vld_out(regslice_both_in_r_V_dest_V_U_vld_out),
.ack_out(in_r_TREADY_int_regslice),
.apdone_blk(regslice_both_in_r_V_dest_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 32 ))
regslice_both_out_r_V_data_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(grp_fu_129_p2),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(out_r_TREADY_int_regslice),
.data_out(out_r_TDATA),
.vld_out(regslice_both_out_r_V_data_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_data_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 4 ))
regslice_both_out_r_V_keep_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_keep_reg_204_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_keep_V_U_ack_in_dummy),
.data_out(out_r_TKEEP),
.vld_out(regslice_both_out_r_V_keep_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_keep_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 4 ))
regslice_both_out_r_V_strb_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_strb_reg_209_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_strb_V_U_ack_in_dummy),
.data_out(out_r_TSTRB),
.vld_out(regslice_both_out_r_V_strb_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_strb_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_user_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_user_reg_214_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_user_V_U_ack_in_dummy),
.data_out(out_r_TUSER),
.vld_out(regslice_both_out_r_V_user_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_user_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_last_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_last_reg_219_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_last_V_U_ack_in_dummy),
.data_out(out_r_TLAST),
.vld_out(regslice_both_out_r_V_last_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_last_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_id_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_id_reg_224_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_id_V_U_ack_in_dummy),
.data_out(out_r_TID),
.vld_out(regslice_both_out_r_V_id_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_id_V_U_apdone_blk)
);
test_square_axis2_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_dest_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_dest_reg_229_pp0_iter1_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_dest_V_U_ack_in_dummy),
.data_out(out_r_TDEST),
.vld_out(regslice_both_out_r_V_dest_V_U_vld_out),
.ack_out(out_r_TREADY),
.apdone_blk(regslice_both_out_r_V_dest_V_U_apdone_blk)
);
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_CS_fsm <= ap_ST_fsm_pp0_stage0;
end else begin
ap_CS_fsm <= ap_NS_fsm;
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_done_reg <= 1'b0;
end else begin
if ((ap_continue_int == 1'b1)) begin
ap_done_reg <= 1'b0;
end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_loop_exit_ready_pp0_iter2_reg == 1'b1))) begin
ap_done_reg <= 1'b1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter1 <= 1'b0;
end else begin
if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin
ap_enable_reg_pp0_iter1 <= 1'b0;
end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
ap_enable_reg_pp0_iter1 <= ap_start_int;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter2 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter2 <= ap_enable_reg_pp0_iter1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter3 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter3 <= ap_enable_reg_pp0_iter2;
end
end
end
always @ (posedge ap_clk) begin
if ((1'b1 == ap_condition_192)) begin
if ((icmp_ln14_fu_142_p2 == 1'd0)) begin
i_fu_82 <= i_2_fu_148_p2;
end else if ((ap_loop_init == 1'b1)) begin
i_fu_82 <= 4'd0;
end
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
ap_loop_exit_ready_pp0_iter1_reg <= ap_loop_exit_ready;
ap_loop_exit_ready_pp0_iter2_reg <= ap_loop_exit_ready_pp0_iter1_reg;
icmp_ln14_reg_194 <= icmp_ln14_fu_142_p2;
icmp_ln14_reg_194_pp0_iter1_reg <= icmp_ln14_reg_194;
val_dest_reg_229_pp0_iter1_reg <= val_dest_reg_229;
val_id_reg_224_pp0_iter1_reg <= val_id_reg_224;
val_keep_reg_204_pp0_iter1_reg <= val_keep_reg_204;
val_last_reg_219_pp0_iter1_reg <= val_last_reg_219;
val_strb_reg_209_pp0_iter1_reg <= val_strb_reg_209;
val_user_reg_214_pp0_iter1_reg <= val_user_reg_214;
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln14_fu_142_p2 == 1'd0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
val_data_reg_198 <= in_r_TDATA_int_regslice;
val_dest_reg_229 <= in_r_TDEST_int_regslice;
val_id_reg_224 <= in_r_TID_int_regslice;
val_keep_reg_204 <= in_r_TKEEP_int_regslice;
val_last_reg_219 <= in_r_TLAST_int_regslice;
val_strb_reg_209 <= in_r_TSTRB_int_regslice;
val_user_reg_214 <= in_r_TUSER_int_regslice;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_subdone) & (icmp_ln14_fu_142_p2 == 1'd1) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
ap_condition_exit_pp0_iter0_stage0 = 1'b1;
end else begin
ap_condition_exit_pp0_iter0_stage0 = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_loop_exit_ready_pp0_iter2_reg == 1'b1))) begin
ap_done_int = 1'b1;
end else begin
ap_done_int = ap_done_reg;
end
end
always @ (*) begin
if (((ap_idle_pp0 == 1'b1) & (ap_start_int == 1'b0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
ap_idle = 1'b1;
end else begin
ap_idle = 1'b0;
end
end
always @ (*) begin
if (((ap_enable_reg_pp0_iter3 == 1'b0) & (ap_enable_reg_pp0_iter2 == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin
ap_idle_pp0 = 1'b1;
end else begin
ap_idle_pp0 = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
ap_ready_int = 1'b1;
end else begin
ap_ready_int = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_loop_init == 1'b1))) begin
ap_sig_allocacmp_i_1 = 4'd0;
end else begin
ap_sig_allocacmp_i_1 = i_fu_82;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
grp_fu_129_ce = 1'b1;
end else begin
grp_fu_129_ce = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (icmp_ln14_fu_142_p2 == 1'd0) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
in_r_TDATA_blk_n = in_r_TVALID_int_regslice;
end else begin
in_r_TDATA_blk_n = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln14_fu_142_p2 == 1'd0) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
in_r_TREADY_int_regslice = 1'b1;
end else begin
in_r_TREADY_int_regslice = 1'b0;
end
end
always @ (*) begin
if ((((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter3 == 1'b1)) | ((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter2 == 1'b1)))) begin
out_r_TDATA_blk_n = out_r_TREADY_int_regslice;
end else begin
out_r_TDATA_blk_n = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter2 == 1'b1))) begin
out_r_TVALID_int_regslice = 1'b1;
end else begin
out_r_TVALID_int_regslice = 1'b0;
end
end
always @ (*) begin
case (ap_CS_fsm)
ap_ST_fsm_pp0_stage0 : begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end
default : begin
ap_NS_fsm = 'bx;
end
endcase
end
assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0];
assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_pp0_stage0_01001 = (((ap_loop_exit_ready_pp0_iter2_reg == 1'b1) & (regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1)) | ((ap_enable_reg_pp0_iter2 == 1'b1) & ((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1) | (out_r_TREADY_int_regslice == 1'b0))) | ((icmp_ln14_fu_142_p2 == 1'd0) & (in_r_TVALID_int_regslice == 1'b0) & (ap_start_int == 1'b1)) | ((out_r_TREADY_int_regslice == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b1)));
end
always @ (*) begin
ap_block_pp0_stage0_11001 = (((ap_loop_exit_ready_pp0_iter2_reg == 1'b1) & (regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1)) | ((ap_enable_reg_pp0_iter2 == 1'b1) & ((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1) | (out_r_TREADY_int_regslice == 1'b0))) | ((icmp_ln14_fu_142_p2 == 1'd0) & (in_r_TVALID_int_regslice == 1'b0) & (ap_start_int == 1'b1)) | ((out_r_TREADY_int_regslice == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b1)));
end
always @ (*) begin
ap_block_pp0_stage0_subdone = (((ap_loop_exit_ready_pp0_iter2_reg == 1'b1) & (regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1)) | ((ap_enable_reg_pp0_iter2 == 1'b1) & ((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1) | (out_r_TREADY_int_regslice == 1'b0))) | ((icmp_ln14_fu_142_p2 == 1'd0) & (in_r_TVALID_int_regslice == 1'b0) & (ap_start_int == 1'b1)) | ((out_r_TREADY_int_regslice == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b1)));
end
always @ (*) begin
ap_block_state1_pp0_stage0_iter0 = ((icmp_ln14_fu_142_p2 == 1'd0) & (in_r_TVALID_int_regslice == 1'b0));
end
assign ap_block_state2_pp0_stage0_iter1 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state3_pp0_stage0_iter2 = ((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1) | (out_r_TREADY_int_regslice == 1'b0));
end
always @ (*) begin
ap_block_state4_pp0_stage0_iter3 = (out_r_TREADY_int_regslice == 1'b0);
end
always @ (*) begin
ap_condition_192 = ((1'b0 == ap_block_pp0_stage0_11001) & (ap_start_int == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0));
end
assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1);
assign ap_enable_reg_pp0_iter0 = ap_start_int;
assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0;
always @ (*) begin
ap_rst_n_inv = ~ap_rst_n;
end
assign i_2_fu_148_p2 = (ap_sig_allocacmp_i_1 + 4'd1);
assign icmp_ln14_fu_142_p2 = ((ap_sig_allocacmp_i_1 == 4'd10) ? 1'b1 : 1'b0);
assign in_r_TREADY = regslice_both_in_r_V_data_V_U_ack_in;
assign out_r_TVALID = regslice_both_out_r_V_data_V_U_vld_out;
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_square_axis2.vcd");
$dumpvars (0, test_square_axis2);
#1;
end
`endif
endmodule //test_square_axis2
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2' に入ります
rm -f results.xml
MODULE=test_square_axis2 TESTCASE= TOPLEVEL=test_square_axis2 TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1687373978
0.00ns INFO cocotb.regression Found test test_square_axis2.test_square_axis2
0.00ns INFO cocotb.regression running test_square_axis2 (1/1)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (write)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control awaddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control awprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control awready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control awvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control wready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wstrb width: 4 bits
0.00ns INFO ...test_square_axis2.s_axi_control wvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control bvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (read)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control araddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control arprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control arready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control arvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control rready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control rvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source
0.00ns INFO cocotb.test_square_axis2.in_r cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis2.in_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.in_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source configuration:
0.00ns INFO cocotb.test_square_axis2.in_r Byte size: 32 bits
0.00ns INFO cocotb.test_square_axis2.in_r Data width: 32 bits (1 bytes)
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source signals:
0.00ns INFO cocotb.test_square_axis2.in_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.in_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.in_r tid: not present
0.00ns INFO cocotb.test_square_axis2.in_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.in_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.in_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.in_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink
0.00ns INFO cocotb.test_square_axis2.out_r cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis2.out_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.out_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink configuration:
0.00ns INFO cocotb.test_square_axis2.out_r Byte size: 32 bits
0.00ns INFO cocotb.test_square_axis2.out_r Data width: 32 bits (1 bytes)
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink signals:
0.00ns INFO cocotb.test_square_axis2.out_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.out_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.out_r tid: not present
0.00ns INFO cocotb.test_square_axis2.out_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.out_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.out_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.out_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r Reset de-asserted
VCD info: dumpfile test_square_axis2.vcd opened for output.
40.00ns INFO ...test_square_axis2.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
70.00ns INFO ...test_square_axis2.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
80.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x00\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=1, sim_time_start=80000, sim_time_end=None)
100.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
100.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
120.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x01\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=120000, sim_time_end=None)
130.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=130000, sim_time_end=130000)
130.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
130.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
140.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=140000, sim_time_end=140000)
150.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=150000, sim_time_end=150000)
160.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x02\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=160000, sim_time_end=None)
160.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=160000, sim_time_end=160000)
160.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
160.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
170.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[1], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=170000, sim_time_end=170000)
180.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=180000, sim_time_end=180000)
190.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=190000, sim_time_end=190000)
190.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
190.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
200.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x03\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=200000, sim_time_end=None)
200.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=200000, sim_time_end=200000)
210.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[4], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=210000, sim_time_end=210000)
220.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=220000, sim_time_end=220000)
220.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 08
220.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
250.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 06
i = 0 tdata = 0
i = 1 tdata = 0
250.00ns INFO cocotb.regression test_square_axis2 failed
Traceback (most recent call last):
File "/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2/test_square_axis2.py", line 66, in test_square_axis2
assert tdata == i * i
AssertionError: assert 0 == (1 * 1)
250.00ns INFO cocotb.regression *********************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*********************************************************************************************
** test_square_axis2.test_square_axis2 FAIL 250.00 0.03 8539.34 **
*********************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 250.00 0.26 977.73 **
*********************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2' から出ます
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2' に入ります
rm -f results.xml
MODULE=test_square_axis2 TESTCASE= TOPLEVEL=test_square_axis2 TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1687374185
0.00ns INFO cocotb.regression Found test test_square_axis2.test_square_axis2
0.00ns INFO cocotb.regression running test_square_axis2 (1/1)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (write)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control awaddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control awprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control awready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control awvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control wready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control wstrb width: 4 bits
0.00ns INFO ...test_square_axis2.s_axi_control wvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control bresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control bvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master (read)
0.00ns INFO ...test_square_axis2.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ...test_square_axis2.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ...test_square_axis2.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master configuration:
0.00ns INFO ...test_square_axis2.s_axi_control Address width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control Byte size: 8 bits
0.00ns INFO ...test_square_axis2.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ...test_square_axis2.s_axi_control AXI lite master signals:
0.00ns INFO ...test_square_axis2.s_axi_control araddr width: 5 bits
0.00ns INFO ...test_square_axis2.s_axi_control arprot: not present
0.00ns INFO ...test_square_axis2.s_axi_control arready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control arvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rdata width: 32 bits
0.00ns INFO ...test_square_axis2.s_axi_control rready width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control rresp: not present
0.00ns INFO ...test_square_axis2.s_axi_control rvalid width: 1 bits
0.00ns INFO ...test_square_axis2.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source
0.00ns INFO cocotb.test_square_axis2.in_r cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis2.in_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.in_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source configuration:
0.00ns INFO cocotb.test_square_axis2.in_r Byte size: 32 bits
0.00ns INFO cocotb.test_square_axis2.in_r Data width: 32 bits (1 bytes)
0.00ns INFO cocotb.test_square_axis2.in_r AXI stream source signals:
0.00ns INFO cocotb.test_square_axis2.in_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.in_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.in_r tid: not present
0.00ns INFO cocotb.test_square_axis2.in_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.in_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.in_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.in_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.in_r Reset de-asserted
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink
0.00ns INFO cocotb.test_square_axis2.out_r cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis2.out_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis2.out_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink configuration:
0.00ns INFO cocotb.test_square_axis2.out_r Byte size: 32 bits
0.00ns INFO cocotb.test_square_axis2.out_r Data width: 32 bits (1 bytes)
0.00ns INFO cocotb.test_square_axis2.out_r AXI stream sink signals:
0.00ns INFO cocotb.test_square_axis2.out_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis2.out_r tdest: not present
0.00ns INFO cocotb.test_square_axis2.out_r tid: not present
0.00ns INFO cocotb.test_square_axis2.out_r tkeep: not present
0.00ns INFO cocotb.test_square_axis2.out_r tlast: not present
0.00ns INFO cocotb.test_square_axis2.out_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r tuser: not present
0.00ns INFO cocotb.test_square_axis2.out_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis2.out_r Reset de-asserted
VCD info: dumpfile test_square_axis2.vcd opened for output.
40.00ns INFO ...test_square_axis2.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
70.00ns INFO ...test_square_axis2.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
80.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x00\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=1, sim_time_start=80000, sim_time_end=None)
100.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
100.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
120.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x01\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=120000, sim_time_end=None)
130.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=130000, sim_time_end=130000)
130.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
130.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
140.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=140000, sim_time_end=140000)
150.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=150000, sim_time_end=150000)
160.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x02\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=160000, sim_time_end=None)
160.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=160000, sim_time_end=160000)
160.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
160.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
170.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[1], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=170000, sim_time_end=170000)
180.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=180000, sim_time_end=180000)
190.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=190000, sim_time_end=190000)
190.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
190.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
200.00ns INFO cocotb.test_square_axis2.in_r TX frame: AxiStreamFrame(tdata=bytearray(b'\x03\x00\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=0, sim_time_start=200000, sim_time_end=None)
200.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=200000, sim_time_end=200000)
210.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[4], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=210000, sim_time_end=210000)
220.00ns INFO cocotb.test_square_axis2.out_r RX frame: AxiStreamFrame(tdata=[0], tkeep=[], tid=[], tdest=[], tuser=[], sim_time_start=220000, sim_time_end=220000)
220.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 08
220.00ns INFO ...test_square_axis2.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
250.00ns INFO ...test_square_axis2.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 06
i = 0 tdata = 0
i = 1 tdata = 0
i = 2 tdata = 0
i = 3 tdata = 0
i = 4 tdata = 1
i = 5 tdata = 0
i = 6 tdata = 0
i = 7 tdata = 0
i = 8 tdata = 4
i = 9 tdata = 0
250.00ns INFO cocotb.regression test_square_axis2 failed
Traceback (most recent call last):
File "/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2/test_square_axis2.py", line 68, in test_square_axis2
assert test.axis_source.empty()
AssertionError: assert False
+ where False = <bound method AxiStreamBase.empty of <cocotbext.axi.axis.AxiStreamSource object at 0x7fa7491f6430>>()
+ where <bound method AxiStreamBase.empty of <cocotbext.axi.axis.AxiStreamSource object at 0x7fa7491f6430>> = <cocotbext.axi.axis.AxiStreamSource object at 0x7fa7491f6430>.empty
+ where <cocotbext.axi.axis.AxiStreamSource object at 0x7fa7491f6430> = <test_square_axis2.TEST object at 0x7fa7492ce940>.axis_source
250.00ns INFO cocotb.regression *********************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*********************************************************************************************
** test_square_axis2.test_square_axis2 FAIL 250.00 0.03 8429.17 **
*********************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 250.00 0.26 962.41 **
*********************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis2' から出ます
i = 0 tdata = 0
i = 1 tdata = 0
i = 2 tdata = 0
i = 3 tdata = 0
i = 4 tdata = 1
i = 5 tdata = 0
i = 6 tdata = 0
i = 7 tdata = 0
i = 8 tdata = 4
i = 9 tdata = 0
// test_square_axi2.cpp
// 2023/06/15 by marsee
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
int test_square_axis2(hls::stream<ap_axis<32,1,1,1> >& in, hls::stream<ap_axis<32,1,1,1> >& out){
#pragma HLS INTERFACE mode=axis register_mode=both port=out register
#pragma HLS INTERFACE mode=axis register_mode=both port=in register
#pragma HLS INTERFACE mode=s_axilite port=return
ap_axis<32,1,1,1> val;
for(int i=0; i<10; i++){
in >> val;
val.data = val.data * val.data;
out << val;
}
return(0);
}
// test_square_axis_tb.cpp
// 2023/06/13 by marsee
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
int test_square_axis(ap_int<32> *in, hls::stream<ap_axis<32,1,1,1> >& out);
int main(){
ap_int<32> data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
hls::stream<ap_axis<32,1,1,1> > outs;
ap_axis<32,1,1,1> val;
test_square_axis(data, outs);
for(int i=0; i<10; i++){
outs >> val;
printf("val.data = %d, val.user = %d, val.last = %d\n",
val.data, val.user, val.last);
}
return(0);
}
masaaki@marsee101-notebook:~/cocotbext-axi/tests/test_square_axis$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: Entering directory '/home/masaaki/cocotbext-axi/tests/test_square_axis'
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s test_square_axis -f sim_build/cmds.f -g2012 test_square_axis.v test_square_axis_control_s_axi.v test_square_axis_gmem_m_axi.v test_square_axis_mul_32s_32s_32_2_1.v test_square_axis_regslice_both.v
rm -f results.xml
MODULE=test_square_axis TESTCASE= TOPLEVEL=test_square_axis TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /usr/local/lib/python3.10/dist-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 11.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.8.0 from /usr/local/lib/python3.10/dist-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1687063383
0.00ns INFO cocotb.regression Found test test_square_axis.test_square_axil
0.00ns INFO cocotb.regression running test_square_axil (1/1)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model (write)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem cocotbext-axi version 0.1.24
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axis.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Address width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awaddr width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awburst width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awcache: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awlen width: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awlock: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awprot: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awqos: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awregion: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awsize width: 3 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awuser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wstrb width: 4 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wuser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bresp width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem buser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model (read)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem cocotbext-axi version 0.1.24
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axis.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Address width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem araddr width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arburst width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arcache: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arlen width: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arlock: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arprot: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arqos: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arregion: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arsize width: 3 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem aruser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rresp width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ruser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master (write)
0.00ns INFO ..b.test_square_axis.s_axi_control cocotbext-axi version 0.1.24
0.00ns INFO ..b.test_square_axis.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axis.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axis.s_axi_control Address width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axis.s_axi_control awaddr width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control awprot: not present
0.00ns INFO ..b.test_square_axis.s_axi_control awready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control awvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wdata width: 32 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wstrb width: 4 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control bready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control bresp: not present
0.00ns INFO ..b.test_square_axis.s_axi_control bvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master (read)
0.00ns INFO ..b.test_square_axis.s_axi_control cocotbext-axi version 0.1.24
0.00ns INFO ..b.test_square_axis.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axis.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axis.s_axi_control Address width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axis.s_axi_control araddr width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control arprot: not present
0.00ns INFO ..b.test_square_axis.s_axi_control arready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control arvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rdata width: 32 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rresp: not present
0.00ns INFO ..b.test_square_axis.s_axi_control rvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink
0.00ns INFO cocotb.test_square_axis.out_r cocotbext-axi version 0.1.24
0.00ns INFO cocotb.test_square_axis.out_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis.out_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink configuration:
0.00ns INFO cocotb.test_square_axis.out_r Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis.out_r Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink signals:
0.00ns INFO cocotb.test_square_axis.out_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.out_r tdest: not present
0.00ns INFO cocotb.test_square_axis.out_r tid: not present
0.00ns INFO cocotb.test_square_axis.out_r tkeep: not present
0.00ns INFO cocotb.test_square_axis.out_r tlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tuser width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r Reset de-asserted
VCD info: dumpfile test_square_axis.vcd opened for output.
40.00ns INFO ..b.test_square_axis.s_axi_control Write start addr: 0x00000018 prot: AxiProt.NONSECURE data: 00 00 00 00
70.00ns INFO ..b.test_square_axis.s_axi_control Write complete addr: 0x00000018 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ..b.test_square_axis.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
110.00ns INFO ..b.test_square_axis.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
110.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
140.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
140.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
170.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
170.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
200.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
200.00ns INFO cocotb.test_square_axis.m_axi_gmem Read burst arid: 0x0 araddr: 0x00000000 arlen: 9 arsize: 2 arprot: AxiProt.0
200.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
230.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
230.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
260.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
260.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
290.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
290.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
320.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
320.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
350.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
350.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
370.00ns INFO cocotb.test_square_axis.out_r RX frame: AxiStreamFrame(tdata=bytearray(b'\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\t\x00\x00\x00\x10\x00\x00\x00\x19\x00\x00\x00$\x00\x00\x001\x00\x00\x00@\x00\x00\x00Q\x00\x00\x00'), tkeep=[], tid=[], tdest=[], tuser=[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], sim_time_start=280000, sim_time_end=370000)
380.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
380.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
410.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 0e
i = 0 tdata = 0 tuser = 1
i = 1 tdata = 1 tuser = 1
i = 2 tdata = 4 tuser = 1
i = 3 tdata = 9 tuser = 1
i = 4 tdata = 16 tuser = 0
i = 5 tdata = 25 tuser = 0
i = 6 tdata = 36 tuser = 0
i = 7 tdata = 49 tuser = 0
i = 8 tdata = 64 tuser = 0
i = 9 tdata = 81 tuser = 0
410.00ns INFO cocotb.regression test_square_axil passed
410.00ns INFO cocotb.regression *******************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*******************************************************************************************
** test_square_axis.test_square_axil PASS 410.00 0.08 5407.80 **
*******************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 410.00 0.28 1480.89 **
*******************************************************************************************
make[1]: Leaving directory '/home/masaaki/cocotbext-axi/tests/test_square_axis'
# Makefile (for test_square_axis)
# 2023/06/14 by marsee
SIM ?= icarus
VERILOG_SOURCES += test_square_axis.v
VERILOG_SOURCES += test_square_axis_control_s_axi.v
VERILOG_SOURCES += test_square_axis_gmem_m_axi.v
VERILOG_SOURCES += test_square_axis_mul_32s_32s_32_2_1.v
VERILOG_SOURCES += test_square_axis_regslice_both.v
TOPLEVEL = test_square_axis
MODULE = test_square_axis
include $(shell cocotb-config --makefiles)/Makefile.sim
# test_aquare_axi.py
# 2023/06/13 by marsee
# I created the software with reference to cocotbext-axi/tests/axil/test_axil.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axil/test_axil.py
# I created the software with reference to cocotbext-axi/tests/axi/test_axi.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axi/test_axi.py
# I created the software with reference to cocotbext-axi/tests/axis/test_axis.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axis/test_axis.py
import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge
from cocotbext.axi import AxiLiteBus, AxiLiteMaster, AxiLiteRam
from cocotbext.axi import AxiBus, AxiMaster, AxiRam
from cocotbext.axi import AxiStreamFrame, AxiStreamBus, AxiStreamSource, AxiStreamSink, AxiStreamMonitor
AP_DONE = 0x2
class TEST:
def __init__(self, dut):
self.dut = dut
cocotb.start_soon(Clock(dut.ap_clk, 10, units="ns").start())
self.axi_ram = AxiRam(AxiBus.from_prefix(dut, "m_axi_gmem"), dut.ap_clk, size=2**16)
self.axil_master = AxiLiteMaster(AxiLiteBus.from_prefix(dut, "s_axi_control"), dut.ap_clk)
self.axis_sink = AxiStreamSink(AxiStreamBus.from_prefix(dut, "out_r"), dut.ap_clk)
@cocotb.test()
async def test_square_axis(dut):
test = TEST(dut)
dut.ap_rst_n.value = 0; # Reset
await Timer(30, units='ns')
dut.ap_rst_n.value = 1; # Normal Operation
await Timer(10, units='ns')
for i in range(10):
test.axi_ram.write(i*4, i.to_bytes(4,'little'))
inv = 0
await test.axil_master.write(0x18, inv.to_bytes(4,'little')) # in_r[31:0]
ap_start = 1
await test.axil_master.write(0x00, ap_start.to_bytes(4,'little')) # ap_start
await test.axil_master.read(0x00, 1)
#await Timer(100, units='ns')
data = await test.axil_master.read(0x00, 1) # wait end
data_int = int.from_bytes(data, 'little')
while (data_int & AP_DONE) != AP_DONE:
data = await test.axil_master.read(0x00, 1)
data_int = int.from_bytes(data, 'little')
axis_frame = await test.axis_sink.recv()
tdata_ba = axis_frame.tdata
tuser = axis_frame.tuser
for i in range(10):
tdata = int.from_bytes(tdata_ba[i*4:i*4+4], 'little')
print('i = ', i, ' tdata = ', tdata, ' tuser = ', tuser[i])
assert tdata == i * i
assert test.axis_sink.empty()
// ==============================================================
// Generated by Vitis HLS v2023.1
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
// ==============================================================
`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="test_square_axis_test_square_axis,hls_ip_2023_1,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z020-clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=7.300000,HLS_SYN_LAT=23,HLS_SYN_TPT=none,HLS_SYN_MEM=4,HLS_SYN_DSP=0,HLS_SYN_FF=1381,HLS_SYN_LUT=1190,HLS_VERSION=2023_1}" *)
module test_square_axis (
ap_clk,
ap_rst_n,
m_axi_gmem_AWVALID,
m_axi_gmem_AWREADY,
m_axi_gmem_AWADDR,
m_axi_gmem_AWID,
m_axi_gmem_AWLEN,
m_axi_gmem_AWSIZE,
m_axi_gmem_AWBURST,
m_axi_gmem_AWLOCK,
m_axi_gmem_AWCACHE,
m_axi_gmem_AWPROT,
m_axi_gmem_AWQOS,
m_axi_gmem_AWREGION,
m_axi_gmem_AWUSER,
m_axi_gmem_WVALID,
m_axi_gmem_WREADY,
m_axi_gmem_WDATA,
m_axi_gmem_wstrb,
m_axi_gmem_WLAST,
m_axi_gmem_WID,
m_axi_gmem_WUSER,
m_axi_gmem_ARVALID,
m_axi_gmem_ARREADY,
m_axi_gmem_ARADDR,
m_axi_gmem_ARID,
m_axi_gmem_ARLEN,
m_axi_gmem_ARSIZE,
m_axi_gmem_ARBURST,
m_axi_gmem_ARLOCK,
m_axi_gmem_ARCACHE,
m_axi_gmem_ARPROT,
m_axi_gmem_ARQOS,
m_axi_gmem_ARREGION,
m_axi_gmem_ARUSER,
m_axi_gmem_RVALID,
m_axi_gmem_RREADY,
m_axi_gmem_RDATA,
m_axi_gmem_RLAST,
m_axi_gmem_RID,
m_axi_gmem_RUSER,
m_axi_gmem_rresp,
m_axi_gmem_BVALID,
m_axi_gmem_BREADY,
m_axi_gmem_bresp,
m_axi_gmem_BID,
m_axi_gmem_BUSER,
out_r_TDATA,
out_r_tvalid,
out_r_tready,
out_r_TKEEP,
out_r_TSTRB,
out_r_tuser,
out_r_tlast,
out_r_TID,
out_r_TDEST,
s_axi_control_AWVALID,
s_axi_control_AWREADY,
s_axi_control_AWADDR,
s_axi_control_WVALID,
s_axi_control_WREADY,
s_axi_control_WDATA,
s_axi_control_wstrb,
s_axi_control_ARVALID,
s_axi_control_ARREADY,
s_axi_control_ARADDR,
s_axi_control_RVALID,
s_axi_control_RREADY,
s_axi_control_RDATA,
s_axi_control_RRESP,
s_axi_control_BVALID,
s_axi_control_BREADY,
s_axi_control_BRESP,
interrupt
);
parameter ap_ST_fsm_state1 = 3'd1;
parameter ap_ST_fsm_pp0_stage0 = 3'd2;
parameter ap_ST_fsm_state15 = 3'd4;
parameter C_S_AXI_CONTROL_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_ADDR_WIDTH = 5;
parameter C_S_AXI_DATA_WIDTH = 32;
parameter C_M_AXI_GMEM_ID_WIDTH = 1;
parameter C_M_AXI_GMEM_ADDR_WIDTH = 32;
parameter C_M_AXI_GMEM_DATA_WIDTH = 32;
parameter C_M_AXI_GMEM_AWUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_ARUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_WUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_RUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_BUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_USER_VALUE = 0;
parameter C_M_AXI_GMEM_PROT_VALUE = 0;
parameter C_M_AXI_GMEM_CACHE_VALUE = 3;
parameter C_M_AXI_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_WSTRB_WIDTH = (32 / 8);
parameter C_S_AXI_WSTRB_WIDTH = (32 / 8);
parameter C_M_AXI_GMEM_WSTRB_WIDTH = (32 / 8);
parameter C_M_AXI_WSTRB_WIDTH = (32 / 8);
input ap_clk;
input ap_rst_n;
output m_axi_gmem_AWVALID;
input m_axi_gmem_AWREADY;
output [C_M_AXI_GMEM_ADDR_WIDTH - 1:0] m_axi_gmem_AWADDR;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_AWID;
output [7:0] m_axi_gmem_AWLEN;
output [2:0] m_axi_gmem_AWSIZE;
output [1:0] m_axi_gmem_AWBURST;
output [1:0] m_axi_gmem_AWLOCK;
output [3:0] m_axi_gmem_AWCACHE;
output [2:0] m_axi_gmem_AWPROT;
output [3:0] m_axi_gmem_AWQOS;
output [3:0] m_axi_gmem_AWREGION;
output [C_M_AXI_GMEM_AWUSER_WIDTH - 1:0] m_axi_gmem_AWUSER;
output m_axi_gmem_WVALID;
input m_axi_gmem_WREADY;
output [C_M_AXI_GMEM_DATA_WIDTH - 1:0] m_axi_gmem_WDATA;
output [C_M_AXI_GMEM_WSTRB_WIDTH - 1:0] m_axi_gmem_wstrb;
output m_axi_gmem_WLAST;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_WID;
output [C_M_AXI_GMEM_WUSER_WIDTH - 1:0] m_axi_gmem_WUSER;
output m_axi_gmem_ARVALID;
input m_axi_gmem_ARREADY;
output [C_M_AXI_GMEM_ADDR_WIDTH - 1:0] m_axi_gmem_ARADDR;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_ARID;
output [7:0] m_axi_gmem_ARLEN;
output [2:0] m_axi_gmem_ARSIZE;
output [1:0] m_axi_gmem_ARBURST;
output [1:0] m_axi_gmem_ARLOCK;
output [3:0] m_axi_gmem_ARCACHE;
output [2:0] m_axi_gmem_ARPROT;
output [3:0] m_axi_gmem_ARQOS;
output [3:0] m_axi_gmem_ARREGION;
output [C_M_AXI_GMEM_ARUSER_WIDTH - 1:0] m_axi_gmem_ARUSER;
input m_axi_gmem_RVALID;
output m_axi_gmem_RREADY;
input [C_M_AXI_GMEM_DATA_WIDTH - 1:0] m_axi_gmem_RDATA;
input m_axi_gmem_RLAST;
input [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_RID;
input [C_M_AXI_GMEM_RUSER_WIDTH - 1:0] m_axi_gmem_RUSER;
input [1:0] m_axi_gmem_rresp;
input m_axi_gmem_BVALID;
output m_axi_gmem_BREADY;
input [1:0] m_axi_gmem_bresp;
input [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_BID;
input [C_M_AXI_GMEM_BUSER_WIDTH - 1:0] m_axi_gmem_BUSER;
output [31:0] out_r_TDATA;
output out_r_tvalid;
input out_r_tready;
output [3:0] out_r_TKEEP;
output [3:0] out_r_TSTRB;
output [0:0] out_r_tuser;
output [0:0] out_r_tlast;
output [0:0] out_r_TID;
output [0:0] out_r_TDEST;
input s_axi_control_AWVALID;
output s_axi_control_AWREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_AWADDR;
input s_axi_control_WVALID;
output s_axi_control_WREADY;
input [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_WDATA;
input [C_S_AXI_CONTROL_WSTRB_WIDTH - 1:0] s_axi_control_wstrb;
input s_axi_control_ARVALID;
output s_axi_control_ARREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_ARADDR;
output s_axi_control_RVALID;
input s_axi_control_RREADY;
output [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_RDATA;
output [1:0] s_axi_control_RRESP;
output s_axi_control_BVALID;
input s_axi_control_BREADY;
output [1:0] s_axi_control_BRESP;
output interrupt;
reg ap_rst_n_inv;
wire ap_start;
reg ap_done;
reg ap_idle;
(* fsm_encoding = "none" *) reg [2:0] ap_CS_fsm;
wire ap_CS_fsm_state1;
reg ap_ready;
wire [31:0] in_r;
reg gmem_blk_n_AR;
wire ap_CS_fsm_pp0_stage0;
reg ap_enable_reg_pp0_iter1;
wire ap_block_pp0_stage0;
reg [0:0] first_iter_0_reg_157;
reg gmem_blk_n_R;
reg ap_enable_reg_pp0_iter9;
reg [0:0] icmp_ln15_reg_244;
reg [0:0] icmp_ln15_reg_244_pp0_iter8_reg;
reg out_r_TDATA_blk_n;
reg ap_enable_reg_pp0_iter11;
reg [0:0] icmp_ln15_reg_244_pp0_iter10_reg;
reg ap_enable_reg_pp0_iter12;
reg [0:0] icmp_ln15_reg_244_pp0_iter11_reg;
wire ap_block_state2_pp0_stage0_iter0;
wire gmem_AWREADY;
wire gmem_WREADY;
reg gmem_ARVALID;
wire gmem_ARREADY;
wire gmem_RVALID;
reg gmem_RREADY;
wire [31:0] gmem_RDATA;
wire [8:0] gmem_RFIFONUM;
wire gmem_BVALID;
wire ap_block_state3_pp0_stage0_iter1;
reg ap_block_state3_io;
wire ap_block_state4_pp0_stage0_iter2;
wire ap_block_state5_pp0_stage0_iter3;
wire ap_block_state6_pp0_stage0_iter4;
wire ap_block_state7_pp0_stage0_iter5;
wire ap_block_state8_pp0_stage0_iter6;
wire ap_block_state9_pp0_stage0_iter7;
wire ap_block_state10_pp0_stage0_iter8;
reg ap_block_state11_pp0_stage0_iter9;
wire ap_block_state12_pp0_stage0_iter10;
reg ap_block_state13_pp0_stage0_iter11;
reg ap_block_state13_io;
reg ap_block_state14_pp0_stage0_iter12;
reg ap_block_state14_io;
reg ap_block_pp0_stage0_11001;
reg [31:0] in_r_read_reg_239;
wire [0:0] icmp_ln15_fu_183_p2;
reg [0:0] icmp_ln15_reg_244_pp0_iter1_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter2_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter3_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter4_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter5_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter6_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter7_reg;
reg [0:0] icmp_ln15_reg_244_pp0_iter9_reg;
wire [0:0] val_user_fu_195_p2;
reg [0:0] val_user_reg_248;
reg [0:0] val_user_reg_248_pp0_iter1_reg;
reg [0:0] val_user_reg_248_pp0_iter2_reg;
reg [0:0] val_user_reg_248_pp0_iter3_reg;
reg [0:0] val_user_reg_248_pp0_iter4_reg;
reg [0:0] val_user_reg_248_pp0_iter5_reg;
reg [0:0] val_user_reg_248_pp0_iter6_reg;
reg [0:0] val_user_reg_248_pp0_iter7_reg;
reg [0:0] val_user_reg_248_pp0_iter8_reg;
reg [0:0] val_user_reg_248_pp0_iter9_reg;
reg [0:0] val_user_reg_248_pp0_iter10_reg;
wire [0:0] val_last_fu_201_p2;
reg [0:0] val_last_reg_253;
reg [0:0] val_last_reg_253_pp0_iter1_reg;
reg [0:0] val_last_reg_253_pp0_iter2_reg;
reg [0:0] val_last_reg_253_pp0_iter3_reg;
reg [0:0] val_last_reg_253_pp0_iter4_reg;
reg [0:0] val_last_reg_253_pp0_iter5_reg;
reg [0:0] val_last_reg_253_pp0_iter6_reg;
reg [0:0] val_last_reg_253_pp0_iter7_reg;
reg [0:0] val_last_reg_253_pp0_iter8_reg;
reg [0:0] val_last_reg_253_pp0_iter9_reg;
reg [0:0] val_last_reg_253_pp0_iter10_reg;
reg signed [31:0] gmem_addr_read_reg_264;
wire [31:0] grp_fu_170_p2;
reg ap_enable_reg_pp0_iter0;
reg ap_block_pp0_stage0_subdone;
reg ap_condition_pp0_exit_iter0_state2;
reg ap_enable_reg_pp0_iter2;
reg ap_enable_reg_pp0_iter3;
reg ap_enable_reg_pp0_iter4;
reg ap_enable_reg_pp0_iter5;
reg ap_enable_reg_pp0_iter6;
reg ap_enable_reg_pp0_iter7;
reg ap_enable_reg_pp0_iter8;
reg ap_enable_reg_pp0_iter10;
wire [31:0] sext_ln15_fu_221_p1;
reg [3:0] i_fu_106;
wire [3:0] add_ln15_fu_189_p2;
reg ap_block_pp0_stage0_01001;
wire [29:0] trunc_ln_fu_212_p4;
reg grp_fu_170_ce;
wire ap_CS_fsm_state15;
wire regslice_both_out_r_V_data_V_U_apdone_blk;
reg [2:0] ap_NS_fsm;
reg ap_ST_fsm_state1_blk;
reg ap_ST_fsm_state15_blk;
reg ap_idle_pp0;
wire ap_enable_pp0;
reg out_r_TVALID_int_regslice;
wire out_r_TREADY_int_regslice;
wire regslice_both_out_r_V_data_V_U_vld_out;
wire regslice_both_out_r_V_keep_V_U_apdone_blk;
wire regslice_both_out_r_V_keep_V_U_ack_in_dummy;
wire regslice_both_out_r_V_keep_V_U_vld_out;
wire regslice_both_out_r_V_strb_V_U_apdone_blk;
wire regslice_both_out_r_V_strb_V_U_ack_in_dummy;
wire regslice_both_out_r_V_strb_V_U_vld_out;
wire regslice_both_out_r_V_user_V_U_apdone_blk;
wire regslice_both_out_r_V_user_V_U_ack_in_dummy;
wire regslice_both_out_r_V_user_V_U_vld_out;
wire regslice_both_out_r_V_last_V_U_apdone_blk;
wire regslice_both_out_r_V_last_V_U_ack_in_dummy;
wire regslice_both_out_r_V_last_V_U_vld_out;
wire regslice_both_out_r_V_id_V_U_apdone_blk;
wire regslice_both_out_r_V_id_V_U_ack_in_dummy;
wire regslice_both_out_r_V_id_V_U_vld_out;
wire regslice_both_out_r_V_dest_V_U_apdone_blk;
wire regslice_both_out_r_V_dest_V_U_ack_in_dummy;
wire regslice_both_out_r_V_dest_V_U_vld_out;
wire ap_ce_reg;
wire [31:0] ap_return;
// power-on initialization
initial begin
#0 ap_CS_fsm = 3'd1;
#0 ap_enable_reg_pp0_iter1 = 1'b0;
#0 ap_enable_reg_pp0_iter9 = 1'b0;
#0 ap_enable_reg_pp0_iter11 = 1'b0;
#0 ap_enable_reg_pp0_iter12 = 1'b0;
#0 ap_enable_reg_pp0_iter0 = 1'b0;
#0 ap_enable_reg_pp0_iter2 = 1'b0;
#0 ap_enable_reg_pp0_iter3 = 1'b0;
#0 ap_enable_reg_pp0_iter4 = 1'b0;
#0 ap_enable_reg_pp0_iter5 = 1'b0;
#0 ap_enable_reg_pp0_iter6 = 1'b0;
#0 ap_enable_reg_pp0_iter7 = 1'b0;
#0 ap_enable_reg_pp0_iter8 = 1'b0;
#0 ap_enable_reg_pp0_iter10 = 1'b0;
end
test_square_axis_control_s_axi #(
.C_S_AXI_ADDR_WIDTH( C_S_AXI_CONTROL_ADDR_WIDTH ),
.C_S_AXI_DATA_WIDTH( C_S_AXI_CONTROL_DATA_WIDTH ))
control_s_axi_U(
.AWVALID(s_axi_control_AWVALID),
.AWREADY(s_axi_control_AWREADY),
.AWADDR(s_axi_control_AWADDR),
.WVALID(s_axi_control_WVALID),
.WREADY(s_axi_control_WREADY),
.WDATA(s_axi_control_WDATA),
.WSTRB(s_axi_control_wstrb),
.ARVALID(s_axi_control_ARVALID),
.ARREADY(s_axi_control_ARREADY),
.ARADDR(s_axi_control_ARADDR),
.RVALID(s_axi_control_RVALID),
.RREADY(s_axi_control_RREADY),
.RDATA(s_axi_control_RDATA),
.RRESP(s_axi_control_RRESP),
.BVALID(s_axi_control_BVALID),
.BREADY(s_axi_control_BREADY),
.BRESP(s_axi_control_BRESP),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.ap_start(ap_start),
.interrupt(interrupt),
.ap_ready(ap_ready),
.ap_done(ap_done),
.ap_idle(ap_idle),
.ap_return(32'd0),
.in_r(in_r)
);
test_square_axis_gmem_m_axi #(
.CONSERVATIVE( 1 ),
.USER_MAXREQS( 5 ),
.MAX_READ_BURST_LENGTH( 16 ),
.MAX_WRITE_BURST_LENGTH( 16 ),
.C_M_AXI_ID_WIDTH( C_M_AXI_GMEM_ID_WIDTH ),
.C_M_AXI_ADDR_WIDTH( C_M_AXI_GMEM_ADDR_WIDTH ),
.C_M_AXI_DATA_WIDTH( C_M_AXI_GMEM_DATA_WIDTH ),
.C_M_AXI_AWUSER_WIDTH( C_M_AXI_GMEM_AWUSER_WIDTH ),
.C_M_AXI_ARUSER_WIDTH( C_M_AXI_GMEM_ARUSER_WIDTH ),
.C_M_AXI_WUSER_WIDTH( C_M_AXI_GMEM_WUSER_WIDTH ),
.C_M_AXI_RUSER_WIDTH( C_M_AXI_GMEM_RUSER_WIDTH ),
.C_M_AXI_BUSER_WIDTH( C_M_AXI_GMEM_BUSER_WIDTH ),
.C_USER_VALUE( C_M_AXI_GMEM_USER_VALUE ),
.C_PROT_VALUE( C_M_AXI_GMEM_PROT_VALUE ),
.C_CACHE_VALUE( C_M_AXI_GMEM_CACHE_VALUE ),
.USER_RFIFONUM_WIDTH( 9 ),
.USER_DW( 32 ),
.USER_AW( 32 ),
.NUM_READ_OUTSTANDING( 16 ),
.NUM_WRITE_OUTSTANDING( 16 ))
gmem_m_axi_U(
.AWVALID(m_axi_gmem_AWVALID),
.AWREADY(m_axi_gmem_AWREADY),
.AWADDR(m_axi_gmem_AWADDR),
.AWID(m_axi_gmem_AWID),
.AWLEN(m_axi_gmem_AWLEN),
.AWSIZE(m_axi_gmem_AWSIZE),
.AWBURST(m_axi_gmem_AWBURST),
.AWLOCK(m_axi_gmem_AWLOCK),
.AWCACHE(m_axi_gmem_AWCACHE),
.AWPROT(m_axi_gmem_AWPROT),
.AWQOS(m_axi_gmem_AWQOS),
.AWREGION(m_axi_gmem_AWREGION),
.AWUSER(m_axi_gmem_AWUSER),
.WVALID(m_axi_gmem_WVALID),
.WREADY(m_axi_gmem_WREADY),
.WDATA(m_axi_gmem_WDATA),
.WSTRB(m_axi_gmem_wstrb),
.WLAST(m_axi_gmem_WLAST),
.WID(m_axi_gmem_WID),
.WUSER(m_axi_gmem_WUSER),
.ARVALID(m_axi_gmem_ARVALID),
.ARREADY(m_axi_gmem_ARREADY),
.ARADDR(m_axi_gmem_ARADDR),
.ARID(m_axi_gmem_ARID),
.ARLEN(m_axi_gmem_ARLEN),
.ARSIZE(m_axi_gmem_ARSIZE),
.ARBURST(m_axi_gmem_ARBURST),
.ARLOCK(m_axi_gmem_ARLOCK),
.ARCACHE(m_axi_gmem_ARCACHE),
.ARPROT(m_axi_gmem_ARPROT),
.ARQOS(m_axi_gmem_ARQOS),
.ARREGION(m_axi_gmem_ARREGION),
.ARUSER(m_axi_gmem_ARUSER),
.RVALID(m_axi_gmem_RVALID),
.RREADY(m_axi_gmem_RREADY),
.RDATA(m_axi_gmem_RDATA),
.RLAST(m_axi_gmem_RLAST),
.RID(m_axi_gmem_RID),
.RUSER(m_axi_gmem_RUSER),
.RRESP(m_axi_gmem_rresp),
.BVALID(m_axi_gmem_BVALID),
.BREADY(m_axi_gmem_BREADY),
.BRESP(m_axi_gmem_bresp),
.BID(m_axi_gmem_BID),
.BUSER(m_axi_gmem_BUSER),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.I_ARVALID(gmem_ARVALID),
.I_ARREADY(gmem_ARREADY),
.I_ARADDR(sext_ln15_fu_221_p1),
.I_ARLEN(32'd10),
.I_RVALID(gmem_RVALID),
.I_RREADY(gmem_RREADY),
.I_RDATA(gmem_RDATA),
.I_RFIFONUM(gmem_RFIFONUM),
.I_AWVALID(1'b0),
.I_AWREADY(gmem_AWREADY),
.I_AWADDR(32'd0),
.I_AWLEN(32'd0),
.I_WVALID(1'b0),
.I_WREADY(gmem_WREADY),
.I_WDATA(32'd0),
.I_WSTRB(4'd0),
.I_BVALID(gmem_BVALID),
.I_BREADY(1'b0)
);
test_square_axis_mul_32s_32s_32_2_1 #(
.ID( 1 ),
.NUM_STAGE( 2 ),
.din0_WIDTH( 32 ),
.din1_WIDTH( 32 ),
.dout_WIDTH( 32 ))
mul_32s_32s_32_2_1_U1(
.clk(ap_clk),
.reset(ap_rst_n_inv),
.din0(gmem_addr_read_reg_264),
.din1(gmem_addr_read_reg_264),
.ce(grp_fu_170_ce),
.dout(grp_fu_170_p2)
);
test_square_axis_regslice_both #(
.DataWidth( 32 ))
regslice_both_out_r_V_data_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(grp_fu_170_p2),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(out_r_TREADY_int_regslice),
.data_out(out_r_TDATA),
.vld_out(regslice_both_out_r_V_data_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_data_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 4 ))
regslice_both_out_r_V_keep_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(4'd0),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_keep_V_U_ack_in_dummy),
.data_out(out_r_TKEEP),
.vld_out(regslice_both_out_r_V_keep_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_keep_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 4 ))
regslice_both_out_r_V_strb_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(4'd0),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_strb_V_U_ack_in_dummy),
.data_out(out_r_TSTRB),
.vld_out(regslice_both_out_r_V_strb_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_strb_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_user_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_user_reg_248_pp0_iter10_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_user_V_U_ack_in_dummy),
.data_out(out_r_tuser),
.vld_out(regslice_both_out_r_V_user_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_user_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_last_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(val_last_reg_253_pp0_iter10_reg),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_last_V_U_ack_in_dummy),
.data_out(out_r_tlast),
.vld_out(regslice_both_out_r_V_last_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_last_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_id_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(1'd0),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_id_V_U_ack_in_dummy),
.data_out(out_r_TID),
.vld_out(regslice_both_out_r_V_id_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_id_V_U_apdone_blk)
);
test_square_axis_regslice_both #(
.DataWidth( 1 ))
regslice_both_out_r_V_dest_V_U(
.ap_clk(ap_clk),
.ap_rst(ap_rst_n_inv),
.data_in(1'd0),
.vld_in(out_r_TVALID_int_regslice),
.ack_in(regslice_both_out_r_V_dest_V_U_ack_in_dummy),
.data_out(out_r_TDEST),
.vld_out(regslice_both_out_r_V_dest_V_U_vld_out),
.ack_out(out_r_tready),
.apdone_blk(regslice_both_out_r_V_dest_V_U_apdone_blk)
);
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_CS_fsm <= ap_ST_fsm_state1;
end else begin
ap_CS_fsm <= ap_NS_fsm;
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter0 <= 1'b0;
end else begin
if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0) & (1'b1 == ap_condition_pp0_exit_iter0_state2))) begin
ap_enable_reg_pp0_iter0 <= 1'b0;
end else if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_enable_reg_pp0_iter0 <= 1'b1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter1 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
if ((1'b1 == ap_condition_pp0_exit_iter0_state2)) begin
ap_enable_reg_pp0_iter1 <= (1'b1 ^ ap_condition_pp0_exit_iter0_state2);
end else if ((1'b1 == 1'b1)) begin
ap_enable_reg_pp0_iter1 <= ap_enable_reg_pp0_iter0;
end
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter10 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter10 <= ap_enable_reg_pp0_iter9;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter11 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter11 <= ap_enable_reg_pp0_iter10;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter12 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter12 <= ap_enable_reg_pp0_iter11;
end else if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_enable_reg_pp0_iter12 <= 1'b0;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter2 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter2 <= ap_enable_reg_pp0_iter1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter3 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter3 <= ap_enable_reg_pp0_iter2;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter4 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter4 <= ap_enable_reg_pp0_iter3;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter5 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter5 <= ap_enable_reg_pp0_iter4;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter6 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter6 <= ap_enable_reg_pp0_iter5;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter7 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter7 <= ap_enable_reg_pp0_iter6;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter8 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter8 <= ap_enable_reg_pp0_iter7;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter9 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter9 <= ap_enable_reg_pp0_iter8;
end
end
end
always @ (posedge ap_clk) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
first_iter_0_reg_157 <= 1'd1;
end else if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (icmp_ln15_reg_244 == 1'd0))) begin
first_iter_0_reg_157 <= 1'd0;
end
end
always @ (posedge ap_clk) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
i_fu_106 <= 4'd0;
end else if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln15_fu_183_p2 == 1'd0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
i_fu_106 <= add_ln15_fu_189_p2;
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0))) begin
gmem_addr_read_reg_264 <= gmem_RDATA;
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
icmp_ln15_reg_244 <= icmp_ln15_fu_183_p2;
icmp_ln15_reg_244_pp0_iter1_reg <= icmp_ln15_reg_244;
val_last_reg_253_pp0_iter1_reg <= val_last_reg_253;
val_user_reg_248_pp0_iter1_reg <= val_user_reg_248;
end
end
always @ (posedge ap_clk) begin
if ((1'b0 == ap_block_pp0_stage0_11001)) begin
icmp_ln15_reg_244_pp0_iter10_reg <= icmp_ln15_reg_244_pp0_iter9_reg;
icmp_ln15_reg_244_pp0_iter11_reg <= icmp_ln15_reg_244_pp0_iter10_reg;
icmp_ln15_reg_244_pp0_iter2_reg <= icmp_ln15_reg_244_pp0_iter1_reg;
icmp_ln15_reg_244_pp0_iter3_reg <= icmp_ln15_reg_244_pp0_iter2_reg;
icmp_ln15_reg_244_pp0_iter4_reg <= icmp_ln15_reg_244_pp0_iter3_reg;
icmp_ln15_reg_244_pp0_iter5_reg <= icmp_ln15_reg_244_pp0_iter4_reg;
icmp_ln15_reg_244_pp0_iter6_reg <= icmp_ln15_reg_244_pp0_iter5_reg;
icmp_ln15_reg_244_pp0_iter7_reg <= icmp_ln15_reg_244_pp0_iter6_reg;
icmp_ln15_reg_244_pp0_iter8_reg <= icmp_ln15_reg_244_pp0_iter7_reg;
icmp_ln15_reg_244_pp0_iter9_reg <= icmp_ln15_reg_244_pp0_iter8_reg;
val_last_reg_253_pp0_iter10_reg <= val_last_reg_253_pp0_iter9_reg;
val_last_reg_253_pp0_iter2_reg <= val_last_reg_253_pp0_iter1_reg;
val_last_reg_253_pp0_iter3_reg <= val_last_reg_253_pp0_iter2_reg;
val_last_reg_253_pp0_iter4_reg <= val_last_reg_253_pp0_iter3_reg;
val_last_reg_253_pp0_iter5_reg <= val_last_reg_253_pp0_iter4_reg;
val_last_reg_253_pp0_iter6_reg <= val_last_reg_253_pp0_iter5_reg;
val_last_reg_253_pp0_iter7_reg <= val_last_reg_253_pp0_iter6_reg;
val_last_reg_253_pp0_iter8_reg <= val_last_reg_253_pp0_iter7_reg;
val_last_reg_253_pp0_iter9_reg <= val_last_reg_253_pp0_iter8_reg;
val_user_reg_248_pp0_iter10_reg <= val_user_reg_248_pp0_iter9_reg;
val_user_reg_248_pp0_iter2_reg <= val_user_reg_248_pp0_iter1_reg;
val_user_reg_248_pp0_iter3_reg <= val_user_reg_248_pp0_iter2_reg;
val_user_reg_248_pp0_iter4_reg <= val_user_reg_248_pp0_iter3_reg;
val_user_reg_248_pp0_iter5_reg <= val_user_reg_248_pp0_iter4_reg;
val_user_reg_248_pp0_iter6_reg <= val_user_reg_248_pp0_iter5_reg;
val_user_reg_248_pp0_iter7_reg <= val_user_reg_248_pp0_iter6_reg;
val_user_reg_248_pp0_iter8_reg <= val_user_reg_248_pp0_iter7_reg;
val_user_reg_248_pp0_iter9_reg <= val_user_reg_248_pp0_iter8_reg;
end
end
always @ (posedge ap_clk) begin
if ((1'b1 == ap_CS_fsm_state1)) begin
in_r_read_reg_239 <= in_r;
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln15_fu_183_p2 == 1'd0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
val_last_reg_253 <= val_last_fu_201_p2;
val_user_reg_248 <= val_user_fu_195_p2;
end
end
always @ (*) begin
if ((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b1)) begin
ap_ST_fsm_state15_blk = 1'b1;
end else begin
ap_ST_fsm_state15_blk = 1'b0;
end
end
always @ (*) begin
if ((ap_start == 1'b0)) begin
ap_ST_fsm_state1_blk = 1'b1;
end else begin
ap_ST_fsm_state1_blk = 1'b0;
end
end
always @ (*) begin
if ((icmp_ln15_fu_183_p2 == 1'd1)) begin
ap_condition_pp0_exit_iter0_state2 = 1'b1;
end else begin
ap_condition_pp0_exit_iter0_state2 = 1'b0;
end
end
always @ (*) begin
if (((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b0) & (1'b1 == ap_CS_fsm_state15))) begin
ap_done = 1'b1;
end else begin
ap_done = 1'b0;
end
end
always @ (*) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b0))) begin
ap_idle = 1'b1;
end else begin
ap_idle = 1'b0;
end
end
always @ (*) begin
if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter10 == 1'b0) & (ap_enable_reg_pp0_iter8 == 1'b0) & (ap_enable_reg_pp0_iter7 == 1'b0) & (ap_enable_reg_pp0_iter6 == 1'b0) & (ap_enable_reg_pp0_iter5 == 1'b0) & (ap_enable_reg_pp0_iter4 == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b0) & (ap_enable_reg_pp0_iter2 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0) & (ap_enable_reg_pp0_iter12 == 1'b0) & (ap_enable_reg_pp0_iter11 == 1'b0) & (ap_enable_reg_pp0_iter9 == 1'b0))) begin
ap_idle_pp0 = 1'b1;
end else begin
ap_idle_pp0 = 1'b0;
end
end
always @ (*) begin
if (((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b0) & (1'b1 == ap_CS_fsm_state15))) begin
ap_ready = 1'b1;
end else begin
ap_ready = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (first_iter_0_reg_157 == 1'd1))) begin
gmem_ARVALID = 1'b1;
end else begin
gmem_ARVALID = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0) & (ap_enable_reg_pp0_iter9 == 1'b1))) begin
gmem_RREADY = 1'b1;
end else begin
gmem_RREADY = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (first_iter_0_reg_157 == 1'd1))) begin
gmem_blk_n_AR = m_axi_gmem_ARREADY;
end else begin
gmem_blk_n_AR = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0) & (ap_enable_reg_pp0_iter9 == 1'b1))) begin
gmem_blk_n_R = m_axi_gmem_RVALID;
end else begin
gmem_blk_n_R = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
grp_fu_170_ce = 1'b1;
end else begin
grp_fu_170_ce = 1'b0;
end
end
always @ (*) begin
if ((((1'b0 == ap_block_pp0_stage0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0) & (ap_enable_reg_pp0_iter12 == 1'b1)) | ((1'b0 == ap_block_pp0_stage0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0) & (ap_enable_reg_pp0_iter11 == 1'b1)))) begin
out_r_TDATA_blk_n = out_r_TREADY_int_regslice;
end else begin
out_r_TDATA_blk_n = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0) & (ap_enable_reg_pp0_iter11 == 1'b1))) begin
out_r_TVALID_int_regslice = 1'b1;
end else begin
out_r_TVALID_int_regslice = 1'b0;
end
end
always @ (*) begin
case (ap_CS_fsm)
ap_ST_fsm_state1 : begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end else begin
ap_NS_fsm = ap_ST_fsm_state1;
end
end
ap_ST_fsm_pp0_stage0 : begin
if ((~((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln15_fu_183_p2 == 1'd1)) & ~((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter12 == 1'b1) & (ap_enable_reg_pp0_iter11 == 1'b0)))) begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end else if ((((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln15_fu_183_p2 == 1'd1)) | ((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter12 == 1'b1) & (ap_enable_reg_pp0_iter11 == 1'b0)))) begin
ap_NS_fsm = ap_ST_fsm_state15;
end else begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end
end
ap_ST_fsm_state15 : begin
if (((regslice_both_out_r_V_data_V_U_apdone_blk == 1'b0) & (1'b1 == ap_CS_fsm_state15))) begin
ap_NS_fsm = ap_ST_fsm_state1;
end else begin
ap_NS_fsm = ap_ST_fsm_state15;
end
end
default : begin
ap_NS_fsm = 'bx;
end
endcase
end
assign add_ln15_fu_189_p2 = (i_fu_106 + 4'd1);
assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd1];
assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0];
assign ap_CS_fsm_state15 = ap_CS_fsm[32'd2];
assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_pp0_stage0_01001 = (((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0) & (ap_enable_reg_pp0_iter12 == 1'b1)) | ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0) & (ap_enable_reg_pp0_iter11 == 1'b1)) | ((gmem_RVALID == 1'b0) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0) & (ap_enable_reg_pp0_iter9 == 1'b1)));
end
always @ (*) begin
ap_block_pp0_stage0_11001 = (((ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_block_state3_io)) | ((gmem_RVALID == 1'b0) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0) & (ap_enable_reg_pp0_iter9 == 1'b1)) | ((ap_enable_reg_pp0_iter12 == 1'b1) & ((1'b1 == ap_block_state14_io) | ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0)))) | ((ap_enable_reg_pp0_iter11 == 1'b1) & ((1'b1 == ap_block_state13_io) | ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0)))));
end
always @ (*) begin
ap_block_pp0_stage0_subdone = (((ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_block_state3_io)) | ((gmem_RVALID == 1'b0) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0) & (ap_enable_reg_pp0_iter9 == 1'b1)) | ((ap_enable_reg_pp0_iter12 == 1'b1) & ((1'b1 == ap_block_state14_io) | ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0)))) | ((ap_enable_reg_pp0_iter11 == 1'b1) & ((1'b1 == ap_block_state13_io) | ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0)))));
end
assign ap_block_state10_pp0_stage0_iter8 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state11_pp0_stage0_iter9 = ((gmem_RVALID == 1'b0) & (icmp_ln15_reg_244_pp0_iter8_reg == 1'd0));
end
assign ap_block_state12_pp0_stage0_iter10 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state13_io = ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0));
end
always @ (*) begin
ap_block_state13_pp0_stage0_iter11 = ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter10_reg == 1'd0));
end
always @ (*) begin
ap_block_state14_io = ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0));
end
always @ (*) begin
ap_block_state14_pp0_stage0_iter12 = ((out_r_TREADY_int_regslice == 1'b0) & (icmp_ln15_reg_244_pp0_iter11_reg == 1'd0));
end
assign ap_block_state2_pp0_stage0_iter0 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state3_io = ((gmem_ARREADY == 1'b0) & (first_iter_0_reg_157 == 1'd1));
end
assign ap_block_state3_pp0_stage0_iter1 = ~(1'b1 == 1'b1);
assign ap_block_state4_pp0_stage0_iter2 = ~(1'b1 == 1'b1);
assign ap_block_state5_pp0_stage0_iter3 = ~(1'b1 == 1'b1);
assign ap_block_state6_pp0_stage0_iter4 = ~(1'b1 == 1'b1);
assign ap_block_state7_pp0_stage0_iter5 = ~(1'b1 == 1'b1);
assign ap_block_state8_pp0_stage0_iter6 = ~(1'b1 == 1'b1);
assign ap_block_state9_pp0_stage0_iter7 = ~(1'b1 == 1'b1);
assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1);
always @ (*) begin
ap_rst_n_inv = ~ap_rst_n;
end
assign icmp_ln15_fu_183_p2 = ((i_fu_106 == 4'd10) ? 1'b1 : 1'b0);
assign out_r_tvalid = regslice_both_out_r_V_data_V_U_vld_out;
assign sext_ln15_fu_221_p1 = $signed(trunc_ln_fu_212_p4);
assign trunc_ln_fu_212_p4 = {{in_r_read_reg_239[31:2]}};
assign val_last_fu_201_p2 = ((i_fu_106 == 4'd9) ? 1'b1 : 1'b0);
assign val_user_fu_195_p2 = ((i_fu_106 == 4'd0) ? 1'b1 : 1'b0);
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_square_axis.vcd");
$dumpvars (0, test_square_axis);
#1;
end
`endif
endmodule //test_square_axis
i = 0 tdata = 151257344 tuser = 1
i = 1 tdata = 824449296 tuser = 0
i = 2 tdata = 20800 tuser = 0
i = 3 tdata = 0 tuser = 0
i = 4 tdata = 0 tuser = 0
i = 5 tdata = 0 tuser = 0
i = 6 tdata = 0 tuser = 0
i = 7 tdata = 0 tuser = 0
i = 8 tdata = 0 tuser = 0
i = 9 tdata = 0 tuser = 0
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis' に入ります
rm -f results.xml
MODULE=test_square_axis TESTCASE= TOPLEVEL=test_square_axis TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1687115958
0.00ns INFO cocotb.regression Found test test_square_axis.test_square_axil
0.00ns INFO cocotb.regression running test_square_axil (1/1)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model (write)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axis.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Address width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awaddr width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awburst width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awcache: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awlen width: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awlock: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awprot: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awqos: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awregion: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awsize width: 3 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awuser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem awvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wstrb width: 4 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wuser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem wvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bresp width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem buser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem bvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model (read)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axis.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Address width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axis.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axis.m_axi_gmem araddr width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arburst width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arcache: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arlen width: 8 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arlock: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arprot: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arqos: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arregion: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arsize width: 3 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem aruser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem arvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rready width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rresp width: 2 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem ruser: not present
0.00ns INFO cocotb.test_square_axis.m_axi_gmem rvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.m_axi_gmem Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master (write)
0.00ns INFO ..b.test_square_axis.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..b.test_square_axis.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axis.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axis.s_axi_control Address width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axis.s_axi_control awaddr width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control awprot: not present
0.00ns INFO ..b.test_square_axis.s_axi_control awready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control awvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wdata width: 32 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wstrb width: 4 bits
0.00ns INFO ..b.test_square_axis.s_axi_control wvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control bready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control bresp: not present
0.00ns INFO ..b.test_square_axis.s_axi_control bvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master (read)
0.00ns INFO ..b.test_square_axis.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..b.test_square_axis.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axis.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axis.s_axi_control Address width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axis.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axis.s_axi_control araddr width: 5 bits
0.00ns INFO ..b.test_square_axis.s_axi_control arprot: not present
0.00ns INFO ..b.test_square_axis.s_axi_control arready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control arvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rdata width: 32 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rready width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control rresp: not present
0.00ns INFO ..b.test_square_axis.s_axi_control rvalid width: 1 bits
0.00ns INFO ..b.test_square_axis.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink
0.00ns INFO cocotb.test_square_axis.out_r cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axis.out_r Copyright (c) 2020 Alex Forencich
0.00ns INFO cocotb.test_square_axis.out_r https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink configuration:
0.00ns INFO cocotb.test_square_axis.out_r Byte size: 32 bits
0.00ns INFO cocotb.test_square_axis.out_r Data width: 32 bits (1 bytes)
0.00ns INFO cocotb.test_square_axis.out_r AXI stream sink signals:
0.00ns INFO cocotb.test_square_axis.out_r tdata width: 32 bits
0.00ns INFO cocotb.test_square_axis.out_r tdest: not present
0.00ns INFO cocotb.test_square_axis.out_r tid: not present
0.00ns INFO cocotb.test_square_axis.out_r tkeep: not present
0.00ns INFO cocotb.test_square_axis.out_r tlast width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tready width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tuser width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r tvalid width: 1 bits
0.00ns INFO cocotb.test_square_axis.out_r Reset de-asserted
VCD info: dumpfile test_square_axis.vcd opened for output.
40.00ns INFO ..b.test_square_axis.s_axi_control Write start addr: 0x00000018 prot: AxiProt.NONSECURE data: 00 00 00 00
70.00ns INFO ..b.test_square_axis.s_axi_control Write complete addr: 0x00000018 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ..b.test_square_axis.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
110.00ns INFO ..b.test_square_axis.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
110.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
140.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
140.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
170.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
170.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
200.00ns INFO cocotb.test_square_axis.m_axi_gmem Read burst arid: 0x0 araddr: 0x00000000 arlen: 9 arsize: 2 arprot: AxiProt.0
200.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
200.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
230.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
230.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
260.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
260.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
290.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
290.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
320.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
320.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
350.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
350.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
370.00ns INFO cocotb.test_square_axis.out_r RX frame: AxiStreamFrame(tdata=[0, 1, 4, 9, 16, 25, 36, 49, 64, 81], tkeep=[], tid=[], tdest=[], tuser=[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], sim_time_start=280000, sim_time_end=370000)
380.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
380.00ns INFO ..b.test_square_axis.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
410.00ns INFO ..b.test_square_axis.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 0e
i = 0 tdata = 151257344 tuser = 1
i = 1 tdata = 824449296 tuser = 0
i = 2 tdata = 20800 tuser = 0
i = 3 tdata = 0 tuser = 0
i = 4 tdata = 0 tuser = 0
i = 5 tdata = 0 tuser = 0
i = 6 tdata = 0 tuser = 0
i = 7 tdata = 0 tuser = 0
i = 8 tdata = 0 tuser = 0
i = 9 tdata = 0 tuser = 0
410.00ns INFO cocotb.regression test_square_axil passed
410.00ns INFO cocotb.regression *******************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*******************************************************************************************
** test_square_axis.test_square_axil PASS 410.00 0.05 7978.31 **
*******************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 410.00 0.28 1460.47 **
*******************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axis' から出ます
// test_square_axis.cpp
// 2023/06/13 by marsee
// Read data with DMA Read and output to AXI4-Stream.
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
int test_square_axis(ap_int<32> *in, hls::stream<ap_axis<32,1,1,1> >& out){
#pragma HLS INTERFACE mode=axis register_mode=both port=out register
#pragma HLS INTERFACE mode=m_axi depth=10 port=in offset=slave
#pragma HLS INTERFACE mode=s_axilite port=return
ap_axis<32,1,1,1> val;
for(int i=0; i<10; i++){
val.data = in[i] * in[i];
if(i == 0)
val.user = 1;
else
val.user = 0;
if(i == 9)
val.last = 1;
else
val.last = 0;
out << val;
}
return(0);
}
// test_square_axis_tb.cpp
// 2023/06/13 by marsee
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
int test_square_axis(ap_int<32> *in, hls::stream<ap_axis<32,1,1,1> >& out);
int main(){
ap_int<32> data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
hls::stream<ap_axis<32,1,1,1> > outs;
ap_axis<32,1,1,1> val;
test_square_axis(data, outs);
for(int i=0; i<10; i++){
outs >> val;
printf("val.data = %d, val.user = %d, val.last = %d\n",
val.data, val.user, val.last);
}
return(0);
}
# Makefile (for test_square_axi)
# 2023/06/08 by marsee
SIM ?= icarus
VERILOG_SOURCES += test_square_axi.v
VERILOG_SOURCES += test_square_axi_control_s_axi.v
VERILOG_SOURCES += test_square_axi_gmem_m_axi.v
VERILOG_SOURCES += test_square_axi_mul_32s_32s_32_2_1.v
TOPLEVEL = test_square_axi
MODULE = test_square_axi
include $(shell cocotb-config --makefiles)/Makefile.sim
# test_aquare_axi.py
# 2023/06/13 by marsee
# I created the software with reference to cocotbext-axi/tests/axil/test_axil.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axil/test_axil.py
# I created the software with reference to cocotbext-axi/tests/axi/test_axi.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axi/test_axi.py
import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge
from cocotbext.axi import AxiLiteBus, AxiLiteMaster, AxiLiteRam
from cocotbext.axi import AxiBus, AxiMaster, AxiRam
AP_DONE = 0x2
class TEST:
def __init__(self, dut):
self.dut = dut
cocotb.start_soon(Clock(dut.ap_clk, 10, units="ns").start())
self.axil_master = AxiLiteMaster(AxiLiteBus.from_prefix(dut, "s_axi_control"), dut.ap_clk)
self.axi_ram = AxiRam(AxiBus.from_prefix(dut, "m_axi_gmem"), dut.ap_clk, size=2**16)
self.axil_master = AxiLiteMaster(AxiLiteBus.from_prefix(dut, "s_axi_control"), dut.ap_clk)
@cocotb.test()
async def test_square_axil(dut):
test = TEST(dut)
dut.ap_rst_n.value = 0; # Reset
await Timer(30, units='ns')
dut.ap_rst_n.value = 1; # Normal Operation
await Timer(10, units='ns')
for i in range(10):
test.axi_ram.write(i*4, i.to_bytes(4,'little'))
inv = 0
out = 40
zero = 0
await test.axil_master.write(0x18, inv.to_bytes(4,'little')) # in_r[31:0]
await test.axil_master.write(0x1C, zero.to_bytes(4,'little')) # in_r[63:32]
await test.axil_master.write(0x24, out.to_bytes(4,'little')) # out_r[31:0]
await test.axil_master.write(0x28, zero.to_bytes(4,'little')) # out_r[63:32]
ap_start = 1
await test.axil_master.write(0x00, ap_start.to_bytes(4,'little')) # ap_start
await test.axil_master.read(0x00, 1)
#await Timer(100, units='ns')
data = await test.axil_master.read(0x00, 1) # wait end
data_int = int.from_bytes(data, 'little')
while (data_int & AP_DONE) != AP_DONE:
data = await test.axil_master.read(0x00, 1)
data_int = int.from_bytes(data, 'little')
for i in range(10):
data = test.axi_ram.read(40+i*4, 1)
data_int = int.from_bytes(data, 'little')
print('i = ', i, ' out = ', data_int)
assert data_int == i*i
// ==============================================================
// Generated by Vitis HLS v2023.1
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
// ==============================================================
`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="test_square_axi_test_square_axi,hls_ip_2023_1,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z020-clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=7.300000,HLS_SYN_LAT=28,HLS_SYN_TPT=none,HLS_SYN_MEM=4,HLS_SYN_DSP=0,HLS_SYN_FF=1555,HLS_SYN_LUT=1351,HLS_VERSION=2023_1}" *)
module test_square_axi (
ap_clk,
ap_rst_n,
m_axi_gmem_AWVALID,
m_axi_gmem_AWREADY,
m_axi_gmem_AWADDR,
m_axi_gmem_AWID,
m_axi_gmem_AWLEN,
m_axi_gmem_AWSIZE,
m_axi_gmem_AWBURST,
m_axi_gmem_AWLOCK,
m_axi_gmem_AWCACHE,
m_axi_gmem_AWPROT,
m_axi_gmem_AWQOS,
m_axi_gmem_AWREGION,
m_axi_gmem_AWUSER,
m_axi_gmem_WVALID,
m_axi_gmem_WREADY,
m_axi_gmem_WDATA,
m_axi_gmem_wstrb,
m_axi_gmem_WLAST,
m_axi_gmem_WID,
m_axi_gmem_WUSER,
m_axi_gmem_ARVALID,
m_axi_gmem_ARREADY,
m_axi_gmem_ARADDR,
m_axi_gmem_ARID,
m_axi_gmem_ARLEN,
m_axi_gmem_ARSIZE,
m_axi_gmem_ARBURST,
m_axi_gmem_ARLOCK,
m_axi_gmem_ARCACHE,
m_axi_gmem_ARPROT,
m_axi_gmem_ARQOS,
m_axi_gmem_ARREGION,
m_axi_gmem_ARUSER,
m_axi_gmem_RVALID,
m_axi_gmem_RREADY,
m_axi_gmem_RDATA,
m_axi_gmem_RLAST,
m_axi_gmem_RID,
m_axi_gmem_RUSER,
m_axi_gmem_rresp,
m_axi_gmem_BVALID,
m_axi_gmem_BREADY,
m_axi_gmem_bresp,
m_axi_gmem_BID,
m_axi_gmem_BUSER,
s_axi_control_AWVALID,
s_axi_control_AWREADY,
s_axi_control_AWADDR,
s_axi_control_WVALID,
s_axi_control_WREADY,
s_axi_control_WDATA,
s_axi_control_wstrb,
s_axi_control_ARVALID,
s_axi_control_ARREADY,
s_axi_control_ARADDR,
s_axi_control_RVALID,
s_axi_control_RREADY,
s_axi_control_RDATA,
s_axi_control_RRESP,
s_axi_control_BVALID,
s_axi_control_BREADY,
s_axi_control_BRESP,
interrupt
);
parameter ap_ST_fsm_state1 = 3'd1;
parameter ap_ST_fsm_pp0_stage0 = 3'd2;
parameter ap_ST_fsm_state20 = 3'd4;
parameter C_S_AXI_CONTROL_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_ADDR_WIDTH = 6;
parameter C_S_AXI_DATA_WIDTH = 32;
parameter C_M_AXI_GMEM_ID_WIDTH = 1;
parameter C_M_AXI_GMEM_ADDR_WIDTH = 64;
parameter C_M_AXI_GMEM_DATA_WIDTH = 32;
parameter C_M_AXI_GMEM_AWUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_ARUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_WUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_RUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_BUSER_WIDTH = 1;
parameter C_M_AXI_GMEM_USER_VALUE = 0;
parameter C_M_AXI_GMEM_PROT_VALUE = 0;
parameter C_M_AXI_GMEM_CACHE_VALUE = 3;
parameter C_M_AXI_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_WSTRB_WIDTH = (32 / 8);
parameter C_S_AXI_WSTRB_WIDTH = (32 / 8);
parameter C_M_AXI_GMEM_WSTRB_WIDTH = (32 / 8);
parameter C_M_AXI_WSTRB_WIDTH = (32 / 8);
input ap_clk;
input ap_rst_n;
output m_axi_gmem_AWVALID;
input m_axi_gmem_AWREADY;
output [C_M_AXI_GMEM_ADDR_WIDTH - 1:0] m_axi_gmem_AWADDR;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_AWID;
output [7:0] m_axi_gmem_AWLEN;
output [2:0] m_axi_gmem_AWSIZE;
output [1:0] m_axi_gmem_AWBURST;
output [1:0] m_axi_gmem_AWLOCK;
output [3:0] m_axi_gmem_AWCACHE;
output [2:0] m_axi_gmem_AWPROT;
output [3:0] m_axi_gmem_AWQOS;
output [3:0] m_axi_gmem_AWREGION;
output [C_M_AXI_GMEM_AWUSER_WIDTH - 1:0] m_axi_gmem_AWUSER;
output m_axi_gmem_WVALID;
input m_axi_gmem_WREADY;
output [C_M_AXI_GMEM_DATA_WIDTH - 1:0] m_axi_gmem_WDATA;
output [C_M_AXI_GMEM_WSTRB_WIDTH - 1:0] m_axi_gmem_wstrb;
output m_axi_gmem_WLAST;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_WID;
output [C_M_AXI_GMEM_WUSER_WIDTH - 1:0] m_axi_gmem_WUSER;
output m_axi_gmem_ARVALID;
input m_axi_gmem_ARREADY;
output [C_M_AXI_GMEM_ADDR_WIDTH - 1:0] m_axi_gmem_ARADDR;
output [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_ARID;
output [7:0] m_axi_gmem_ARLEN;
output [2:0] m_axi_gmem_ARSIZE;
output [1:0] m_axi_gmem_ARBURST;
output [1:0] m_axi_gmem_ARLOCK;
output [3:0] m_axi_gmem_ARCACHE;
output [2:0] m_axi_gmem_ARPROT;
output [3:0] m_axi_gmem_ARQOS;
output [3:0] m_axi_gmem_ARREGION;
output [C_M_AXI_GMEM_ARUSER_WIDTH - 1:0] m_axi_gmem_ARUSER;
input m_axi_gmem_RVALID;
output m_axi_gmem_RREADY;
input [C_M_AXI_GMEM_DATA_WIDTH - 1:0] m_axi_gmem_RDATA;
input m_axi_gmem_RLAST;
input [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_RID;
input [C_M_AXI_GMEM_RUSER_WIDTH - 1:0] m_axi_gmem_RUSER;
input [1:0] m_axi_gmem_rresp;
input m_axi_gmem_BVALID;
output m_axi_gmem_BREADY;
input [1:0] m_axi_gmem_bresp;
input [C_M_AXI_GMEM_ID_WIDTH - 1:0] m_axi_gmem_BID;
input [C_M_AXI_GMEM_BUSER_WIDTH - 1:0] m_axi_gmem_BUSER;
input s_axi_control_AWVALID;
output s_axi_control_AWREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_AWADDR;
input s_axi_control_WVALID;
output s_axi_control_WREADY;
input [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_WDATA;
input [C_S_AXI_CONTROL_WSTRB_WIDTH - 1:0] s_axi_control_wstrb;
input s_axi_control_ARVALID;
output s_axi_control_ARREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_ARADDR;
output s_axi_control_RVALID;
input s_axi_control_RREADY;
output [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_RDATA;
output [1:0] s_axi_control_RRESP;
output s_axi_control_BVALID;
input s_axi_control_BREADY;
output [1:0] s_axi_control_BRESP;
output interrupt;
reg ap_rst_n_inv;
wire ap_start;
reg ap_done;
reg ap_idle;
(* fsm_encoding = "none" *) reg [2:0] ap_CS_fsm;
wire ap_CS_fsm_state1;
reg ap_ready;
wire [63:0] in_r;
wire [63:0] out_r;
reg gmem_blk_n_AR;
wire ap_CS_fsm_pp0_stage0;
reg ap_enable_reg_pp0_iter1;
wire ap_block_pp0_stage0;
reg [0:0] first_iter_0_reg_132;
reg gmem_blk_n_R;
reg ap_enable_reg_pp0_iter9;
reg gmem_blk_n_AW;
reg gmem_blk_n_W;
reg ap_enable_reg_pp0_iter12;
reg gmem_blk_n_B;
reg ap_enable_reg_pp0_iter17;
reg [0:0] icmp_ln11_1_reg_263;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter16_reg;
wire ap_block_state2_pp0_stage0_iter0;
reg gmem_AWVALID;
wire gmem_AWREADY;
reg gmem_WVALID;
wire gmem_WREADY;
reg gmem_ARVALID;
wire gmem_ARREADY;
wire gmem_RVALID;
reg gmem_RREADY;
wire [31:0] gmem_RDATA;
wire [8:0] gmem_RFIFONUM;
wire gmem_BVALID;
reg gmem_BREADY;
wire ap_block_state3_pp0_stage0_iter1;
reg ap_block_state3_io;
wire ap_block_state4_pp0_stage0_iter2;
wire ap_block_state5_pp0_stage0_iter3;
wire ap_block_state6_pp0_stage0_iter4;
wire ap_block_state7_pp0_stage0_iter5;
wire ap_block_state8_pp0_stage0_iter6;
wire ap_block_state9_pp0_stage0_iter7;
wire ap_block_state10_pp0_stage0_iter8;
reg ap_block_state11_pp0_stage0_iter9;
wire ap_block_state12_pp0_stage0_iter10;
wire ap_block_state13_pp0_stage0_iter11;
wire ap_block_state14_pp0_stage0_iter12;
wire ap_block_state15_pp0_stage0_iter13;
wire ap_block_state16_pp0_stage0_iter14;
wire ap_block_state17_pp0_stage0_iter15;
wire ap_block_state18_pp0_stage0_iter16;
reg ap_block_state19_pp0_stage0_iter17;
reg ap_block_pp0_stage0_11001;
reg [63:0] out_r_read_reg_226;
reg [63:0] in_r_read_reg_231;
wire [0:0] icmp_ln11_fu_157_p2;
reg [0:0] icmp_ln11_reg_236;
wire [3:0] add_ln11_fu_163_p2;
reg [3:0] add_ln11_reg_240;
reg [3:0] add_ln11_reg_240_pp0_iter1_reg;
reg [3:0] add_ln11_reg_240_pp0_iter2_reg;
reg [3:0] add_ln11_reg_240_pp0_iter3_reg;
reg [3:0] add_ln11_reg_240_pp0_iter4_reg;
reg [3:0] add_ln11_reg_240_pp0_iter5_reg;
reg [3:0] add_ln11_reg_240_pp0_iter6_reg;
reg [3:0] add_ln11_reg_240_pp0_iter7_reg;
reg [3:0] add_ln11_reg_240_pp0_iter8_reg;
reg signed [31:0] gmem_addr_read_reg_257;
wire [0:0] icmp_ln11_1_fu_214_p2;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter10_reg;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter11_reg;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter12_reg;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter13_reg;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter14_reg;
reg [0:0] icmp_ln11_1_reg_263_pp0_iter15_reg;
wire [31:0] grp_fu_145_p2;
reg [31:0] mul_ln12_reg_267;
reg ap_enable_reg_pp0_iter0;
reg ap_block_pp0_stage0_subdone;
reg ap_condition_pp0_exit_iter0_state2;
reg ap_enable_reg_pp0_iter2;
reg ap_enable_reg_pp0_iter3;
reg ap_enable_reg_pp0_iter4;
reg ap_enable_reg_pp0_iter5;
reg ap_enable_reg_pp0_iter6;
reg ap_enable_reg_pp0_iter7;
reg ap_enable_reg_pp0_iter8;
reg ap_enable_reg_pp0_iter10;
reg ap_enable_reg_pp0_iter11;
reg ap_enable_reg_pp0_iter13;
reg ap_enable_reg_pp0_iter14;
reg ap_enable_reg_pp0_iter15;
reg ap_enable_reg_pp0_iter16;
wire [63:0] sext_ln11_fu_183_p1;
wire [63:0] sext_ln11_1_fu_203_p1;
reg ap_block_pp0_stage0_01001;
reg [3:0] i_fu_88;
wire [61:0] trunc_ln_fu_174_p4;
wire [61:0] trunc_ln11_1_fu_194_p4;
reg grp_fu_145_ce;
wire ap_CS_fsm_state20;
reg [2:0] ap_NS_fsm;
reg ap_ST_fsm_state1_blk;
wire ap_ST_fsm_state20_blk;
reg ap_idle_pp0;
wire ap_enable_pp0;
wire ap_ce_reg;
wire [31:0] ap_return;
// power-on initialization
initial begin
#0 ap_CS_fsm = 3'd1;
#0 ap_enable_reg_pp0_iter1 = 1'b0;
#0 ap_enable_reg_pp0_iter9 = 1'b0;
#0 ap_enable_reg_pp0_iter12 = 1'b0;
#0 ap_enable_reg_pp0_iter17 = 1'b0;
#0 ap_enable_reg_pp0_iter0 = 1'b0;
#0 ap_enable_reg_pp0_iter2 = 1'b0;
#0 ap_enable_reg_pp0_iter3 = 1'b0;
#0 ap_enable_reg_pp0_iter4 = 1'b0;
#0 ap_enable_reg_pp0_iter5 = 1'b0;
#0 ap_enable_reg_pp0_iter6 = 1'b0;
#0 ap_enable_reg_pp0_iter7 = 1'b0;
#0 ap_enable_reg_pp0_iter8 = 1'b0;
#0 ap_enable_reg_pp0_iter10 = 1'b0;
#0 ap_enable_reg_pp0_iter11 = 1'b0;
#0 ap_enable_reg_pp0_iter13 = 1'b0;
#0 ap_enable_reg_pp0_iter14 = 1'b0;
#0 ap_enable_reg_pp0_iter15 = 1'b0;
#0 ap_enable_reg_pp0_iter16 = 1'b0;
end
test_square_axi_control_s_axi #(
.C_S_AXI_ADDR_WIDTH( C_S_AXI_CONTROL_ADDR_WIDTH ),
.C_S_AXI_DATA_WIDTH( C_S_AXI_CONTROL_DATA_WIDTH ))
control_s_axi_U(
.AWVALID(s_axi_control_AWVALID),
.AWREADY(s_axi_control_AWREADY),
.AWADDR(s_axi_control_AWADDR),
.WVALID(s_axi_control_WVALID),
.WREADY(s_axi_control_WREADY),
.WDATA(s_axi_control_WDATA),
.WSTRB(s_axi_control_wstrb),
.ARVALID(s_axi_control_ARVALID),
.ARREADY(s_axi_control_ARREADY),
.ARADDR(s_axi_control_ARADDR),
.RVALID(s_axi_control_RVALID),
.RREADY(s_axi_control_RREADY),
.RDATA(s_axi_control_RDATA),
.RRESP(s_axi_control_RRESP),
.BVALID(s_axi_control_BVALID),
.BREADY(s_axi_control_BREADY),
.BRESP(s_axi_control_BRESP),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.ap_start(ap_start),
.interrupt(interrupt),
.ap_ready(ap_ready),
.ap_done(ap_done),
.ap_idle(ap_idle),
.ap_return(32'd0),
.in_r(in_r),
.out_r(out_r)
);
test_square_axi_gmem_m_axi #(
.CONSERVATIVE( 1 ),
.USER_MAXREQS( 5 ),
.MAX_READ_BURST_LENGTH( 16 ),
.MAX_WRITE_BURST_LENGTH( 16 ),
.C_M_AXI_ID_WIDTH( C_M_AXI_GMEM_ID_WIDTH ),
.C_M_AXI_ADDR_WIDTH( C_M_AXI_GMEM_ADDR_WIDTH ),
.C_M_AXI_DATA_WIDTH( C_M_AXI_GMEM_DATA_WIDTH ),
.C_M_AXI_AWUSER_WIDTH( C_M_AXI_GMEM_AWUSER_WIDTH ),
.C_M_AXI_ARUSER_WIDTH( C_M_AXI_GMEM_ARUSER_WIDTH ),
.C_M_AXI_WUSER_WIDTH( C_M_AXI_GMEM_WUSER_WIDTH ),
.C_M_AXI_RUSER_WIDTH( C_M_AXI_GMEM_RUSER_WIDTH ),
.C_M_AXI_BUSER_WIDTH( C_M_AXI_GMEM_BUSER_WIDTH ),
.C_USER_VALUE( C_M_AXI_GMEM_USER_VALUE ),
.C_PROT_VALUE( C_M_AXI_GMEM_PROT_VALUE ),
.C_CACHE_VALUE( C_M_AXI_GMEM_CACHE_VALUE ),
.USER_RFIFONUM_WIDTH( 9 ),
.USER_DW( 32 ),
.USER_AW( 64 ),
.NUM_READ_OUTSTANDING( 16 ),
.NUM_WRITE_OUTSTANDING( 16 ))
gmem_m_axi_U(
.AWVALID(m_axi_gmem_AWVALID),
.AWREADY(m_axi_gmem_AWREADY),
.AWADDR(m_axi_gmem_AWADDR),
.AWID(m_axi_gmem_AWID),
.AWLEN(m_axi_gmem_AWLEN),
.AWSIZE(m_axi_gmem_AWSIZE),
.AWBURST(m_axi_gmem_AWBURST),
.AWLOCK(m_axi_gmem_AWLOCK),
.AWCACHE(m_axi_gmem_AWCACHE),
.AWPROT(m_axi_gmem_AWPROT),
.AWQOS(m_axi_gmem_AWQOS),
.AWREGION(m_axi_gmem_AWREGION),
.AWUSER(m_axi_gmem_AWUSER),
.WVALID(m_axi_gmem_WVALID),
.WREADY(m_axi_gmem_WREADY),
.WDATA(m_axi_gmem_WDATA),
.WSTRB(m_axi_gmem_wstrb),
.WLAST(m_axi_gmem_WLAST),
.WID(m_axi_gmem_WID),
.WUSER(m_axi_gmem_WUSER),
.ARVALID(m_axi_gmem_ARVALID),
.ARREADY(m_axi_gmem_ARREADY),
.ARADDR(m_axi_gmem_ARADDR),
.ARID(m_axi_gmem_ARID),
.ARLEN(m_axi_gmem_ARLEN),
.ARSIZE(m_axi_gmem_ARSIZE),
.ARBURST(m_axi_gmem_ARBURST),
.ARLOCK(m_axi_gmem_ARLOCK),
.ARCACHE(m_axi_gmem_ARCACHE),
.ARPROT(m_axi_gmem_ARPROT),
.ARQOS(m_axi_gmem_ARQOS),
.ARREGION(m_axi_gmem_ARREGION),
.ARUSER(m_axi_gmem_ARUSER),
.RVALID(m_axi_gmem_RVALID),
.RREADY(m_axi_gmem_RREADY),
.RDATA(m_axi_gmem_RDATA),
.RLAST(m_axi_gmem_RLAST),
.RID(m_axi_gmem_RID),
.RUSER(m_axi_gmem_RUSER),
.RRESP(m_axi_gmem_rresp),
.BVALID(m_axi_gmem_BVALID),
.BREADY(m_axi_gmem_BREADY),
.BRESP(m_axi_gmem_bresp),
.BID(m_axi_gmem_BID),
.BUSER(m_axi_gmem_BUSER),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.I_ARVALID(gmem_ARVALID),
.I_ARREADY(gmem_ARREADY),
.I_ARADDR(sext_ln11_fu_183_p1),
.I_ARLEN(32'd10),
.I_RVALID(gmem_RVALID),
.I_RREADY(gmem_RREADY),
.I_RDATA(gmem_RDATA),
.I_RFIFONUM(gmem_RFIFONUM),
.I_AWVALID(gmem_AWVALID),
.I_AWREADY(gmem_AWREADY),
.I_AWADDR(sext_ln11_1_fu_203_p1),
.I_AWLEN(32'd10),
.I_WVALID(gmem_WVALID),
.I_WREADY(gmem_WREADY),
.I_WDATA(mul_ln12_reg_267),
.I_WSTRB(4'd15),
.I_BVALID(gmem_BVALID),
.I_BREADY(gmem_BREADY)
);
test_square_axi_mul_32s_32s_32_2_1 #(
.ID( 1 ),
.NUM_STAGE( 2 ),
.din0_WIDTH( 32 ),
.din1_WIDTH( 32 ),
.dout_WIDTH( 32 ))
mul_32s_32s_32_2_1_U1(
.clk(ap_clk),
.reset(ap_rst_n_inv),
.din0(gmem_addr_read_reg_257),
.din1(gmem_addr_read_reg_257),
.ce(grp_fu_145_ce),
.dout(grp_fu_145_p2)
);
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_CS_fsm <= ap_ST_fsm_state1;
end else begin
ap_CS_fsm <= ap_NS_fsm;
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter0 <= 1'b0;
end else begin
if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0) & (1'b1 == ap_condition_pp0_exit_iter0_state2))) begin
ap_enable_reg_pp0_iter0 <= 1'b0;
end else if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_enable_reg_pp0_iter0 <= 1'b1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter1 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
if ((1'b1 == ap_condition_pp0_exit_iter0_state2)) begin
ap_enable_reg_pp0_iter1 <= (1'b1 ^ ap_condition_pp0_exit_iter0_state2);
end else if ((1'b1 == 1'b1)) begin
ap_enable_reg_pp0_iter1 <= ap_enable_reg_pp0_iter0;
end
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter10 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter10 <= ap_enable_reg_pp0_iter9;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter11 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter11 <= ap_enable_reg_pp0_iter10;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter12 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter12 <= ap_enable_reg_pp0_iter11;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter13 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter13 <= ap_enable_reg_pp0_iter12;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter14 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter14 <= ap_enable_reg_pp0_iter13;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter15 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter15 <= ap_enable_reg_pp0_iter14;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter16 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter16 <= ap_enable_reg_pp0_iter15;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter17 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter17 <= ap_enable_reg_pp0_iter16;
end else if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_enable_reg_pp0_iter17 <= 1'b0;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter2 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter2 <= ap_enable_reg_pp0_iter1;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter3 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter3 <= ap_enable_reg_pp0_iter2;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter4 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter4 <= ap_enable_reg_pp0_iter3;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter5 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter5 <= ap_enable_reg_pp0_iter4;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter6 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter6 <= ap_enable_reg_pp0_iter5;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter7 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter7 <= ap_enable_reg_pp0_iter6;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter8 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter8 <= ap_enable_reg_pp0_iter7;
end
end
end
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_enable_reg_pp0_iter9 <= 1'b0;
end else begin
if ((1'b0 == ap_block_pp0_stage0_subdone)) begin
ap_enable_reg_pp0_iter9 <= ap_enable_reg_pp0_iter8;
end
end
end
always @ (posedge ap_clk) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
first_iter_0_reg_132 <= 1'd1;
end else if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (icmp_ln11_reg_236 == 1'd0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
first_iter_0_reg_132 <= 1'd0;
end
end
always @ (posedge ap_clk) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
i_fu_88 <= 4'd0;
end else if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln11_fu_157_p2 == 1'd0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
i_fu_88 <= add_ln11_fu_163_p2;
end
end
always @ (posedge ap_clk) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
add_ln11_reg_240 <= add_ln11_fu_163_p2;
add_ln11_reg_240_pp0_iter1_reg <= add_ln11_reg_240;
icmp_ln11_reg_236 <= icmp_ln11_fu_157_p2;
end
end
always @ (posedge ap_clk) begin
if ((1'b0 == ap_block_pp0_stage0_11001)) begin
add_ln11_reg_240_pp0_iter2_reg <= add_ln11_reg_240_pp0_iter1_reg;
add_ln11_reg_240_pp0_iter3_reg <= add_ln11_reg_240_pp0_iter2_reg;
add_ln11_reg_240_pp0_iter4_reg <= add_ln11_reg_240_pp0_iter3_reg;
add_ln11_reg_240_pp0_iter5_reg <= add_ln11_reg_240_pp0_iter4_reg;
add_ln11_reg_240_pp0_iter6_reg <= add_ln11_reg_240_pp0_iter5_reg;
add_ln11_reg_240_pp0_iter7_reg <= add_ln11_reg_240_pp0_iter6_reg;
add_ln11_reg_240_pp0_iter8_reg <= add_ln11_reg_240_pp0_iter7_reg;
gmem_addr_read_reg_257 <= gmem_RDATA;
icmp_ln11_1_reg_263 <= icmp_ln11_1_fu_214_p2;
icmp_ln11_1_reg_263_pp0_iter10_reg <= icmp_ln11_1_reg_263;
icmp_ln11_1_reg_263_pp0_iter11_reg <= icmp_ln11_1_reg_263_pp0_iter10_reg;
icmp_ln11_1_reg_263_pp0_iter12_reg <= icmp_ln11_1_reg_263_pp0_iter11_reg;
icmp_ln11_1_reg_263_pp0_iter13_reg <= icmp_ln11_1_reg_263_pp0_iter12_reg;
icmp_ln11_1_reg_263_pp0_iter14_reg <= icmp_ln11_1_reg_263_pp0_iter13_reg;
icmp_ln11_1_reg_263_pp0_iter15_reg <= icmp_ln11_1_reg_263_pp0_iter14_reg;
icmp_ln11_1_reg_263_pp0_iter16_reg <= icmp_ln11_1_reg_263_pp0_iter15_reg;
mul_ln12_reg_267 <= grp_fu_145_p2;
end
end
always @ (posedge ap_clk) begin
if ((1'b1 == ap_CS_fsm_state1)) begin
in_r_read_reg_231 <= in_r;
out_r_read_reg_226 <= out_r;
end
end
always @ (*) begin
if ((ap_start == 1'b0)) begin
ap_ST_fsm_state1_blk = 1'b1;
end else begin
ap_ST_fsm_state1_blk = 1'b0;
end
end
assign ap_ST_fsm_state20_blk = 1'b0;
always @ (*) begin
if ((icmp_ln11_fu_157_p2 == 1'd1)) begin
ap_condition_pp0_exit_iter0_state2 = 1'b1;
end else begin
ap_condition_pp0_exit_iter0_state2 = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state20)) begin
ap_done = 1'b1;
end else begin
ap_done = 1'b0;
end
end
always @ (*) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b0))) begin
ap_idle = 1'b1;
end else begin
ap_idle = 1'b0;
end
end
always @ (*) begin
if (((ap_enable_reg_pp0_iter9 == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter16 == 1'b0) & (ap_enable_reg_pp0_iter15 == 1'b0) & (ap_enable_reg_pp0_iter14 == 1'b0) & (ap_enable_reg_pp0_iter13 == 1'b0) & (ap_enable_reg_pp0_iter11 == 1'b0) & (ap_enable_reg_pp0_iter10 == 1'b0) & (ap_enable_reg_pp0_iter8 == 1'b0) & (ap_enable_reg_pp0_iter7 == 1'b0) & (ap_enable_reg_pp0_iter6 == 1'b0) & (ap_enable_reg_pp0_iter5 == 1'b0) & (ap_enable_reg_pp0_iter4 == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b0) & (ap_enable_reg_pp0_iter2 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0) & (ap_enable_reg_pp0_iter17 == 1'b0) & (ap_enable_reg_pp0_iter12 == 1'b0))) begin
ap_idle_pp0 = 1'b1;
end else begin
ap_idle_pp0 = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state20)) begin
ap_ready = 1'b1;
end else begin
ap_ready = 1'b0;
end
end
always @ (*) begin
if (((first_iter_0_reg_132 == 1'd1) & (1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
gmem_ARVALID = 1'b1;
end else begin
gmem_ARVALID = 1'b0;
end
end
always @ (*) begin
if (((first_iter_0_reg_132 == 1'd1) & (1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
gmem_AWVALID = 1'b1;
end else begin
gmem_AWVALID = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1) & (ap_enable_reg_pp0_iter17 == 1'b1))) begin
gmem_BREADY = 1'b1;
end else begin
gmem_BREADY = 1'b0;
end
end
always @ (*) begin
if (((ap_enable_reg_pp0_iter9 == 1'b1) & (1'b0 == ap_block_pp0_stage0_11001))) begin
gmem_RREADY = 1'b1;
end else begin
gmem_RREADY = 1'b0;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter12 == 1'b1))) begin
gmem_WVALID = 1'b1;
end else begin
gmem_WVALID = 1'b0;
end
end
always @ (*) begin
if (((first_iter_0_reg_132 == 1'd1) & (1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
gmem_blk_n_AR = m_axi_gmem_ARREADY;
end else begin
gmem_blk_n_AR = 1'b1;
end
end
always @ (*) begin
if (((first_iter_0_reg_132 == 1'd1) & (1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
gmem_blk_n_AW = m_axi_gmem_AWREADY;
end else begin
gmem_blk_n_AW = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1) & (ap_enable_reg_pp0_iter17 == 1'b1))) begin
gmem_blk_n_B = m_axi_gmem_BVALID;
end else begin
gmem_blk_n_B = 1'b1;
end
end
always @ (*) begin
if (((ap_enable_reg_pp0_iter9 == 1'b1) & (1'b0 == ap_block_pp0_stage0))) begin
gmem_blk_n_R = m_axi_gmem_RVALID;
end else begin
gmem_blk_n_R = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter12 == 1'b1))) begin
gmem_blk_n_W = m_axi_gmem_WREADY;
end else begin
gmem_blk_n_W = 1'b1;
end
end
always @ (*) begin
if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin
grp_fu_145_ce = 1'b1;
end else begin
grp_fu_145_ce = 1'b0;
end
end
always @ (*) begin
case (ap_CS_fsm)
ap_ST_fsm_state1 : begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end else begin
ap_NS_fsm = ap_ST_fsm_state1;
end
end
ap_ST_fsm_pp0_stage0 : begin
if ((~((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln11_fu_157_p2 == 1'd1)) & ~((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter16 == 1'b0) & (ap_enable_reg_pp0_iter17 == 1'b1)))) begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end else if ((((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter16 == 1'b0) & (ap_enable_reg_pp0_iter17 == 1'b1)) | ((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b1) & (icmp_ln11_fu_157_p2 == 1'd1)))) begin
ap_NS_fsm = ap_ST_fsm_state20;
end else begin
ap_NS_fsm = ap_ST_fsm_pp0_stage0;
end
end
ap_ST_fsm_state20 : begin
ap_NS_fsm = ap_ST_fsm_state1;
end
default : begin
ap_NS_fsm = 'bx;
end
endcase
end
assign add_ln11_fu_163_p2 = (i_fu_88 + 4'd1);
assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd1];
assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0];
assign ap_CS_fsm_state20 = ap_CS_fsm[32'd2];
assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_pp0_stage0_01001 = (((ap_enable_reg_pp0_iter9 == 1'b1) & (gmem_RVALID == 1'b0)) | ((gmem_BVALID == 1'b0) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1) & (ap_enable_reg_pp0_iter17 == 1'b1)));
end
always @ (*) begin
ap_block_pp0_stage0_11001 = (((ap_enable_reg_pp0_iter9 == 1'b1) & (gmem_RVALID == 1'b0)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_block_state3_io)) | ((gmem_BVALID == 1'b0) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1) & (ap_enable_reg_pp0_iter17 == 1'b1)) | ((gmem_WREADY == 1'b0) & (ap_enable_reg_pp0_iter12 == 1'b1)));
end
always @ (*) begin
ap_block_pp0_stage0_subdone = (((ap_enable_reg_pp0_iter9 == 1'b1) & (gmem_RVALID == 1'b0)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_block_state3_io)) | ((gmem_BVALID == 1'b0) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1) & (ap_enable_reg_pp0_iter17 == 1'b1)) | ((gmem_WREADY == 1'b0) & (ap_enable_reg_pp0_iter12 == 1'b1)));
end
assign ap_block_state10_pp0_stage0_iter8 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state11_pp0_stage0_iter9 = (gmem_RVALID == 1'b0);
end
assign ap_block_state12_pp0_stage0_iter10 = ~(1'b1 == 1'b1);
assign ap_block_state13_pp0_stage0_iter11 = ~(1'b1 == 1'b1);
assign ap_block_state14_pp0_stage0_iter12 = ~(1'b1 == 1'b1);
assign ap_block_state15_pp0_stage0_iter13 = ~(1'b1 == 1'b1);
assign ap_block_state16_pp0_stage0_iter14 = ~(1'b1 == 1'b1);
assign ap_block_state17_pp0_stage0_iter15 = ~(1'b1 == 1'b1);
assign ap_block_state18_pp0_stage0_iter16 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state19_pp0_stage0_iter17 = ((gmem_BVALID == 1'b0) & (icmp_ln11_1_reg_263_pp0_iter16_reg == 1'd1));
end
assign ap_block_state2_pp0_stage0_iter0 = ~(1'b1 == 1'b1);
always @ (*) begin
ap_block_state3_io = (((first_iter_0_reg_132 == 1'd1) & (gmem_AWREADY == 1'b0)) | ((first_iter_0_reg_132 == 1'd1) & (gmem_ARREADY == 1'b0)));
end
assign ap_block_state3_pp0_stage0_iter1 = ~(1'b1 == 1'b1);
assign ap_block_state4_pp0_stage0_iter2 = ~(1'b1 == 1'b1);
assign ap_block_state5_pp0_stage0_iter3 = ~(1'b1 == 1'b1);
assign ap_block_state6_pp0_stage0_iter4 = ~(1'b1 == 1'b1);
assign ap_block_state7_pp0_stage0_iter5 = ~(1'b1 == 1'b1);
assign ap_block_state8_pp0_stage0_iter6 = ~(1'b1 == 1'b1);
assign ap_block_state9_pp0_stage0_iter7 = ~(1'b1 == 1'b1);
assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1);
always @ (*) begin
ap_rst_n_inv = ~ap_rst_n;
end
assign icmp_ln11_1_fu_214_p2 = ((add_ln11_reg_240_pp0_iter8_reg == 4'd10) ? 1'b1 : 1'b0);
assign icmp_ln11_fu_157_p2 = ((i_fu_88 == 4'd10) ? 1'b1 : 1'b0);
assign sext_ln11_1_fu_203_p1 = $signed(trunc_ln11_1_fu_194_p4);
assign sext_ln11_fu_183_p1 = $signed(trunc_ln_fu_174_p4);
assign trunc_ln11_1_fu_194_p4 = {{out_r_read_reg_226[63:2]}};
assign trunc_ln_fu_174_p4 = {{in_r_read_reg_231[63:2]}};
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_square_axi.vcd");
$dumpvars (0, test_square_axi);
#1;
end
`endif
endmodule //test_square_axi
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axi$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axi' に入ります
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s test_square_axi -f sim_build/cmds.f -g2012 test_square_axi.v test_square_axi_control_s_axi.v test_square_axi_gmem_m_axi.v test_square_axi_mul_32s_32s_32_2_1.v
rm -f results.xml
MODULE=test_square_axi TESTCASE= TOPLEVEL=test_square_axi TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1686836887
0.00ns INFO cocotb.regression Found test test_square_axi.test_square_axil
0.00ns INFO cocotb.regression running test_square_axil (1/1)
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master (write)
0.00ns INFO ..tb.test_square_axi.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..tb.test_square_axi.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..tb.test_square_axi.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master configuration:
0.00ns INFO ..tb.test_square_axi.s_axi_control Address width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Byte size: 8 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master signals:
0.00ns INFO ..tb.test_square_axi.s_axi_control awaddr width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control awprot: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control awready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control awvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wdata width: 32 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wstrb width: 4 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control bready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control bresp: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control bvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master (read)
0.00ns INFO ..tb.test_square_axi.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..tb.test_square_axi.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..tb.test_square_axi.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master configuration:
0.00ns INFO ..tb.test_square_axi.s_axi_control Address width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Byte size: 8 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master signals:
0.00ns INFO ..tb.test_square_axi.s_axi_control araddr width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control arprot: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control arready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control arvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rdata width: 32 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rresp: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control rvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model (write)
0.00ns INFO cocotb.test_square_axi.m_axi_gmem cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axi.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Address width: 64 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awaddr width: 64 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awburst width: 2 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awcache: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awlen width: 8 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awlock: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awprot: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awqos: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awready width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awregion: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awsize width: 3 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awuser: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem awvalid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wdata width: 32 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wlast width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wready width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wstrb width: 4 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wuser: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem wvalid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem bid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem bready width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem bresp width: 2 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem buser: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem bvalid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model (read)
0.00ns INFO cocotb.test_square_axi.m_axi_gmem cocotbext-axi version 0.1.18
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Copyright (c) 2021 Alex Forencich
0.00ns INFO cocotb.test_square_axi.m_axi_gmem https://github.com/alexforencich/cocotbext-axi
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model configuration:
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Address width: 64 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem ID width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Byte size: 8 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Data width: 32 bits (4 bytes)
0.00ns INFO cocotb.test_square_axi.m_axi_gmem AXI slave model signals:
0.00ns INFO cocotb.test_square_axi.m_axi_gmem araddr width: 64 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arburst width: 2 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arcache: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arlen width: 8 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arlock: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arprot: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arqos: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arready width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arregion: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arsize width: 3 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem aruser: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem arvalid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rdata width: 32 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rlast width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rready width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rresp width: 2 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem ruser: not present
0.00ns INFO cocotb.test_square_axi.m_axi_gmem rvalid width: 1 bits
0.00ns INFO cocotb.test_square_axi.m_axi_gmem Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master (write)
0.00ns INFO ..tb.test_square_axi.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..tb.test_square_axi.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..tb.test_square_axi.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master configuration:
0.00ns INFO ..tb.test_square_axi.s_axi_control Address width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Byte size: 8 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master signals:
0.00ns INFO ..tb.test_square_axi.s_axi_control awaddr width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control awprot: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control awready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control awvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wdata width: 32 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wstrb width: 4 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control wvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control bready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control bresp: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control bvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master (read)
0.00ns INFO ..tb.test_square_axi.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..tb.test_square_axi.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..tb.test_square_axi.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master configuration:
0.00ns INFO ..tb.test_square_axi.s_axi_control Address width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Byte size: 8 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..tb.test_square_axi.s_axi_control AXI lite master signals:
0.00ns INFO ..tb.test_square_axi.s_axi_control araddr width: 6 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control arprot: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control arready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control arvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rdata width: 32 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rready width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control rresp: not present
0.00ns INFO ..tb.test_square_axi.s_axi_control rvalid width: 1 bits
0.00ns INFO ..tb.test_square_axi.s_axi_control Reset de-asserted
VCD info: dumpfile test_square_axi.vcd opened for output.
40.00ns INFO ..tb.test_square_axi.s_axi_control Write start addr: 0x00000018 prot: AxiProt.NONSECURE data: 00 00 00 00
70.00ns INFO ..tb.test_square_axi.s_axi_control Write complete addr: 0x00000018 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
70.00ns INFO ..tb.test_square_axi.s_axi_control Write start addr: 0x0000001c prot: AxiProt.NONSECURE data: 00 00 00 00
110.00ns INFO ..tb.test_square_axi.s_axi_control Write complete addr: 0x0000001c prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
110.00ns INFO ..tb.test_square_axi.s_axi_control Write start addr: 0x00000024 prot: AxiProt.NONSECURE data: 28 00 00 00
150.00ns INFO ..tb.test_square_axi.s_axi_control Write complete addr: 0x00000024 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
150.00ns INFO ..tb.test_square_axi.s_axi_control Write start addr: 0x00000028 prot: AxiProt.NONSECURE data: 00 00 00 00
190.00ns INFO ..tb.test_square_axi.s_axi_control Write complete addr: 0x00000028 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
190.00ns INFO ..tb.test_square_axi.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
230.00ns INFO ..tb.test_square_axi.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
230.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
260.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
260.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
290.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
290.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
320.00ns INFO cocotb.test_square_axi.m_axi_gmem Read burst arid: 0x0 araddr: 0x00000000 arlen: 9 arsize: 2 arprot: AxiProt.0
320.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
320.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
350.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
350.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
380.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
380.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
410.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
410.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
440.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
440.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
470.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
470.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
500.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
500.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
530.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
530.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
540.00ns INFO cocotb.test_square_axi.m_axi_gmem Write burst awid: 0x0 awaddr: 0x00000028 awlen: 9 awsize: 2 awprot: AxiProt.0
560.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
560.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
590.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
590.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
620.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
620.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
650.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
650.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
680.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 01
680.00ns INFO ..tb.test_square_axi.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
710.00ns INFO ..tb.test_square_axi.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 0a
i = 0 out = 0
i = 1 out = 1
i = 2 out = 4
i = 3 out = 9
i = 4 out = 16
i = 5 out = 25
i = 6 out = 36
i = 7 out = 49
i = 8 out = 64
i = 9 out = 81
710.00ns INFO cocotb.regression test_square_axil passed
710.00ns INFO cocotb.regression ******************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
******************************************************************************************
** test_square_axi.test_square_axil PASS 710.00 0.08 9194.36 **
******************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 710.00 0.30 2387.76 **
******************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axi' から出ます
// test_square_axi.cpp
// 2023/06/13 by marsee
#include <stdint.h>
int test_square_axi(uint32_t *in, uint32_t *out){
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=m_axi depth=10 port=out offset=slave
#pragma HLS INTERFACE mode=m_axi depth=10 port=in offset=slave
for(int i=0; i<10; i++){
out[i] = in[i] * in[i];
}
return(0);
}
// test_square_axi_tb.cpp
// 2023/06/13 by marsee
#include <stdint.h>
#include <iostream>
int test_square_axi(uint32_t *in, uint32_t *out);
int main(){
uint32_t data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
uint32_t result[10];
test_square_axi(data, result);
for(int i=0; i<10; i++){
std::cout << "data[" << i << "]= " << data[i] <<
", result[" << i << "] = " <<
result[i] << std::endl;
}
return(0);
}
//------------------------Address Info-------------------
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read/COR)
// bit 7 - auto_restart (Read/Write)
// bit 9 - interrupt (Read)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - enable ap_done interrupt (Read/Write)
// bit 1 - enable ap_ready interrupt (Read/Write)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - ap_done (Read/TOW)
// bit 1 - ap_ready (Read/TOW)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of in_r
// bit 31~0 - in_r[31:0] (Read/Write)
// 0x1c : Data signal of in_r
// bit 31~0 - in_r[63:32] (Read/Write)
// 0x20 : reserved
// 0x24 : Data signal of out_r
// bit 31~0 - out_r[31:0] (Read/Write)
// 0x28 : Data signal of out_r
// bit 31~0 - out_r[63:32] (Read/Write)
// 0x2c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
# Makefile (for test_square)
# 2023/06/08 by marsee
SIM ?= icarus
VERILOG_SOURCES += test_square_axil.v
VERILOG_SOURCES += test_square_axil_control_s_axi.v
VERILOG_SOURCES += test_square_axil_mul_32s_32s_32_2_1.v
TOPLEVEL = test_square_axil
MODULE = test_square_axil
include $(shell cocotb-config --makefiles)/Makefile.sim
# test_aquare_axil.py
# 2023/06/12 by marsee
# I created the software with reference to cocotbext-axi/tests/axil/test_axil.py.
# https://github.com/alexforencich/cocotbext-axi/blob/master/tests/axil/test_axil.py
import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge
from cocotbext.axi import AxiLiteBus, AxiLiteMaster, AxiLiteRam
class TEST:
def __init__(self, dut):
self.dut = dut
cocotb.start_soon(Clock(dut.ap_clk, 10, units="ns").start())
self.axil_master = AxiLiteMaster(AxiLiteBus.from_prefix(dut, "s_axi_control"), dut.ap_clk)
@cocotb.test()
async def test_square_axil(dut):
test = TEST(dut)
dut.ap_rst_n.value = 0; # Reset
await Timer(30, units='ns')
dut.ap_rst_n.value = 1; # Normal Operation
await Timer(30, units='ns')
await test.axil_master.write(0x18, bytearray([0x03, 0x00, 0x00, 0x00]))
data = await test.axil_master.read(0x18, 1)
await test.axil_master.write(0x00, bytearray([0x01, 0x00, 0x00, 0x00]))
await Timer(30, units='ns')
await test.axil_master.read(0x00, 1)
data = await test.axil_master.read(0x20, 1)
await Timer(200, units='ns')
// ==============================================================
// Generated by Vitis HLS v2023.1
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
// ==============================================================
`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="test_square_axil_test_square_axil,hls_ip_2023_1,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z020-clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.912000,HLS_SYN_LAT=3,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=377,HLS_SYN_LUT=307,HLS_VERSION=2023_1}" *)
module test_square_axil (
ap_clk,
ap_rst_n,
s_axi_control_AWVALID,
s_axi_control_AWREADY,
s_axi_control_AWADDR,
s_axi_control_WVALID,
s_axi_control_WREADY,
s_axi_control_WDATA,
s_axi_control_wstrb,
s_axi_control_ARVALID,
s_axi_control_ARREADY,
s_axi_control_ARADDR,
s_axi_control_RVALID,
s_axi_control_RREADY,
s_axi_control_RDATA,
s_axi_control_RRESP,
s_axi_control_BVALID,
s_axi_control_BREADY,
s_axi_control_BRESP,
interrupt
);
parameter ap_ST_fsm_state1 = 4'd1;
parameter ap_ST_fsm_state2 = 4'd2;
parameter ap_ST_fsm_state3 = 4'd4;
parameter ap_ST_fsm_state4 = 4'd8;
parameter C_S_AXI_CONTROL_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_ADDR_WIDTH = 6;
parameter C_S_AXI_DATA_WIDTH = 32;
parameter C_S_AXI_CONTROL_WSTRB_WIDTH = (32 / 8);
parameter C_S_AXI_WSTRB_WIDTH = (32 / 8);
input ap_clk;
input ap_rst_n;
input s_axi_control_AWVALID;
output s_axi_control_AWREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_AWADDR;
input s_axi_control_WVALID;
output s_axi_control_WREADY;
input [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_WDATA;
input [C_S_AXI_CONTROL_WSTRB_WIDTH - 1:0] s_axi_control_wstrb;
input s_axi_control_ARVALID;
output s_axi_control_ARREADY;
input [C_S_AXI_CONTROL_ADDR_WIDTH - 1:0] s_axi_control_ARADDR;
output s_axi_control_RVALID;
input s_axi_control_RREADY;
output [C_S_AXI_CONTROL_DATA_WIDTH - 1:0] s_axi_control_RDATA;
output [1:0] s_axi_control_RRESP;
output s_axi_control_BVALID;
input s_axi_control_BREADY;
output [1:0] s_axi_control_BRESP;
output interrupt;
reg ap_rst_n_inv;
wire ap_start;
reg ap_done;
reg ap_idle;
(* fsm_encoding = "none" *) reg [3:0] ap_CS_fsm;
wire ap_CS_fsm_state1;
reg ap_ready;
wire [31:0] in_r;
reg out_r_ap_vld;
reg signed [31:0] in_r_read_reg_51;
wire [31:0] grp_fu_47_p2;
reg [31:0] mul_ln10_reg_57;
wire ap_CS_fsm_state3;
wire ap_CS_fsm_state4;
wire ap_CS_fsm_state2;
reg [3:0] ap_NS_fsm;
reg ap_ST_fsm_state1_blk;
wire ap_ST_fsm_state2_blk;
wire ap_ST_fsm_state3_blk;
wire ap_ST_fsm_state4_blk;
wire ap_ce_reg;
wire [31:0] ap_return;
// power-on initialization
initial begin
#0 ap_CS_fsm = 4'd1;
end
test_square_axil_control_s_axi #(
.C_S_AXI_ADDR_WIDTH( C_S_AXI_CONTROL_ADDR_WIDTH ),
.C_S_AXI_DATA_WIDTH( C_S_AXI_CONTROL_DATA_WIDTH ))
control_s_axi_U(
.AWVALID(s_axi_control_AWVALID),
.AWREADY(s_axi_control_AWREADY),
.AWADDR(s_axi_control_AWADDR),
.WVALID(s_axi_control_WVALID),
.WREADY(s_axi_control_WREADY),
.WDATA(s_axi_control_WDATA),
.WSTRB(s_axi_control_wstrb),
.ARVALID(s_axi_control_ARVALID),
.ARREADY(s_axi_control_ARREADY),
.ARADDR(s_axi_control_ARADDR),
.RVALID(s_axi_control_RVALID),
.RREADY(s_axi_control_RREADY),
.RDATA(s_axi_control_RDATA),
.RRESP(s_axi_control_RRESP),
.BVALID(s_axi_control_BVALID),
.BREADY(s_axi_control_BREADY),
.BRESP(s_axi_control_BRESP),
.ACLK(ap_clk),
.ARESET(ap_rst_n_inv),
.ACLK_EN(1'b1),
.ap_start(ap_start),
.interrupt(interrupt),
.ap_ready(ap_ready),
.ap_done(ap_done),
.ap_idle(ap_idle),
.ap_return(32'd0),
.in_r(in_r),
.out_r(mul_ln10_reg_57),
.out_r_ap_vld(out_r_ap_vld)
);
test_square_axil_mul_32s_32s_32_2_1 #(
.ID( 1 ),
.NUM_STAGE( 2 ),
.din0_WIDTH( 32 ),
.din1_WIDTH( 32 ),
.dout_WIDTH( 32 ))
mul_32s_32s_32_2_1_U1(
.clk(ap_clk),
.reset(ap_rst_n_inv),
.din0(in_r_read_reg_51),
.din1(in_r_read_reg_51),
.ce(1'b1),
.dout(grp_fu_47_p2)
);
always @ (posedge ap_clk) begin
if (ap_rst_n_inv == 1'b1) begin
ap_CS_fsm <= ap_ST_fsm_state1;
end else begin
ap_CS_fsm <= ap_NS_fsm;
end
end
always @ (posedge ap_clk) begin
if ((1'b1 == ap_CS_fsm_state1)) begin
in_r_read_reg_51 <= in_r;
end
end
always @ (posedge ap_clk) begin
if ((1'b1 == ap_CS_fsm_state3)) begin
mul_ln10_reg_57 <= grp_fu_47_p2;
end
end
always @ (*) begin
if ((ap_start == 1'b0)) begin
ap_ST_fsm_state1_blk = 1'b1;
end else begin
ap_ST_fsm_state1_blk = 1'b0;
end
end
assign ap_ST_fsm_state2_blk = 1'b0;
assign ap_ST_fsm_state3_blk = 1'b0;
assign ap_ST_fsm_state4_blk = 1'b0;
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
ap_done = 1'b1;
end else begin
ap_done = 1'b0;
end
end
always @ (*) begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b0))) begin
ap_idle = 1'b1;
end else begin
ap_idle = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
ap_ready = 1'b1;
end else begin
ap_ready = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
out_r_ap_vld = 1'b1;
end else begin
out_r_ap_vld = 1'b0;
end
end
always @ (*) begin
case (ap_CS_fsm)
ap_ST_fsm_state1 : begin
if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin
ap_NS_fsm = ap_ST_fsm_state2;
end else begin
ap_NS_fsm = ap_ST_fsm_state1;
end
end
ap_ST_fsm_state2 : begin
ap_NS_fsm = ap_ST_fsm_state3;
end
ap_ST_fsm_state3 : begin
ap_NS_fsm = ap_ST_fsm_state4;
end
ap_ST_fsm_state4 : begin
ap_NS_fsm = ap_ST_fsm_state1;
end
default : begin
ap_NS_fsm = 'bx;
end
endcase
end
assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0];
assign ap_CS_fsm_state2 = ap_CS_fsm[32'd1];
assign ap_CS_fsm_state3 = ap_CS_fsm[32'd2];
assign ap_CS_fsm_state4 = ap_CS_fsm[32'd3];
always @ (*) begin
ap_rst_n_inv = ~ap_rst_n;
end
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_square_axil.vcd");
$dumpvars (0, test_square_axil);
#1;
end
`endif
endmodule //test_square_axil
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axil$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axil' に入ります
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s test_square_axil -f sim_build/cmds.f -g2012 test_square_axil.v test_square_axil_control_s_axi.v test_square_axil_mul_32s_32s_32_2_1.v
rm -f results.xml
MODULE=test_square_axil TESTCASE= TOPLEVEL=test_square_axil TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1686682652
0.00ns INFO cocotb.regression Found test test_square_axil.test_square_axil
0.00ns INFO cocotb.regression running test_square_axil (1/1)
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master (write)
0.00ns INFO ..b.test_square_axil.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..b.test_square_axil.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axil.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axil.s_axi_control Address width: 6 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axil.s_axi_control awaddr width: 6 bits
0.00ns INFO ..b.test_square_axil.s_axi_control awprot: not present
0.00ns INFO ..b.test_square_axil.s_axi_control awready width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control awvalid width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control wdata width: 32 bits
0.00ns INFO ..b.test_square_axil.s_axi_control wready width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control wstrb width: 4 bits
0.00ns INFO ..b.test_square_axil.s_axi_control wvalid width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control bready width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control bresp: not present
0.00ns INFO ..b.test_square_axil.s_axi_control bvalid width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master (read)
0.00ns INFO ..b.test_square_axil.s_axi_control cocotbext-axi version 0.1.18
0.00ns INFO ..b.test_square_axil.s_axi_control Copyright (c) 2020 Alex Forencich
0.00ns INFO ..b.test_square_axil.s_axi_control https://github.com/alexforencich/cocotbext-axi
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master configuration:
0.00ns INFO ..b.test_square_axil.s_axi_control Address width: 6 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Byte size: 8 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Data width: 32 bits (4 bytes)
0.00ns INFO ..b.test_square_axil.s_axi_control AXI lite master signals:
0.00ns INFO ..b.test_square_axil.s_axi_control araddr width: 6 bits
0.00ns INFO ..b.test_square_axil.s_axi_control arprot: not present
0.00ns INFO ..b.test_square_axil.s_axi_control arready width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control arvalid width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control rdata width: 32 bits
0.00ns INFO ..b.test_square_axil.s_axi_control rready width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control rresp: not present
0.00ns INFO ..b.test_square_axil.s_axi_control rvalid width: 1 bits
0.00ns INFO ..b.test_square_axil.s_axi_control Reset de-asserted
VCD info: dumpfile test_square_axil.vcd opened for output.
60.00ns INFO ..b.test_square_axil.s_axi_control Write start addr: 0x00000018 prot: AxiProt.NONSECURE data: 03 00 00 00
90.00ns INFO ..b.test_square_axil.s_axi_control Write complete addr: 0x00000018 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
90.00ns INFO ..b.test_square_axil.s_axi_control Read start addr: 0x00000018 prot: AxiProt.NONSECURE length: 1
120.00ns INFO ..b.test_square_axil.s_axi_control Read complete addr: 0x00000018 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 03
120.00ns INFO ..b.test_square_axil.s_axi_control Write start addr: 0x00000000 prot: AxiProt.NONSECURE data: 01 00 00 00
160.00ns INFO ..b.test_square_axil.s_axi_control Write complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY length: 4
190.00ns INFO ..b.test_square_axil.s_axi_control Read start addr: 0x00000000 prot: AxiProt.NONSECURE length: 1
210.00ns INFO ..b.test_square_axil.s_axi_control Read complete addr: 0x00000000 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 0a
210.00ns INFO ..b.test_square_axil.s_axi_control Read start addr: 0x00000020 prot: AxiProt.NONSECURE length: 1
240.00ns INFO ..b.test_square_axil.s_axi_control Read complete addr: 0x00000020 prot: AxiProt.NONSECURE resp: AxiResp.OKAY data: 09
440.00ns INFO cocotb.regression test_square_axil passed
440.00ns INFO cocotb.regression *******************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*******************************************************************************************
** test_square_axil.test_square_axil PASS 440.00 0.02 18759.06 **
*******************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 440.00 2.40 183.66 **
*******************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotbext-axi/tests/test_square_axil' から出ます
// test_axil.cpp
// 2023/06/12 by marsee
#include <stdint.h>
int test_square_axil(uint32_t in, uint32_t *out){
#pragma HLS INTERFACE mode=s_axilite port=out
#pragma HLS INTERFACE mode=s_axilite port=in
#pragma HLS INTERFACE mode=s_axilite port=return
*out = in * in;
return(0);
}
// test_square_axil_tb.cpp
// 2023/06/13 by marsee
#include <stdint.h>
#include <iostream>
int test_square_axil(uint32_t in, uint32_t *out);
int main(){
uint32_t data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
uint32_t result[10];
for(int i=0; i<10; i++){
test_square_axil(data[i], &result[i]);
}
for(int i=0; i<10; i++){
std::cout << "data[" << i << "]= " << data[i] <<
", result[" << i << "] = " <<
result[i] << std::endl;
}
return(0);
}
//------------------------Address Info-------------------
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read/COR)
// bit 7 - auto_restart (Read/Write)
// bit 9 - interrupt (Read)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - enable ap_done interrupt (Read/Write)
// bit 1 - enable ap_ready interrupt (Read/Write)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - ap_done (Read/TOW)
// bit 1 - ap_ready (Read/TOW)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of in_r
// bit 31~0 - in_r[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of out_r
// bit 31~0 - out_r[31:0] (Read)
// 0x24 : Control signal of out_r
// bit 0 - out_r_ap_vld (Read/COR)
// others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_axis.vcd");
$dumpvars (0, test_axis);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_axi.vcd");
$dumpvars (0, test_axi);
#1;
end
`endif
`ifdef COCOTB_SIM
initial begin
$dumpfile ("test_axil.vcd");
$dumpvars (0, test_axil);
#1;
end
`endif
/*
* CAUTION: This file is automatically generated by Xilinx.
* Version: XSCT 2022.1
* Today is: Sun May 14 16:46:28 2023
*/
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&fpga_full>;
overlay0: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
firmware-name = "kr260_cam_disp.bit.bin";
resets = <&zynqmp_reset 116>, <&zynqmp_reset 117>, <&zynqmp_reset 118>, <&zynqmp_reset 119>;
};
};
fragment@1 {
target = <&amba>;
overlay1: __overlay__ {
afi0: afi0 {
compatible = "xlnx,afi-fpga";
config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x000>;
};
clocking0: clocking0 {
#clock-cells = <0>;
assigned-clock-rates = <99999001>;
assigned-clocks = <&zynqmp_clk 71>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,fclk";
};
clocking1: clocking1 {
#clock-cells = <0>;
assigned-clock-rates = <23809286>;
assigned-clocks = <&zynqmp_clk 72>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 72>;
compatible = "xlnx,fclk";
};
pwm_fan0: pwm-fan {
compatible = "pwm-fan";
status = "okay";
pwms = <&ttc0 2 40000 0>;
};
udmabuf4: udmabuf4 {
compatible = "ikwzm,u-dma-buf";
device-name = "udmabuf4";
minor-number = <0>;
size = <0x02000000>;
};
};
};
fragment@2 {
target = <&amba>;
overlay2: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
active_frame: gpio@80060000 {
#gpio-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
gpio-controller ;
reg = <0x0 0x80060000 0x0 0x10000>;
xlnx,all-inputs = <0x1>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x2>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
misc_clk_0: misc_clk_0 {
#clock-cells = <0>;
clock-frequency = <199998000>;
compatible = "fixed-clock";
};
axi_intc_0: interrupt-controller@80000000 {
#interrupt-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
interrupt-controller ;
interrupt-names = "irq";
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
reg = <0x0 0x80000000 0x0 0x10000>;
xlnx,kind-of-intr = <0xfffffffd>;
xlnx,num-intr-inputs = <0x20>;
};
camera_axi_iic_0: i2c@80010000 {
#address-cells = <1>;
#size-cells = <0>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80010000 0x0 0x10000>;
};
camera_mt9d111_inf_axis_0: mt9d111_inf_axis@80020000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "s_axi_lite_aclk", "m_axis_aclk";
clocks = <&misc_clk_0>, <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80020000 0x0 0x10000>;
};
camera_vflip_dma_write2_0: vflip_dma_write2@80030000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80030000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
display_axi_gpio_0: gpio@80040000 {
#gpio-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
gpio-controller ;
reg = <0x0 0x80040000 0x0 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x1>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x1>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
display_disp_dmar_axis_0: disp_dmar_axis@80050000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80050000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
lap_filter_axim_1: lap_filter_axim@a0000000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
/*clock-names = "ap_clk";
clocks = <&misc_clk_0>;*/
compatible = "generic-uio";
/*interrupt-names = "interrupt";
interrupt-parent = <&axi_intc_0>;
interrupts = <1 2>;*/
reg = <0x0 0xa0000000 0x0 0x10000>;
/*xlnx,s-axi-control-addr-width = <0x6>;
xlnx,s-axi-control-data-width = <0x20>;*/
};
zyxclmm_drm {
compatible = "xlnx,zocl";
interrupts-extended = <&axi_intc_0 0 4>, <&axi_intc_0 1 4>, <&axi_intc_0 2 4>, <&axi_intc_0 3 4>, <&axi_intc_0 4 4>, <&axi_intc_0 5 4>, <&axi_intc_0 6 4>, <&axi_intc_0 7 4>, <&axi_intc_0 8 4>, <&axi_intc_0 9 4>,
<&axi_intc_0 10 4>, <&axi_intc_0 11 4>, <&axi_intc_0 12 4>, <&axi_intc_0 13 4>, <&axi_intc_0 14 4>,
<&axi_intc_0 15 4>, <&axi_intc_0 16 4>, <&axi_intc_0 17 4>, <&axi_intc_0 18 4>, <&axi_intc_0 19 4>,
<&axi_intc_0 20 4>, <&axi_intc_0 21 4>, <&axi_intc_0 22 4>, <&axi_intc_0 23 4>, <&axi_intc_0 24 4>,
<&axi_intc_0 25 4>, <&axi_intc_0 26 4>, <&axi_intc_0 27 4>, <&axi_intc_0 28 4>, <&axi_intc_0 29 4>,
<&axi_intc_0 30 4>, <&axi_intc_0 31 4 >;
};
};
};
};
[ 2626.242446] fpga_manager fpga0: writing kr260_cam_disp.bit.bin to Xilinx ZynqMP FPGA Manager
[ 2628.213587] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[ 2628.223693] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
[ 2628.233615] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay0
[ 2628.243453] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay1
[ 2628.253285] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/afi0
[ 2628.262772] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking0
[ 2628.272693] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking1
[ 2628.282614] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pwm_fan0
[ 2628.292448] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/udmabuf4
[ 2628.302284] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay2
[ 2628.312118] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/active_frame
[ 2628.322300] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/misc_clk_0
[ 2628.332308] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_intc_0
[ 2628.342321] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_axi_iic_0
[ 2628.352854] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_mt9d111_inf_axis_0
[ 2628.364164] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_vflip_dma_write2_0
[ 2628.375474] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_axi_gpio_0
[ 2628.386179] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_disp_dmar_axis_0
[ 2628.397400] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/lap_filter_axim_1
[ 2628.418872] pwm-fan axi:pwm-fan: error -EBUSY: Could not get PWM
[ 2628.424917] pwm-fan: probe of axi:pwm-fan failed with error -16
[ 2628.439545] u-dma-buf udmabuf4: driver version = 4.4.1
[ 2628.444687] u-dma-buf udmabuf4: major number = 239
[ 2628.449645] u-dma-buf udmabuf4: minor number = 0
[ 2628.454436] u-dma-buf udmabuf4: phys address = 0x0000000042200000
[ 2628.460702] u-dma-buf udmabuf4: buffer size = 33554432
[ 2628.466093] u-dma-buf axi:udmabuf4: driver installed.
// cam_dp_ov5642.cpp (for KR260, Debian11)
// 2018/12/14 by marsee
//
// This software converts the left and right of the camera image to BMP file.
// -b : bmp file name
// -n : Start File Number
// -h : help
//
// 2018/12/20 : completed.
// I am using the SVGA driver register setting of https://github.com/virajkanwade/rk3188_android_kernel/blob/master/drivers/media/video/ov5642.c
// 2018/12/22 : fixed
// 2018/12/30 : ov5642_inf_axis[0] fixed
// 2019/02/06 : for DisplayPort
// 2023/04/23 : kr260_cam_disp vitis platform
// 2023/05/15 : bug fix
// 2023/05/16 : Added support for lap_filter_axim
// 2023/06/05 : Changed uio4 and uio5 for ikwzm's Debian11
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define PIXEL_NUM_OF_BYTES 4
#define NUMBER_OF_WRITE_FRAMES 4
#define SVGA_HORIZONTAL_PIXELS 800
#define SVGA_VERTICAL_LINES 600
#define SVGA_ALL_DISP_ADDRESS (SVGA_HORIZONTAL_PIXELS * SVGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define SVGA_3_PICTURES (SVGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define XGA_HORIZONTAL_PIXELS 1024
#define XGA_VERTICAL_LINES 768
#define XGA_ALL_DISP_ADDRESS (XGA_HORIZONTAL_PIXELS * XGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define XGA_3_PICTURES (XGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define HD_HORIZONTAL_PIXELS 1920
#define HD_VERTICAL_LINES 1080
#define HD_ALL_DISP_ADDRESS (HD_HORIZONTAL_PIXELS * HD_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define HD_3_PICTURES (HD_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on);
void cam_i2c_init(volatile unsigned *ov5642_axi_iic) {
ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
ov5642_axi_iic[64] = 0x1; // enable i2c
}
void cam_i2x_write_sync(void) {
// unsigned c;
// c = *cam_i2c_rx_fifo;
// while ((c & 0x84) != 0x80)
// c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
usleep(1000);
}
void cam_i2c_write(volatile unsigned *ov5642_axi_iic, unsigned int device_addr, unsigned int write_addr, unsigned int write_data){
ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
ov5642_axi_iic[66] = (write_addr >> 8) & 0xff; // address upper byte
ov5642_axi_iic[66] = write_addr & 0xff; // address lower byte
ov5642_axi_iic[66] = 0x200 | (write_data & 0xff); // data
cam_i2x_write_sync();
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);
int main(int argc, char *argv[]){
int opt;
int c, help_flag=0;
char bmp_fn[256] = "bmp_file";
char attr[1024];
unsigned long phys_addr;
int file_no = -1;
int fd1, fd2, fd3, fd4, fd5, fd6, fd10, fd11, fd_lap;
volatile unsigned int *ov5642_inf_axis, *axi_iic, *disp_dmar_axis, *vflip_dma_write;
volatile unsigned int *axi_gpio_0, *active_frame_gpio, *lap_filter_axim;
volatile unsigned int *frame_buffer;
int active_frame;
int resolution;
int all_disp_addr;
bool filter_on = false;
resolution = 1; // XGA
while ((opt=getopt(argc, argv, "b:n:h:r:")) != -1){
switch (opt){
case 'b':
strcpy(bmp_fn, optarg);
break;
case 'n':
file_no = atoi(optarg);
printf("file_no = %d\n", file_no+1);
break;
case 'r':
resolution = atoi(optarg);
break;
case 'h':
help_flag = 1;
break;
}
}
if(resolution == 0){
printf("SVGA\n");
} else if(resolution == 1){
printf("XGA\n");
} else {
printf("HD\n");
}
if (help_flag == 1){ // help
printf("Usage : cam_capture [-b <bmp file name>] [-n <Start File Number>] [-h]\n");
printf(" -r [0|1|2](0:SVGA, 1:XGA, 2:HD)\n");
exit(0);
}
// all_disp_addr
switch(resolution){
case 0 :
all_disp_addr = SVGA_ALL_DISP_ADDRESS;
break;
case 1 :
all_disp_addr = XGA_ALL_DISP_ADDRESS;
break;
default : // 2
all_disp_addr = HD_ALL_DISP_ADDRESS;
break;
}
// ov5642_inf_axis-uio IP
fd1 = open("/dev/uio7", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd1 < 1){
fprintf(stderr, "/dev/uio7 (ov5642_inf_axis) open error\n");
exit(-1);
}
ov5642_inf_axis = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
if (!ov5642_inf_axis){
fprintf(stderr, "ov5642_inf_axis mmap error\n");
exit(-1);
}
// axi_iic-uio IP
fd2 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd2 < 1){
fprintf(stderr, "/dev/uio6 (axi_iic) open error\n");
exit(-1);
}
axi_iic = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (!axi_iic){
fprintf(stderr, "axi_iic mmap error\n");
exit(-1);
}
// disp_dmar_axis-uio IP
fd3 = open("/dev/uio10", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd3 < 1){
fprintf(stderr, "/dev/uio10 (disp_dmar_axis) open error\n");
exit(-1);
}
disp_dmar_axis = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
if (!disp_dmar_axis){
fprintf(stderr, "disp_dmar_axis mmap error\n");
exit(-1);
}
// vflip_dma_write-uio IP
fd4 = open("/dev/uio8", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd4 < 1){
fprintf(stderr, "/dev/uio8 (vflip_dma_write) open error\n");
exit(-1);
}
vflip_dma_write = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
if (!vflip_dma_write){
fprintf(stderr, "vflip_dma_write mmap error\n");
exit(-1);
}
// axi_gpio_0-uio IP (init_done output)
fd5 = open("/dev/uio9", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd5 < 1){
fprintf(stderr, "/dev/uio9 (axi_gpio_0) open error\n");
exit(-1);
}
axi_gpio_0 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd5, 0);
if (!axi_gpio_0){
fprintf(stderr, "axi_gpio_0 mmap error\n");
exit(-1);
}
// active_frame_gpio-uio IP (active_frame input)
fd6 = open("/dev/uio5", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd6 < 1){
fprintf(stderr, "/dev/uio5 (active_frame_gpio) open error\n");
exit(-1);
}
active_frame_gpio = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd6, 0);
if (!active_frame_gpio){
fprintf(stderr, "active_frame_gpio mmap error\n");
exit(-1);
}
// laplacian_fliter-uio IP (active_frame input)
fd_lap = open("/dev/uio11", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd_lap < 1){
fprintf(stderr, "/dev/uio11 (lap_filter_axim) open error\n");
exit(-1);
}
lap_filter_axim = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd_lap, 0);
if (!active_frame_gpio){
fprintf(stderr, "lap_filter_axim mmap error\n");
exit(-1);
}
// udmabuf4
fd10 = open("/dev/udmabuf4", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd10 == -1){
fprintf(stderr, "/dev/udmabuf4 open error\n");
exit(-1);
}
frame_buffer = (volatile unsigned int *)mmap(NULL, all_disp_addr*NUMBER_OF_WRITE_FRAMES, PROT_READ|PROT_WRITE, MAP_SHARED, fd10, 0);
if (!frame_buffer){
fprintf(stderr, "frame_buffer4 mmap error\n");
exit(-1);
}
// phys_addr of udmabuf4
fd11 = open("/sys/class/u-dma-buf/udmabuf4/phys_addr", O_RDONLY);
if (fd11 == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf4/phys_addr open error\n");
exit(-1);
}
read(fd11, attr, 1024);
sscanf(attr, "%lx", &phys_addr);
close(fd11);
printf("phys_addr = %x\n", (int)phys_addr);
// vflip_dma_write start
vflip_dma_write[6] = phys_addr; // fb0
vflip_dma_write[8] = phys_addr+all_disp_addr; // fb1
vflip_dma_write[10] = phys_addr+2*all_disp_addr; // fb2
vflip_dma_write[12] = resolution;
vflip_dma_write[0] = 0x1; // start
vflip_dma_write[0] = 0x80; // EnableAutoRestart
// CMOS Camera initialize, ov5642
cam_i2c_init(axi_iic);
cam_reg_set(axi_iic, 0x78); // OV5642 register set
ov5642_inf_axis[0] = phys_addr; // ov5642 AXI4-Stream Start
ov5642_inf_axis[1] = 0;
// disp_dmar_axis start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
disp_dmar_axis[10] = resolution;
axi_gpio_0[0] = 1; // disp_dmar_axis start(init_done = 1)
char bmp_file[256];
// All 0 set
int all_disp_frame_index = all_disp_addr/PIXEL_NUM_OF_BYTES*NUMBER_OF_WRITE_FRAMES;
for (int i=0; i<all_disp_frame_index; i++){
frame_buffer[i] = 0x0;
}
// lap_filer_axm initialize
lap_filter_axim[5] = 0 ; // bit 31~0 - cam_fb[63:32] (Read/Write)
lap_filter_axim[7] = phys_addr+3*all_disp_addr; // bit 31~0 - lap_fb[31:0] (Read/Write)
lap_filter_axim[8] = 0; // bit 31~0 - lap_fb[63:32] (Read/Write)
switch (resolution){
case 0 : // SVGA
lap_filter_axim[10] = SVGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = SVGA_VERTICAL_LINES;
break;
case 1 : // XGA
lap_filter_axim[10] = XGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = XGA_VERTICAL_LINES;
break;
default : // HD
lap_filter_axim[10] = HD_HORIZONTAL_PIXELS;
lap_filter_axim[12] = HD_VERTICAL_LINES;
break;
}
// w - writed the left and right eye's bmp files. q - exit.
c = getc(stdin);
while(c != 'q'){
switch ((char)c) {
case 'w' : // w - writed a bmp files.
// writed the frame buffer
file_no++;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'e' : // e - writed a same bmp files.
// writed the frame buffer
if (file_no == -1)
file_no = 0;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'f' : // laplacian_filter on
filter_on = true;
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
int read_frame;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
lap_filter_axim[4] = phys_addr+read_frame*all_disp_addr;
lap_filter_axim[0] = 0x81; // ap_start + auto_restart
disp_dmar_axis[4] = phys_addr+3*all_disp_addr; // fb0
disp_dmar_axis[6] = phys_addr+3*all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+3*all_disp_addr; // fb2
break;
case 'c' : // Display camera image
filter_on = false;
lap_filter_axim[0] = 1; // ap_start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
break;
}
c = getc(stdin);
}
munmap((void *)ov5642_inf_axis, 0x1000);
munmap((void *)axi_iic, 0x1000);
munmap((void *)disp_dmar_axis, 0x10000);
munmap((void *)vflip_dma_write, 0x10000);
munmap((void *)axi_gpio_0, 0x1000);
munmap((void *)active_frame_gpio, 0x1000);
munmap((void *)frame_buffer, all_disp_addr*3);
close(fd1);
close(fd2);
close(fd3);
close(fd4);
close(fd5);
close(fd6);
close(fd10);
return(0);
}
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on){
int read_frame;
int img_width, img_height;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
switch(resolution){
case 0 :
img_width = SVGA_HORIZONTAL_PIXELS;
img_height = SVGA_VERTICAL_LINES;
break;
case 1 :
img_width = XGA_HORIZONTAL_PIXELS;
img_height = XGA_VERTICAL_LINES;
break;
default : // case 2 :
img_width = HD_HORIZONTAL_PIXELS;
img_height = HD_VERTICAL_LINES;
break;
}
int offset_addr;
if (filter_on == false){
offset_addr = read_frame * img_width * img_height;
}else{
offset_addr = 3 * img_width * img_height;
}
cv::Mat img(img_height, img_width, CV_8UC3);
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for(int y=0; y<img.rows; y++){
for(int x=0; x<img.cols; x++){
cv::Vec3b pixel;
int rgb = frame_buffer[offset_addr+y*img.cols+x];
pixel[0] = (rgb & 0xff); // blue
pixel[1] = (rgb & 0xff00) >> 8; // green
pixel[2] = (rgb & 0xff0000) >> 16; // red
dst_vec3b(y,x) = pixel;
}
}
cv::imwrite(bmp_file, img);
return(0);
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);
return(0);
}
fpga@debian-fpga:~/opencv/build$ cmake -S /home/fpga/opencv/opencv-3.4.16 -B /home/fpga/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=OFF -D WITH_VTK=OFF -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF -D WITH_FFMPEG=OFF
-- The CXX compiler identification is GNU 10.2.1
-- The C compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detected processor: aarch64
-- Performing Test HAVE_CXX11 (check file: cmake/checks/cxx11.cpp)
-- Performing Test HAVE_CXX11 - Success
-- Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.7")
-- Found PythonInterp: /usr/bin/python3.8 (Required is at least version "3.2")
-- Looking for ccache - not found
-- Performing Test HAVE_CXX_FSIGNED_CHAR
-- Performing Test HAVE_CXX_FSIGNED_CHAR - Success
-- Performing Test HAVE_C_FSIGNED_CHAR
-- Performing Test HAVE_C_FSIGNED_CHAR - Success
-- Performing Test HAVE_CXX_FFAST_MATH
-- Performing Test HAVE_CXX_FFAST_MATH - Success
-- Performing Test HAVE_C_FFAST_MATH
-- Performing Test HAVE_C_FFAST_MATH - Success
-- Performing Test HAVE_CXX_W
-- Performing Test HAVE_CXX_W - Success
-- Performing Test HAVE_C_W
-- Performing Test HAVE_C_W - Success
-- Performing Test HAVE_CXX_WALL
-- Performing Test HAVE_CXX_WALL - Success
-- Performing Test HAVE_C_WALL
-- Performing Test HAVE_C_WALL - Success
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE - Success
-- Performing Test HAVE_C_WERROR_RETURN_TYPE
-- Performing Test HAVE_C_WERROR_RETURN_TYPE - Success
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_C_WERROR_NON_VIRTUAL_DTOR
-- Performing Test HAVE_C_WERROR_NON_VIRTUAL_DTOR - Failed
-- Performing Test HAVE_CXX_WERROR_ADDRESS
-- Performing Test HAVE_CXX_WERROR_ADDRESS - Success
-- Performing Test HAVE_C_WERROR_ADDRESS
-- Performing Test HAVE_C_WERROR_ADDRESS - Success
-- Performing Test HAVE_CXX_WERROR_SEQUENCE_POINT
-- Performing Test HAVE_CXX_WERROR_SEQUENCE_POINT - Success
-- Performing Test HAVE_C_WERROR_SEQUENCE_POINT
-- Performing Test HAVE_C_WERROR_SEQUENCE_POINT - Success
-- Performing Test HAVE_CXX_WFORMAT
-- Performing Test HAVE_CXX_WFORMAT - Success
-- Performing Test HAVE_C_WFORMAT
-- Performing Test HAVE_C_WFORMAT - Success
-- Performing Test HAVE_CXX_WERROR_FORMAT_SECURITY
-- Performing Test HAVE_CXX_WERROR_FORMAT_SECURITY - Success
-- Performing Test HAVE_C_WERROR_FORMAT_SECURITY
-- Performing Test HAVE_C_WERROR_FORMAT_SECURITY - Success
-- Performing Test HAVE_CXX_WMISSING_DECLARATIONS
-- Performing Test HAVE_CXX_WMISSING_DECLARATIONS - Success
-- Performing Test HAVE_C_WMISSING_DECLARATIONS
-- Performing Test HAVE_C_WMISSING_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WMISSING_PROTOTYPES
-- Performing Test HAVE_CXX_WMISSING_PROTOTYPES - Failed
-- Performing Test HAVE_C_WMISSING_PROTOTYPES
-- Performing Test HAVE_C_WMISSING_PROTOTYPES - Success
-- Performing Test HAVE_CXX_WSTRICT_PROTOTYPES
-- Performing Test HAVE_CXX_WSTRICT_PROTOTYPES - Failed
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES - Success
-- Performing Test HAVE_CXX_WUNDEF
-- Performing Test HAVE_CXX_WUNDEF - Success
-- Performing Test HAVE_C_WUNDEF
-- Performing Test HAVE_C_WUNDEF - Success
-- Performing Test HAVE_CXX_WINIT_SELF
-- Performing Test HAVE_CXX_WINIT_SELF - Success
-- Performing Test HAVE_C_WINIT_SELF
-- Performing Test HAVE_C_WINIT_SELF - Success
-- Performing Test HAVE_CXX_WPOINTER_ARITH
-- Performing Test HAVE_CXX_WPOINTER_ARITH - Success
-- Performing Test HAVE_C_WPOINTER_ARITH
-- Performing Test HAVE_C_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_WSHADOW
-- Performing Test HAVE_CXX_WSHADOW - Success
-- Performing Test HAVE_C_WSHADOW
-- Performing Test HAVE_C_WSHADOW - Success
-- Performing Test HAVE_CXX_WSIGN_PROMO
-- Performing Test HAVE_CXX_WSIGN_PROMO - Success
-- Performing Test HAVE_C_WSIGN_PROMO
-- Performing Test HAVE_C_WSIGN_PROMO - Failed
-- Performing Test HAVE_CXX_WUNINITIALIZED
-- Performing Test HAVE_CXX_WUNINITIALIZED - Success
-- Performing Test HAVE_C_WUNINITIALIZED
-- Performing Test HAVE_C_WUNINITIALIZED - Success
-- Performing Test HAVE_CXX_WSUGGEST_OVERRIDE
-- Performing Test HAVE_CXX_WSUGGEST_OVERRIDE - Success
-- Performing Test HAVE_C_WSUGGEST_OVERRIDE
-- Performing Test HAVE_C_WSUGGEST_OVERRIDE - Failed
-- Performing Test HAVE_CXX_WNO_DELETE_NON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_WNO_DELETE_NON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_C_WNO_DELETE_NON_VIRTUAL_DTOR
-- Performing Test HAVE_C_WNO_DELETE_NON_VIRTUAL_DTOR - Failed
-- Performing Test HAVE_CXX_WNO_UNNAMED_TYPE_TEMPLATE_ARGS
-- Performing Test HAVE_CXX_WNO_UNNAMED_TYPE_TEMPLATE_ARGS - Failed
-- Performing Test HAVE_C_WNO_UNNAMED_TYPE_TEMPLATE_ARGS
-- Performing Test HAVE_C_WNO_UNNAMED_TYPE_TEMPLATE_ARGS - Failed
-- Performing Test HAVE_CXX_WNO_COMMENT
-- Performing Test HAVE_CXX_WNO_COMMENT - Success
-- Performing Test HAVE_C_WNO_COMMENT
-- Performing Test HAVE_C_WNO_COMMENT - Success
-- Performing Test HAVE_CXX_WIMPLICIT_FALLTHROUGH_3
-- Performing Test HAVE_CXX_WIMPLICIT_FALLTHROUGH_3 - Success
-- Performing Test HAVE_C_WIMPLICIT_FALLTHROUGH_3
-- Performing Test HAVE_C_WIMPLICIT_FALLTHROUGH_3 - Success
-- Performing Test HAVE_CXX_WNO_STRICT_OVERFLOW
-- Performing Test HAVE_CXX_WNO_STRICT_OVERFLOW - Success
-- Performing Test HAVE_C_WNO_STRICT_OVERFLOW
-- Performing Test HAVE_C_WNO_STRICT_OVERFLOW - Success
-- Performing Test HAVE_CXX_FDIAGNOSTICS_SHOW_OPTION
-- Performing Test HAVE_CXX_FDIAGNOSTICS_SHOW_OPTION - Success
-- Performing Test HAVE_C_FDIAGNOSTICS_SHOW_OPTION
-- Performing Test HAVE_C_FDIAGNOSTICS_SHOW_OPTION - Success
-- Performing Test HAVE_CXX_PTHREAD
-- Performing Test HAVE_CXX_PTHREAD - Success
-- Performing Test HAVE_C_PTHREAD
-- Performing Test HAVE_C_PTHREAD - Success
-- Performing Test HAVE_CXX_FOMIT_FRAME_POINTER
-- Performing Test HAVE_CXX_FOMIT_FRAME_POINTER - Success
-- Performing Test HAVE_C_FOMIT_FRAME_POINTER
-- Performing Test HAVE_C_FOMIT_FRAME_POINTER - Success
-- Performing Test HAVE_CXX_FFUNCTION_SECTIONS
-- Performing Test HAVE_CXX_FFUNCTION_SECTIONS - Success
-- Performing Test HAVE_C_FFUNCTION_SECTIONS
-- Performing Test HAVE_C_FFUNCTION_SECTIONS - Success
-- Performing Test HAVE_CXX_FDATA_SECTIONS
-- Performing Test HAVE_CXX_FDATA_SECTIONS - Success
-- Performing Test HAVE_C_FDATA_SECTIONS
-- Performing Test HAVE_C_FDATA_SECTIONS - Success
-- Performing Test HAVE_CPU_NEON_SUPPORT (check file: cmake/checks/cpu_neon.cpp)
-- Performing Test HAVE_CPU_NEON_SUPPORT - Success
-- Performing Test HAVE_CPU_FP16_SUPPORT (check file: cmake/checks/cpu_fp16.cpp)
-- Performing Test HAVE_CPU_FP16_SUPPORT - Success
-- Performing Test HAVE_CPU_BASELINE_FLAGS
-- Performing Test HAVE_CPU_BASELINE_FLAGS - Success
-- Performing Test HAVE_CXX_FVISIBILITY_HIDDEN
-- Performing Test HAVE_CXX_FVISIBILITY_HIDDEN - Success
-- Performing Test HAVE_C_FVISIBILITY_HIDDEN
-- Performing Test HAVE_C_FVISIBILITY_HIDDEN - Success
-- Performing Test HAVE_CXX_FVISIBILITY_INLINES_HIDDEN
-- Performing Test HAVE_CXX_FVISIBILITY_INLINES_HIDDEN - Success
-- Performing Test HAVE_C_FVISIBILITY_INLINES_HIDDEN
-- Performing Test HAVE_C_FVISIBILITY_INLINES_HIDDEN - Failed
-- Performing Test HAVE_LINK_AS_NEEDED
-- Performing Test HAVE_LINK_AS_NEEDED - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for posix_memalign
-- Looking for posix_memalign - found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for memalign
-- Looking for memalign - found
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Searching 16 bit integer - Using unsigned short
-- Check if the system is big endian - little endian
-- Found ZLIB: /usr/lib/aarch64-linux-gnu/libz.so (found suitable version "1.2.11", minimum required is "1.2.3")
-- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR)
-- Performing Test HAVE_C_WNO_UNUSED_PARAMETER
-- Performing Test HAVE_C_WNO_UNUSED_PARAMETER - Success
-- Performing Test HAVE_C_WNO_SIGN_COMPARE
-- Performing Test HAVE_C_WNO_SIGN_COMPARE - Success
-- Performing Test HAVE_C_WNO_SHORTEN_64_TO_32
-- Performing Test HAVE_C_WNO_SHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_C_WNO_IMPLICIT_FALLTHROUGH
-- Performing Test HAVE_C_WNO_IMPLICIT_FALLTHROUGH - Success
-- libjpeg-turbo: VERSION = 2.1.0, BUILD = opencv-3.4.16-libjpeg-turbo
-- Check size of size_t
-- Check size of size_t - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Performing Test HAVE_BUILTIN_CTZL
-- Performing Test HAVE_BUILTIN_CTZL - Success
-- Looking for include file locale.h
-- Looking for include file locale.h - found
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file sys/types.h
-- Looking for include file sys/types.h - found
-- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
-- Looking for assert.h
-- Looking for assert.h - found
-- Looking for dlfcn.h
-- Looking for dlfcn.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for io.h
-- Looking for io.h - not found
-- Looking for limits.h
-- Looking for limits.h - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for search.h
-- Looking for search.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for strings.h
-- Looking for strings.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Performing Test C_HAS_inline
-- Performing Test C_HAS_inline - Success
-- Check size of signed short
-- Check size of signed short - done
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Check size of signed int
-- Check size of signed int - done
-- Check size of unsigned int
-- Check size of unsigned int - done
-- Check size of signed long
-- Check size of signed long - done
-- Check size of signed long long
-- Check size of signed long long - done
-- Check size of unsigned long long
-- Check size of unsigned long long - done
-- Check size of unsigned char *
-- Check size of unsigned char * - done
-- Check size of ptrdiff_t
-- Check size of ptrdiff_t - done
-- Check size of INT8
-- Check size of INT8 - failed
-- Check size of INT16
-- Check size of INT16 - failed
-- Check size of INT32
-- Check size of INT32 - failed
-- Looking for floor
-- Looking for floor - found
-- Looking for pow
-- Looking for pow - found
-- Looking for sqrt
-- Looking for sqrt - found
-- Looking for isascii
-- Looking for isascii - found
-- Looking for memset
-- Looking for memset - found
-- Looking for mmap
-- Looking for mmap - found
-- Looking for getopt
-- Looking for getopt - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for setmode
-- Looking for setmode - not found
-- Looking for strcasecmp
-- Looking for strcasecmp - found
-- Looking for strchr
-- Looking for strchr - found
-- Looking for strrchr
-- Looking for strrchr - found
-- Looking for strstr
-- Looking for strstr - found
-- Looking for strtol
-- Looking for strtol - found
-- Looking for strtol
-- Looking for strtol - found
-- Looking for strtoull
-- Looking for strtoull - found
-- Looking for lfind
-- Looking for lfind - found
-- Performing Test HAVE_SNPRINTF
-- Performing Test HAVE_SNPRINTF - Success
-- Check if the system is big endian
-- Searching 16 bit integer
-- Searching 16 bit integer - Using unsigned short
-- Check if the system is big endian - little endian
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_VARIABLE
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_VARIABLE - Success
-- Performing Test HAVE_C_WNO_MISSING_PROTOTYPES
-- Performing Test HAVE_C_WNO_MISSING_PROTOTYPES - Success
-- Performing Test HAVE_C_WNO_MISSING_DECLARATIONS
-- Performing Test HAVE_C_WNO_MISSING_DECLARATIONS - Success
-- Performing Test HAVE_C_WNO_UNDEF
-- Performing Test HAVE_C_WNO_UNDEF - Success
-- Performing Test HAVE_C_WNO_UNUSED
-- Performing Test HAVE_C_WNO_UNUSED - Success
-- Performing Test HAVE_C_WNO_CAST_ALIGN
-- Performing Test HAVE_C_WNO_CAST_ALIGN - Success
-- Performing Test HAVE_C_WNO_SHADOW
-- Performing Test HAVE_C_WNO_SHADOW - Success
-- Performing Test HAVE_C_WNO_MAYBE_UNINITIALIZED
-- Performing Test HAVE_C_WNO_MAYBE_UNINITIALIZED - Success
-- Performing Test HAVE_C_WNO_POINTER_TO_INT_CAST
-- Performing Test HAVE_C_WNO_POINTER_TO_INT_CAST - Success
-- Performing Test HAVE_C_WNO_INT_TO_POINTER_CAST
-- Performing Test HAVE_C_WNO_INT_TO_POINTER_CAST - Success
-- Performing Test HAVE_C_WNO_MISLEADING_INDENTATION
-- Performing Test HAVE_C_WNO_MISLEADING_INDENTATION - Success
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_PARAMETER
-- Performing Test HAVE_CXX_WNO_UNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES - Failed
-- Performing Test HAVE_CXX_WNO_UNDEF
-- Performing Test HAVE_CXX_WNO_UNDEF - Success
-- Performing Test HAVE_C_STD_C99
-- Performing Test HAVE_C_STD_C99 - Success
-- Performing Test HAVE_C_WNO_UNUSED_VARIABLE
-- Performing Test HAVE_C_WNO_UNUSED_VARIABLE - Success
-- Performing Test HAVE_C_WNO_UNUSED_FUNCTION
-- Performing Test HAVE_C_WNO_UNUSED_FUNCTION - Success
-- Found JPEG: libjpeg-turbo
-- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR)
-- Performing Test HAVE_C_WNO_IMPLICIT_FUNCTION_DECLARATION
-- Performing Test HAVE_C_WNO_IMPLICIT_FUNCTION_DECLARATION - Success
-- Performing Test HAVE_C_WNO_UNINITIALIZED
-- Performing Test HAVE_C_WNO_UNINITIALIZED - Success
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_PARAMETER
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_PARAMETER - Success
-- Performing Test HAVE_C_WNO_POINTER_COMPARE
-- Performing Test HAVE_C_WNO_POINTER_COMPARE - Success
-- Performing Test HAVE_C_WNO_ABSOLUTE_VALUE
-- Performing Test HAVE_C_WNO_ABSOLUTE_VALUE - Success
-- Performing Test HAVE_C_WNO_STRICT_PROTOTYPES
-- Performing Test HAVE_C_WNO_STRICT_PROTOTYPES - Success
-- Found ZLIB: /usr/lib/aarch64-linux-gnu/libz.so (found version "1.2.11")
-- Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
-- Looking for semaphore.h
-- Looking for semaphore.h - found
-- Performing Test HAVE_CXX_WNO_SHADOW
-- Performing Test HAVE_CXX_WNO_SHADOW - Success
-- Performing Test HAVE_CXX_WNO_UNUSED
-- Performing Test HAVE_CXX_WNO_UNUSED - Success
-- Performing Test HAVE_CXX_WNO_SIGN_COMPARE
-- Performing Test HAVE_CXX_WNO_SIGN_COMPARE - Success
-- Performing Test HAVE_CXX_WNO_UNINITIALIZED
-- Performing Test HAVE_CXX_WNO_UNINITIALIZED - Success
-- Performing Test HAVE_CXX_WNO_SWITCH
-- Performing Test HAVE_CXX_WNO_SWITCH - Success
-- Performing Test HAVE_CXX_WNO_PARENTHESES
-- Performing Test HAVE_CXX_WNO_PARENTHESES - Success
-- Performing Test HAVE_CXX_WNO_ARRAY_BOUNDS
-- Performing Test HAVE_CXX_WNO_ARRAY_BOUNDS - Success
-- Performing Test HAVE_CXX_WNO_EXTRA
-- Performing Test HAVE_CXX_WNO_EXTRA - Success
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WNO_MISLEADING_INDENTATION
-- Performing Test HAVE_CXX_WNO_MISLEADING_INDENTATION - Success
-- Performing Test HAVE_CXX_WNO_DEPRECATED
-- Performing Test HAVE_CXX_WNO_DEPRECATED - Success
-- Performing Test HAVE_CXX_WNO_SUGGEST_OVERRIDE
-- Performing Test HAVE_CXX_WNO_SUGGEST_OVERRIDE - Success
-- Performing Test HAVE_CXX_WNO_INCONSISTENT_MISSING_OVERRIDE
-- Performing Test HAVE_CXX_WNO_INCONSISTENT_MISSING_OVERRIDE - Failed
-- Performing Test HAVE_CXX_WNO_IMPLICIT_FALLTHROUGH
-- Performing Test HAVE_CXX_WNO_IMPLICIT_FALLTHROUGH - Success
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_COMPARE - Success
-- Performing Test HAVE_CXX_WNO_REORDER
-- Performing Test HAVE_CXX_WNO_REORDER - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_RESULT
-- Performing Test HAVE_CXX_WNO_UNUSED_RESULT - Success
-- Performing Test HAVE_CXX_WNO_CLASS_MEMACCESS
-- Performing Test HAVE_CXX_WNO_CLASS_MEMACCESS - Success
-- Checking for module 'gtk+-3.0'
-- No package 'gtk+-3.0' found
-- Checking for module 'gtk+-2.0'
-- No package 'gtk+-2.0' found
-- Checking for module 'gthread-2.0'
-- No package 'gthread-2.0' found
-- Checking for modules 'gstreamer-base-1.0;gstreamer-video-1.0;gstreamer-app-1.0;gstreamer-riff-1.0;gstreamer-pbutils-1.0'
-- No package 'gstreamer-base-1.0' found
-- No package 'gstreamer-video-1.0' found
-- No package 'gstreamer-app-1.0' found
-- No package 'gstreamer-riff-1.0' found
-- No package 'gstreamer-pbutils-1.0' found
-- Checking for modules 'gstreamer-base-0.10;gstreamer-video-0.10;gstreamer-app-0.10;gstreamer-riff-0.10;gstreamer-pbutils-0.10'
-- No package 'gstreamer-base-0.10' found
-- No package 'gstreamer-video-0.10' found
-- No package 'gstreamer-app-0.10' found
-- No package 'gstreamer-riff-0.10' found
-- No package 'gstreamer-pbutils-0.10' found
-- Checking for module 'libdc1394-2'
-- No package 'libdc1394-2' found
-- Checking for module 'libdc1394'
-- No package 'libdc1394' found
-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
-- Could NOT find Atlas (missing: Atlas_CBLAS_INCLUDE_DIR Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY)
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Could NOT find BLAS (missing: BLAS_LIBRARIES)
-- LAPACK requires BLAS
-- A library with LAPACK API not found. Please specify library location.
-- Performing Test HAVE_CXX_WNO_UNUSED_LOCAL_TYPEDEFS
-- Performing Test HAVE_CXX_WNO_UNUSED_LOCAL_TYPEDEFS - Success
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO - Success
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_UNDEFINED_COMPARE
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_UNDEFINED_COMPARE - Failed
-- Performing Test HAVE_CXX_WNO_IGNORED_QUALIFIERS
-- Performing Test HAVE_CXX_WNO_IGNORED_QUALIFIERS - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_FUNCTION
-- Performing Test HAVE_CXX_WNO_UNUSED_FUNCTION - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_CONST_VARIABLE
-- Performing Test HAVE_CXX_WNO_UNUSED_CONST_VARIABLE - Success
-- Performing Test HAVE_CXX_WNO_SHORTEN_64_TO_32
-- Performing Test HAVE_CXX_WNO_SHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF
-- Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF - Success
-- Performing Test HAVE_CXX_WNO_ENUM_COMPARE_SWITCH
-- Performing Test HAVE_CXX_WNO_ENUM_COMPARE_SWITCH - Failed
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
-- Looking for dlerror in dl
-- Looking for dlerror in dl - found
-- OpenCV Python: during development append to PYTHONPATH: /home/fpga/opencv/build/python_loader
-- Checking for module 'freetype2'
-- No package 'freetype2' found
-- Checking for module 'harfbuzz'
-- No package 'harfbuzz' found
-- freetype2: NO
-- harfbuzz: NO
-- Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version "")
-- Module opencv_ovis disabled because OGRE3D was not found
-- No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
-- Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
-- Failed to find gflags - Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
-- Failed to find gflags - Could not find gflags include directory, set GFLAGS_INCLUDE_DIR to directory containing gflags/gflags.h
-- Failed to find glog - Could not find glog include directory, set GLOG_INCLUDE_DIR to directory containing glog/logging.h
-- Module opencv_sfm disabled because the following dependencies are not found: Eigen Glog/Gflags
-- Checking for module 'tesseract'
-- No package 'tesseract' found
-- Tesseract: NO
-- Allocator metrics storage type: 'int'
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.ssse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin512.avx512_skx.cpp
-- Excluding from source files list: modules/imgproc/src/corner.avx.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.sse4_1.cpp
-- Excluding from source files list: modules/imgproc/src/resize.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/resize.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx512_skx.cpp
-- Excluding from source files list: modules/features2d/src/fast.avx2.cpp
-- Performing Test HAVE_CXX_WNO_OVERLOADED_VIRTUAL
-- Performing Test HAVE_CXX_WNO_OVERLOADED_VIRTUAL - Success
-- Excluding from source files list: modules/objdetect/src/haar.avx.cpp
-- xfeatures2d/boostdesc: Download: boostdesc_bgm.i
-- xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
-- xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
-- xfeatures2d/boostdesc: Download: boostdesc_lbgm.i
-- xfeatures2d/vgg: Download: vgg_generated_48.i
-- xfeatures2d/vgg: Download: vgg_generated_64.i
-- xfeatures2d/vgg: Download: vgg_generated_80.i
-- xfeatures2d/vgg: Download: vgg_generated_120.i
-- data: Download: face_landmark_model.dat
--
-- General configuration for OpenCV 3.4.16 =====================================
-- Version control: unknown
--
-- Extra modules:
-- Location (extra): /home/fpga/opencv/opencv_contrib/modules
-- Version control (extra): unknown
--
-- Platform:
-- Timestamp: 2023-06-06T11:51:34Z
-- Host: Linux 5.15.108-zynqmp-fpga-generic aarch64
-- CMake: 3.18.4
-- CMake generator: Unix Makefiles
-- CMake build tool: /usr/bin/gmake
-- Configuration: RELEASE
--
-- CPU/HW features:
-- Baseline: NEON FP16
--
-- C/C++:
-- Built as dynamic libs?: YES
-- C++11: YES
-- C++ Compiler: /usr/bin/g++ (ver 10.2.1)
-- C++ flags (Release): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
-- C++ flags (Debug): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
-- C Compiler: /usr/bin/gcc
-- C flags (Release): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG
-- C flags (Debug): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG
-- Linker flags (Release): -Wl,--gc-sections -Wl,--as-needed
-- Linker flags (Debug): -Wl,--gc-sections -Wl,--as-needed
-- ccache: NO
-- Precompiled headers: NO
-- Extra dependencies: dl m pthread rt
-- 3rdparty dependencies:
--
-- OpenCV modules:
-- To be built: aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann fuzzy hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv freetype hdf java matlab ovis python2 python3 sfm viz
-- Applications: tests perf_tests apps
-- Documentation: NO
-- Non-free algorithms: NO
--
-- GUI:
-- GTK+: NO
--
-- Media I/O:
-- ZLib: /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)
-- JPEG: libjpeg-turbo (ver 2.1.0-62)
-- WEBP: build (ver encoder: 0x020f)
-- PNG: build (ver 1.6.37)
-- TIFF: build (ver 42 - 4.2.0)
-- JPEG 2000: build (ver 1.900.1)
-- OpenEXR: build (ver 2.3.0)
-- HDR: YES
-- SUNRASTER: YES
-- PXM: YES
--
-- Video I/O:
-- DC1394: NO
-- GStreamer: NO
--
-- Parallel framework: pthreads
--
-- Trace: YES (with Intel ITT)
--
-- Other third-party libraries:
-- Lapack: NO
-- Eigen: NO
-- Custom HAL: YES (carotene (ver 0.0.1))
-- Protobuf: build (3.5.1)
--
-- OpenCL: YES (no extra features)
-- Include path: /home/fpga/opencv/opencv-3.4.16/3rdparty/include/opencl/1.2
-- Link libraries: Dynamic load
--
-- Python (for build): NO
--
-- Java:
-- ant: NO
-- JNI: NO
-- Java wrappers: NO
-- Java tests: NO
--
-- Install to: /usr/local
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/fpga/opencv/build
fpga@debian-fpga:~/opencv/build$
debian-fpga login: [ 1083.910786] fpga_manager fpga0: writing kr260_cam_disp.bit.bin to Xilinx ZynqMP FPGA Manager
[ 1086.132312] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[ 1086.142420] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
[ 1086.152310] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay0
[ 1086.162152] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay1
[ 1086.171990] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/afi0
[ 1086.181476] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking0
[ 1086.191398] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking1
[ 1086.201320] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pwm_fan0
[ 1086.211155] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/overlay2
[ 1086.220989] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/active_frame
[ 1086.231169] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/misc_clk_0
[ 1086.241181] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_intc_0
[ 1086.251187] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_axi_iic_0
[ 1086.261721] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_mt9d111_inf_axis_0
[ 1086.273035] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/camera_vflip_dma_write2_0
[ 1086.284344] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_axi_gpio_0
[ 1086.295047] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/display_disp_dmar_axis_0
[ 1086.306271] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/lap_filter_axim_1
[ 1086.327388] pwm-fan axi:pwm-fan: error -EBUSY: Could not get PWM
[ 1086.333438] pwm-fan: probe of axi:pwm-fan failed with error -16
uio4 - interrupt-controller
uio5 - gpio
uio6 - i2c
uio7 - mt9d111_inf_axis
uio8 - vflip_dma_write2
uio9 - gpio
uio10 - disp_dmar_axis
uio11 - lap_filter_axim
// cam_dp_ov5642.cpp (for KR260)
// 2018/12/14 by marsee
//
// This software converts the left and right of the camera image to BMP file.
// -b : bmp file name
// -n : Start File Number
// -h : help
//
// 2018/12/20 : completed.
// I am using the SVGA driver register setting of https://github.com/virajkanwade/rk3188_android_kernel/blob/master/drivers/media/video/ov5642.c
// 2018/12/22 : fixed
// 2018/12/30 : ov5642_inf_axis[0] fixed
// 2019/02/06 : for DisplayPort
// 2023/04/23 : kr260_cam_disp vitis platform
// 2023/05/15 : bug fix
// 2023/05/16 : Added support for lap_filter_axim
// 2023/05/31 : Modified for Ubuntu 22.04.(uio4 - uio5)
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define PIXEL_NUM_OF_BYTES 4
#define NUMBER_OF_WRITE_FRAMES 4
#define SVGA_HORIZONTAL_PIXELS 800
#define SVGA_VERTICAL_LINES 600
#define SVGA_ALL_DISP_ADDRESS (SVGA_HORIZONTAL_PIXELS * SVGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define SVGA_3_PICTURES (SVGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define XGA_HORIZONTAL_PIXELS 1024
#define XGA_VERTICAL_LINES 768
#define XGA_ALL_DISP_ADDRESS (XGA_HORIZONTAL_PIXELS * XGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define XGA_3_PICTURES (XGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define HD_HORIZONTAL_PIXELS 1920
#define HD_VERTICAL_LINES 1080
#define HD_ALL_DISP_ADDRESS (HD_HORIZONTAL_PIXELS * HD_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define HD_3_PICTURES (HD_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on);
void cam_i2c_init(volatile unsigned *ov5642_axi_iic) {
ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
ov5642_axi_iic[64] = 0x1; // enable i2c
}
void cam_i2x_write_sync(void) {
// unsigned c;
// c = *cam_i2c_rx_fifo;
// while ((c & 0x84) != 0x80)
// c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
usleep(1000);
}
void cam_i2c_write(volatile unsigned *ov5642_axi_iic, unsigned int device_addr, unsigned int write_addr, unsigned int write_data){
ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
ov5642_axi_iic[66] = (write_addr >> 8) & 0xff; // address upper byte
ov5642_axi_iic[66] = write_addr & 0xff; // address lower byte
ov5642_axi_iic[66] = 0x200 | (write_data & 0xff); // data
cam_i2x_write_sync();
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);
int main(int argc, char *argv[]){
int opt;
int c, help_flag=0;
char bmp_fn[256] = "bmp_file";
char attr[1024];
unsigned long phys_addr;
int file_no = -1;
int fd1, fd2, fd3, fd4, fd5, fd6, fd10, fd11, fd_lap;
volatile unsigned int *ov5642_inf_axis, *axi_iic, *disp_dmar_axis, *vflip_dma_write;
volatile unsigned int *axi_gpio_0, *active_frame_gpio, *lap_filter_axim;
volatile unsigned int *frame_buffer;
int active_frame;
int resolution;
int all_disp_addr;
bool filter_on = false;
resolution = 1; // XGA
while ((opt=getopt(argc, argv, "b:n:h:r:")) != -1){
switch (opt){
case 'b':
strcpy(bmp_fn, optarg);
break;
case 'n':
file_no = atoi(optarg);
printf("file_no = %d\n", file_no+1);
break;
case 'r':
resolution = atoi(optarg);
break;
case 'h':
help_flag = 1;
break;
}
}
if(resolution == 0){
printf("SVGA\n");
} else if(resolution == 1){
printf("XGA\n");
} else {
printf("HD\n");
}
if (help_flag == 1){ // help
printf("Usage : cam_capture [-b <bmp file name>] [-n <Start File Number>] [-h]\n");
printf(" -r [0|1|2](0:SVGA, 1:XGA, 2:HD)\n");
exit(0);
}
// all_disp_addr
switch(resolution){
case 0 :
all_disp_addr = SVGA_ALL_DISP_ADDRESS;
break;
case 1 :
all_disp_addr = XGA_ALL_DISP_ADDRESS;
break;
default : // 2
all_disp_addr = HD_ALL_DISP_ADDRESS;
break;
}
// ov5642_inf_axis-uio IP
fd1 = open("/dev/uio7", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd1 < 1){
fprintf(stderr, "/dev/uio7 (ov5642_inf_axis) open error\n");
exit(-1);
}
ov5642_inf_axis = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
if (!ov5642_inf_axis){
fprintf(stderr, "ov5642_inf_axis mmap error\n");
exit(-1);
}
// axi_iic-uio IP
fd2 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd2 < 1){
fprintf(stderr, "/dev/uio6 (axi_iic) open error\n");
exit(-1);
}
axi_iic = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (!axi_iic){
fprintf(stderr, "axi_iic mmap error\n");
exit(-1);
}
// disp_dmar_axis-uio IP
fd3 = open("/dev/uio10", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd3 < 1){
fprintf(stderr, "/dev/uio10 (disp_dmar_axis) open error\n");
exit(-1);
}
disp_dmar_axis = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
if (!disp_dmar_axis){
fprintf(stderr, "disp_dmar_axis mmap error\n");
exit(-1);
}
// vflip_dma_write-uio IP
fd4 = open("/dev/uio8", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd4 < 1){
fprintf(stderr, "/dev/uio8 (vflip_dma_write) open error\n");
exit(-1);
}
vflip_dma_write = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
if (!vflip_dma_write){
fprintf(stderr, "vflip_dma_write mmap error\n");
exit(-1);
}
// axi_gpio_0-uio IP (init_done output)
fd5 = open("/dev/uio9", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd5 < 1){
fprintf(stderr, "/dev/uio9 (axi_gpio_0) open error\n");
exit(-1);
}
axi_gpio_0 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd5, 0);
if (!axi_gpio_0){
fprintf(stderr, "axi_gpio_0 mmap error\n");
exit(-1);
}
// active_frame_gpio-uio IP (active_frame input)
fd6 = open("/dev/uio5", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd6 < 1){
fprintf(stderr, "/dev/uio5 (active_frame_gpio) open error\n");
exit(-1);
}
active_frame_gpio = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd6, 0);
if (!active_frame_gpio){
fprintf(stderr, "active_frame_gpio mmap error\n");
exit(-1);
}
// laplacian_fliter-uio IP (active_frame input)
fd_lap = open("/dev/uio11", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd_lap < 1){
fprintf(stderr, "/dev/uio11 (lap_filter_axim) open error\n");
exit(-1);
}
lap_filter_axim = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd_lap, 0);
if (!active_frame_gpio){
fprintf(stderr, "lap_filter_axim mmap error\n");
exit(-1);
}
// udmabuf4
fd10 = open("/dev/udmabuf4", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd10 == -1){
fprintf(stderr, "/dev/udmabuf4 open error\n");
exit(-1);
}
frame_buffer = (volatile unsigned int *)mmap(NULL, all_disp_addr*NUMBER_OF_WRITE_FRAMES, PROT_READ|PROT_WRITE, MAP_SHARED, fd10, 0);
if (!frame_buffer){
fprintf(stderr, "frame_buffer4 mmap error\n");
exit(-1);
}
// phys_addr of udmabuf4
fd11 = open("/sys/class/u-dma-buf/udmabuf4/phys_addr", O_RDONLY);
if (fd11 == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf4/phys_addr open error\n");
exit(-1);
}
read(fd11, attr, 1024);
sscanf(attr, "%lx", &phys_addr);
close(fd11);
printf("phys_addr = %x\n", (int)phys_addr);
// vflip_dma_write start
vflip_dma_write[6] = phys_addr; // fb0
vflip_dma_write[8] = phys_addr+all_disp_addr; // fb1
vflip_dma_write[10] = phys_addr+2*all_disp_addr; // fb2
vflip_dma_write[12] = resolution;
vflip_dma_write[0] = 0x1; // start
vflip_dma_write[0] = 0x80; // EnableAutoRestart
// CMOS Camera initialize, ov5642
cam_i2c_init(axi_iic);
cam_reg_set(axi_iic, 0x78); // OV5642 register set
ov5642_inf_axis[0] = phys_addr; // ov5642 AXI4-Stream Start
ov5642_inf_axis[1] = 0;
// disp_dmar_axis start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
disp_dmar_axis[10] = resolution;
axi_gpio_0[0] = 1; // disp_dmar_axis start(init_done = 1)
char bmp_file[256];
// All 0 set
int all_disp_frame_index = all_disp_addr/PIXEL_NUM_OF_BYTES*NUMBER_OF_WRITE_FRAMES;
for (int i=0; i<all_disp_frame_index; i++){
frame_buffer[i] = 0x0;
}
// lap_filer_axm initialize
lap_filter_axim[5] = 0 ; // bit 31~0 - cam_fb[63:32] (Read/Write)
lap_filter_axim[7] = phys_addr+3*all_disp_addr; // bit 31~0 - lap_fb[31:0] (Read/Write)
lap_filter_axim[8] = 0; // bit 31~0 - lap_fb[63:32] (Read/Write)
switch (resolution){
case 0 : // SVGA
lap_filter_axim[10] = SVGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = SVGA_VERTICAL_LINES;
break;
case 1 : // XGA
lap_filter_axim[10] = XGA_HORIZONTAL_PIXELS;
lap_filter_axim[12] = XGA_VERTICAL_LINES;
break;
default : // HD
lap_filter_axim[10] = HD_HORIZONTAL_PIXELS;
lap_filter_axim[12] = HD_VERTICAL_LINES;
break;
}
// w - writed the left and right eye's bmp files. q - exit.
c = getc(stdin);
while(c != 'q'){
switch ((char)c) {
case 'w' : // w - writed a bmp files.
// writed the frame buffer
file_no++;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'e' : // e - writed a same bmp files.
// writed the frame buffer
if (file_no == -1)
file_no = 0;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution, filter_on);
printf("file No. = %d\n", file_no);
break;
case 'f' : // laplacian_filter on
filter_on = true;
active_frame = (int)(active_frame_gpio[0] & 0x3); // Data signal of active_frame_V
int read_frame;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
lap_filter_axim[4] = phys_addr+read_frame*all_disp_addr;
lap_filter_axim[0] = 0x81; // ap_start + auto_restart
disp_dmar_axis[4] = phys_addr+3*all_disp_addr; // fb0
disp_dmar_axis[6] = phys_addr+3*all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+3*all_disp_addr; // fb2
break;
case 'c' : // Display camera image
filter_on = false;
lap_filter_axim[0] = 1; // ap_start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
break;
}
c = getc(stdin);
}
munmap((void *)ov5642_inf_axis, 0x1000);
munmap((void *)axi_iic, 0x1000);
munmap((void *)disp_dmar_axis, 0x10000);
munmap((void *)vflip_dma_write, 0x10000);
munmap((void *)axi_gpio_0, 0x1000);
munmap((void *)active_frame_gpio, 0x1000);
munmap((void *)frame_buffer, all_disp_addr*3);
close(fd1);
close(fd2);
close(fd3);
close(fd4);
close(fd5);
close(fd6);
close(fd10);
return(0);
}
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution, bool filter_on){
int read_frame;
int img_width, img_height;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
switch(resolution){
case 0 :
img_width = SVGA_HORIZONTAL_PIXELS;
img_height = SVGA_VERTICAL_LINES;
break;
case 1 :
img_width = XGA_HORIZONTAL_PIXELS;
img_height = XGA_VERTICAL_LINES;
break;
default : // case 2 :
img_width = HD_HORIZONTAL_PIXELS;
img_height = HD_VERTICAL_LINES;
break;
}
int offset_addr;
if (filter_on == false){
offset_addr = read_frame * img_width * img_height;
}else{
offset_addr = 3 * img_width * img_height;
}
cv::Mat img(img_height, img_width, CV_8UC3);
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for(int y=0; y<img.rows; y++){
for(int x=0; x<img.cols; x++){
cv::Vec3b pixel;
int rgb = frame_buffer[offset_addr+y*img.cols+x];
pixel[0] = (rgb & 0xff); // blue
pixel[1] = (rgb & 0xff00) >> 8; // green
pixel[2] = (rgb & 0xff0000) >> 16; // red
dst_vec3b(y,x) = pixel;
}
}
cv::imwrite(bmp_file, img);
return(0);
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);
return(0);
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |