Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
M
mock-turtle
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
hdl-core-lib
mock-turtle
Commits
2c425e43
Commit
2c425e43
authored
Apr 30, 2018
by
Federico Vaga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tests: improve testing
Signed-off-by:
Federico Vaga
<
federico.vaga@cern.ch
>
parent
4c6d6f25
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
183 additions
and
210 deletions
+183
-210
conftest.py
tests/conftest.py
+11
-3
Makefile
tests/firmware/Makefile
+1
-2
hmq-async-send.c
tests/firmware/hmq-async-send/hmq-async-send.c
+23
-20
Kconfig
tests/firmware/hmq-sync/Kconfig
+0
-19
mt_defconfig
tests/firmware/hmq-sync/configs/mt_defconfig
+0
-26
hmq-sync.c
tests/firmware/hmq-sync/hmq-sync.c
+0
-58
Makefile
tests/firmware/rt-frm-ping/Makefile
+0
-9
rt-frm-ping.c
tests/firmware/rt-frm-ping/rt-frm-ping.c
+0
-33
Kconfig
tests/firmware/rt-frm/Kconfig
+0
-0
Makefile
tests/firmware/rt-frm/Makefile
+2
-2
mt_defconfig
tests/firmware/rt-frm/configs/mt_defconfig
+2
-2
rt-frm.c
tests/firmware/rt-frm/rt-frm.c
+94
-0
test_hmq.py
tests/test_hmq.py
+16
-12
test_rt_frm.py
tests/test_rt_frm.py
+34
-24
No files found.
tests/conftest.py
View file @
2c425e43
...
...
@@ -63,14 +63,22 @@ def trtl_msg(request):
sequence. These two values in the last message are equal
"""
msg_list
=
[]
for
val
in
range
(
1
,
request
.
param
):
for
val
in
range
(
request
.
param
):
msg
=
PyMockTurtle
.
TrtlMessage
()
msg
.
header
.
len
=
2
msg
.
payload
[
0
]
=
val
msg
.
payload
[
1
]
=
request
.
param
-
1
msg
.
payload
[
0
]
=
val
+
1
msg
.
payload
[
1
]
=
request
.
param
msg_list
.
append
(
msg
)
return
msg_list
@
pytest
.
fixture
(
scope
=
"module"
)
def
trtl_version_exp
():
v
=
PyMockTurtle
.
TrtlFirmwareVersion
()
v
.
fw_id
=
0xBADC0FFE
v
.
fw_version
=
0x1
v
.
git_version
=
0x12345678
return
v
# @pytest.fixture(scope="module")
# def trtl_hmq():
...
...
tests/firmware/Makefile
View file @
2c425e43
...
...
@@ -7,9 +7,8 @@ DIRS += config_rom
DIRS
+=
sim-verif
DIRS
+=
hmq-async-recv
DIRS
+=
hmq-async-send
DIRS
+=
hmq-sync
DIRS
+=
hmq-purge
DIRS
+=
rt-frm
-ping
DIRS
+=
rt-frm
TRTL
?=
../..
...
...
tests/firmware/hmq-async-send/hmq-async-send.c
View file @
2c425e43
...
...
@@ -9,23 +9,23 @@ struct payload {
int
main
()
{
int
cpu
,
hmq
,
count
;
int
cpu
,
hmq
,
count
,
run
;
const
struct
trtl_config_rom
*
cfgrom
=
trtl_config_rom_get
();
struct
trtl_fw_msg
msg
;
struct
trtl_fw_msg
msg
,
msg_s
;
struct
payload
*
p
;
uint32_t
status
;
pr_debug
(
"
ASYNC MESSAGES SEND
\r\n
"
);
pr_debug
(
"
TEST for: async send, sync
\r\n
"
);
cpu
=
trtl_get_core_id
();
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
{
mq_map_in_message
(
TRTL_HMQ
,
hmq
,
&
msg
);
mq_map_out_message
(
TRTL_HMQ
,
hmq
,
&
msg_s
);
p
=
msg
.
payload
;
count
=
1
;
while
(
1
)
{
/* Wait incoming message */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
1000
);
for
(
count
=
1
,
run
=
1
;
run
;
++
count
)
{
/* Wait incoming message - 100ms timeout */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
100000
);
if
(
!
status
)
{
pr_error
(
"
\t
NO MESSAGE PENDING h:%d, cnt:0x%x
\r\n
"
,
hmq
,
count
);
...
...
@@ -36,28 +36,31 @@ int main()
hmq
,
msg
.
header
->
len
,
p
->
idx
,
p
->
max
,
count
);
/* validate message */
if
(
msg
.
header
->
len
!=
2
||
p
->
idx
!=
count
)
{
pr_error
(
"
\t
h: %d, l:%d, d[0]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
idx
,
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
if
(
p
->
max
<
count
)
{
pr_error
(
"
\t
h:%d, l:%d d[1]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
max
,
count
);
if
(
msg
.
header
->
len
!=
2
||
p
->
idx
!=
count
||
p
->
max
<
count
)
{
pr_error
(
"
\t
h:%d, len:%d, {idx: %ld, max: %ld}, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
idx
,
p
->
max
,
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
/* stop on the last one */
if
(
p
->
idx
==
p
->
max
)
{
mq_discard
(
TRTL_HMQ
,
hmq
);
break
;
if
(
p
->
idx
==
p
->
max
)
run
=
0
;
/* stop the loop */
if
(
msg
.
header
->
flags
&
TRTL_HMQ_HEADER_FLAG_SYNC
)
{
/* For sync answer test */
pr_debug
(
"SEND MESSAGES SYNC ANSWER
\r\n
"
);
mq_claim
(
TRTL_HMQ
,
hmq
);
memcpy
(
msg_s
.
header
,
msg
.
header
,
sizeof
(
struct
trtl_hmq_header
));
msg_s
.
header
->
flags
&=
~
TRTL_HMQ_HEADER_FLAG_SYNC
;
msg_s
.
header
->
flags
|=
TRTL_HMQ_HEADER_FLAG_ACK
;
memcpy
(
msg_s
.
payload
,
msg
.
payload
,
msg
.
header
->
len
*
4
);
mq_send
(
TRTL_HMQ
,
hmq
);
}
/* goto the next one */
mq_discard
(
TRTL_HMQ
,
hmq
);
count
++
;
}
}
...
...
tests/firmware/hmq-sync/Kconfig
deleted
100644 → 0
View file @
4c6d6f25
mainmenu "hmq_sync test configuration"
comment "Project specific configuration"
config FPGA_APPLICATION_ID
int "FPGA application ID"
default 0
help
Help text
config RT_APPLICATION_ID
int "RT application ID"
default 0
help
Help text
# include Mock Turtle's Kconfig
source "Kconfig.mt"
tests/firmware/hmq-sync/configs/mt_defconfig
deleted
100644 → 0
View file @
4c6d6f25
#
# Automatically generated file; DO NOT EDIT.
# config_rom test configuration
#
#
# Project specific configuration
#
CONFIG_FPGA_APPLICATION_ID=0
CONFIG_RT_APPLICATION_ID=0
#
# Mock Turtle configuration
#
#
# Mock Turtle framework configuration
#
# CONFIG_MOCKTURTLE_FRAMEWORK_ENABLE is not set
#
# Mock Turtle library configuration
#
CONFIG_MOCKTURTLE_LIBRARY_PRINT_ENABLE=y
# CONFIG_MOCKTURTLE_LIBRARY_PRINT_DEBUG_ENABLE is not set
CONFIG_MOCKTURTLE_LIBRARY_PRINT_ERROR_ENABLE=y
tests/firmware/hmq-sync/hmq-sync.c
deleted
100644 → 0
View file @
4c6d6f25
#include <mockturtle-rt.h>
int
main
()
{
int
cpu
,
hmq
,
count
;
const
struct
trtl_config_rom
*
cfgrom
=
trtl_config_rom_get
();
volatile
uint32_t
*
msg_r
,
*
msg_s
;
volatile
struct
trtl_hmq_header
*
hdr_r
,
*
hdr_s
;
uint32_t
status
;
pr_debug
(
"SYNC MESSAGES
\r\n
"
);
cpu
=
trtl_get_core_id
();
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
mq_purge
(
TRTL_HMQ
,
hmq
);
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
{
hdr_r
=
mq_map_in_header
(
TRTL_HMQ
,
hmq
);
msg_r
=
mq_map_in_buffer
(
TRTL_HMQ
,
hmq
);
hdr_s
=
mq_map_out_header
(
TRTL_HMQ
,
hmq
);
msg_s
=
mq_map_out_buffer
(
TRTL_HMQ
,
hmq
);
count
=
1
;
while
(
1
)
{
/* Wait incoming message */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
1000
);
if
(
!
status
)
{
pr_error
(
"
\t
NO MESSAGE PENDING h:%d, cnt:0x%x
\r\n
"
,
hmq
,
count
);
return
-
1
;
}
/* validate message */
if
(
hdr_r
->
len
!=
2
||
msg_r
[
0
]
!=
count
)
{
pr_error
(
"
\t
h: %d, l:%d, d[0]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
hdr_r
->
len
,
msg_r
[
0
],
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
if
(
msg_r
[
1
]
<
count
)
{
pr_error
(
"
\t
h:%d, l:%d d[1]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
hdr_r
->
len
,
msg_r
[
1
],
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
mq_claim
(
TRTL_HMQ
,
hmq
);
memcpy
(
hdr_s
,
hdr_r
,
sizeof
(
struct
trtl_hmq_header
));
memcpy
(
msg_s
,
msg_r
,
(
hdr_r
->
len
+
1
)
*
4
);
mq_discard
(
TRTL_HMQ
,
hmq
);
mq_send
(
TRTL_HMQ
,
hmq
);
count
++
;
}
}
return
0
;
}
tests/firmware/rt-frm-ping/Makefile
deleted
100755 → 0
View file @
4c6d6f25
OBJS
=
rt-frm-ping.o
OBJS
+=
# add other object files that you need
OUTPUT
=
fw-rt-frm-ping
TRTL
?=
../../../
TRTL_SW
=
$(TRTL)
/software
CFLAGS_OPT
=
-O0
# disable optimization
include
$(TRTL_SW)/firmware/Makefile
tests/firmware/rt-frm-ping/rt-frm-ping.c
deleted
100644 → 0
View file @
4c6d6f25
/*
* Copyright (C)
* Author:
* License:
*/
#include <mockturtle-framework.h>
/**
* Well, the main :)
*/
static
int
ping_main
()
{
while
(
1
)
{
/* Handle all messages incoming from HMQ 0 as actions */
trtl_fw_mq_action_dispatch
(
TRTL_HMQ
,
0
);
}
return
0
;
}
struct
trtl_fw_application
app
=
{
.
name
=
"hellofrm"
,
.
version
=
{
.
rt_id
=
CONFIG_RT_APPLICATION_ID
,
.
rt_version
=
RT_VERSION
(
0
,
1
),
.
git_version
=
GIT_VERSION
},
.
main
=
ping_main
,
};
tests/firmware/rt-frm
-ping
/Kconfig
→
tests/firmware/rt-frm/Kconfig
View file @
2c425e43
File moved
tests/firmware/
hmq-sync
/Makefile
→
tests/firmware/
rt-frm
/Makefile
100644 → 100755
View file @
2c425e43
OBJS
=
hmq-sync
.o
OBJS
=
rt-frm
.o
OBJS
+=
# add other object files that you need
OUTPUT
=
fw-
hmq-sync
OUTPUT
=
fw-
rt-frm
TRTL
?=
../../../
TRTL_SW
=
$(TRTL)
/software
...
...
tests/firmware/rt-frm
-ping
/configs/mt_defconfig
→
tests/firmware/rt-frm/configs/mt_defconfig
View file @
2c425e43
...
...
@@ -18,8 +18,8 @@ CONFIG_RT_APPLICATION_ID=0
#
CONFIG_MOCKTURTLE_FRAMEWORK_ENABLE=y
CONFIG_MOCKTURTLE_FRAMEWORK_DEBUG_ENABLE=y
# CONFIG_MOCKTURTLE_FRAMEWORK_VARIABLE_ENABLE is not set
# CONFIG_MOCKTURTLE_FRAMEWORK_BUFFER_ENABLE is not set
CONFIG_MOCKTURTLE_FRAMEWORK_VARIABLE_ENABLE=y
CONFIG_MOCKTURTLE_FRAMEWORK_BUFFER_ENABLE=y
#
# Mock Turtle library configuration
...
...
tests/firmware/rt-frm/rt-frm.c
0 → 100644
View file @
2c425e43
/*
* Copyright (C)
* Author:
* License:
*/
#include <mockturtle-framework.h>
#define BUF1_LEN 4
#define BUF2_LEN 5
static
int
var1
;
static
int
var2
;
static
uint32_t
buf1
[
BUF1_LEN
];
static
uint32_t
buf2
[
BUF2_LEN
];
struct
trtl_fw_variable
variables
[]
=
{
[
0
]
=
{
.
addr
=
(
void
*
)
&
var1
,
.
mask
=
0xFFFFFFFF
,
.
offset
=
0
,
.
flags
=
0
,
},
[
1
]
=
{
.
addr
=
(
void
*
)
&
var2
,
.
mask
=
0xFFFFFFFF
,
.
offset
=
0
,
.
flags
=
0
,
},
};
struct
trtl_fw_buffer
buffers
[]
=
{
[
0
]
=
{
.
buf
=
buf1
,
.
len
=
BUF1_LEN
*
4
,
},
[
1
]
=
{
.
buf
=
buf2
,
.
len
=
BUF2_LEN
*
4
,
},
};
static
int
frm_init
()
{
int
i
;
var1
=
0x55AA55AA
;
var2
=
0xFEDE0786
;
for
(
i
=
0
;
i
<
BUF1_LEN
;
++
i
)
buf1
[
i
]
=
i
;
for
(
i
=
0
;
i
<
BUF2_LEN
;
++
i
)
buf2
[
i
]
=
i
*
2
;
return
0
;
}
/**
* Well, the main :)
*/
static
int
frm_main
()
{
while
(
1
)
{
/* Handle all messages incoming from HMQ 0 as actions */
trtl_fw_mq_action_dispatch
(
TRTL_HMQ
,
0
);
}
return
0
;
}
struct
trtl_fw_application
app
=
{
.
name
=
"testfrm"
,
.
version
=
{
.
rt_id
=
0xBADC0FFE
,
.
rt_version
=
RT_VERSION
(
0
,
1
),
.
git_version
=
0x12345678
,
},
.
fpga_id_compat_n
=
0
,
.
variables
=
variables
,
.
n_variables
=
ARRAY_SIZE
(
variables
),
.
buffers
=
buffers
,
.
n_buffers
=
ARRAY_SIZE
(
buffers
),
.
init
=
frm_init
,
.
main
=
frm_main
,
};
tests/test_hmq.py
View file @
2c425e43
...
...
@@ -77,7 +77,7 @@ class TestHmq(object):
sa
=
hmq
.
get_stats
()
assert
sb
[
"message_sent"
]
+
1
==
sa
[
"message_sent"
]
time
.
sleep
(
0.
5
)
time
.
sleep
(
0.
1
)
assert
ser
.
in_waiting
>=
len
(
self
.
confirm
)
assert
self
.
confirm
==
ser
.
read
(
ser
.
in_waiting
)
.
decode
()
...
...
@@ -113,22 +113,26 @@ class TestHmq(object):
sa
=
hmq
.
get_stats
()
assert
sb
[
hmq
][
"message_received"
]
+
tot
==
sa
[
"message_received"
]
def
test_sync
(
self
,
trtl_cpu
,
trtl_msg
,
trtl_binary_hmq_
sync
):
def
test_sync
(
self
,
trtl_cpu
,
trtl_msg
,
trtl_binary_hmq_
async_send
):
"""It sends the test messages on all available HMQ.
The test is successful when what we read back is the same we sent
"""
trtl_cpu
.
load_application_file
(
trtl_binary_hmq_
sync
)
trtl_cpu
.
load_application_file
(
trtl_binary_hmq_
async_send
)
trtl_cpu
.
enable
()
time
.
sleep
(
0.1
)
for
hmq
in
trtl_cpu
.
hmq
:
if
hmq
.
idx_hmq
!=
0
:
continue
for
msg
in
trtl_msg
:
print
(
msg
.
payload
[
0
],
msg
.
payload
[
1
]
)
sb
=
hmq
.
get_stats
(
)
msg_r
=
hmq
.
sync_msg
(
msg
)
# the library add automatically this flag, but for the purpose
# of this test assertiong we manually set it
msg
.
header
.
flags
|=
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_SYNC
assert
msg_r
==
msg
sa
=
hmq
.
get_stats
()
assert
sb
[
"message_sent"
]
+
1
==
sa
[
"message_sent"
]
assert
sb
[
"message_received"
]
+
1
==
sa
[
"message_received"
]
assert
msg_r
.
header
.
rt_app_id
==
msg
.
header
.
rt_app_id
assert
msg_r
.
header
.
msg_id
==
msg
.
header
.
msg_id
assert
msg_r
.
header
.
len
==
msg
.
header
.
len
assert
msg_r
.
header
.
sync_id
==
msg
.
header
.
sync_id
assert
msg
.
header
.
flags
==
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_SYNC
assert
msg_r
.
header
.
flags
==
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_ACK
for
v1
,
v2
in
zip
(
msg
.
payload
,
msg_r
.
payload
):
assert
v1
==
v2
tests/test_rt_frm.py
View file @
2c425e43
import
os
import
pytest
import
PyMockTurtle
import
random
import
time
@
pytest
.
fixture
def
trtl_binary_frm
_var
(
trtl_firmware_dir
):
def
trtl_binary_frm
(
trtl_firmware_dir
):
return
os
.
path
.
join
(
trtl_firmware_dir
,
"firmware/rt-frm
-var/fw-rt-frm-var
.bin"
)
"firmware/rt-frm
/fw-rt-frm
.bin"
)
@
pytest
.
fixture
def
trtl_binary_frm_ping
(
trtl_firmware_dir
):
return
os
.
path
.
join
(
trtl_firmware_dir
,
"firmware/rt-frm-ping/fw-rt-frm-ping.bin"
)
@
pytest
.
fixture
def
trtl_binary_frm_version
(
trtl_binary_frm_ping
):
return
trtl_binary_frm_ping
class
TestFirmwareFramework
(
object
):
def
test_var
(
self
,
trtl_cpu0
,
trtl_binary_frm_var
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_var
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_var
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
var
=
PyMockTurtle
.
TrtlFirmwareVariable
(
trtl_cpu
.
hmq
[
0
])
assert
var
[
0
]
==
0x55AA55AA
assert
var
[
1
]
==
0xFEDE0786
a
=
random
.
randint
(
0
,
4096
)
b
=
random
.
randint
(
0
,
4096
)
var
[
0
]
=
a
var
[
1
]
=
b
assert
a
==
var
[
0
]
assert
b
==
var
[
1
]
def
test_buf
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
# TODO implement the Python support
def
test_ping
(
self
,
trtl_cpu0
,
trtl_binary_frm_ping
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_ping
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_ping
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
assert
trtl_cpu
0
.
ping
()
==
True
assert
trtl_cpu
.
ping
()
==
True
def
test_ver
(
self
,
trtl_cpu0
,
trtl_binary_frm_version
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_version
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_ver
(
self
,
trtl_cpu
,
trtl_version_exp
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
assert
trtl_cpu
0
.
ping
()
==
True
assert
trtl_cpu
.
version
()
==
trtl_version_exp
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment