Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
饶先宏
hdl4se
提交
1e633fd1
H
hdl4se
项目概览
饶先宏
/
hdl4se
通知
12
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hdl4se
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1e633fd1
编写于
8月 06, 2021
作者:
饶先宏
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
202108060624
上级
bc2e6006
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
15 deletion
+24
-15
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
+16
-8
hdl4sesim/src/hdl4sesim.c
hdl4sesim/src/hdl4sesim.c
+8
-7
未找到文件。
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
浏览文件 @
1e633fd1
...
...
@@ -98,6 +98,7 @@ MODULE_DECLARE(cnncell_convolution)
float
*
line_out
;
short
*
coeff
;
short
*
bias
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -113,7 +114,7 @@ enum convstate {
};
DEFINE_FUNC
(
cnncell_convolution_gen_output_coeff
)
{
if
(
vget
(
nwReset
)
==
0
)
{
if
(
pobj
->
reset
==
0
)
{
vput
(
wCoeffRead
,
0
);
vput
(
bCoeffReadAddr
,
0
);
}
...
...
@@ -154,7 +155,7 @@ DEFINE_FUNC(cnncell_convolution_gen_output_coeff) {
DEFINE_FUNC
(
cnncell_convolution_gen_output_read
)
{
vput
(
wDataRead
,
0
);
if
(
vget
(
nwReset
)
!=
0
)
{
if
(
pobj
->
reset
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
CONV_START
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -229,14 +230,20 @@ END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_convolution_clktick
)
{
//wDataRead = 0;
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_COEFF
);
vput
(
index
,
0
);
vput
(
readline
,
0
);
vput
(
writeline
,
0
);
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_COEFF
);
vput
(
index
,
0
);
vput
(
readline
,
0
);
vput
(
writeline
,
0
);
}
else
{
pobj
->
reset
=
1
;
}
}
else
{
if
(
pobj
->
reset
)
{
int
state
=
vget
(
state
);
pobj
->
reset
=
1
;
if
(
state
==
READ_COEFF
)
{
int
coeffvalid
;
coeffvalid
=
vget
(
wCoeffReadValid
);
...
...
@@ -390,6 +397,7 @@ MODULE_INIT(cnncell_convolution)
pobj
->
pw
=
(
int
)
MODULE_PARAM
(
10
);
pobj
->
ph
=
(
int
)
MODULE_PARAM
(
11
);
pobj
->
actfunc
=
(
int
)
MODULE_PARAM
(
12
);
pobj
->
reset
=
0
;
pobj
->
coeffcount
=
pobj
->
output_c
*
pobj
->
kw
*
pobj
->
kh
*
pobj
->
input_c
;
pobj
->
coeff
=
(
short
*
)
malloc
(
pobj
->
coeffcount
*
sizeof
(
short
));
pobj
->
bias
=
(
short
*
)
malloc
(
pobj
->
output_c
*
sizeof
(
short
));
...
...
hdl4sesim/src/hdl4sesim.c
浏览文件 @
1e633fd1
...
...
@@ -47,6 +47,8 @@
#include "hdl4secell.h"
#include "threadlock.h"
#include "windows.h"
#define IMPLEMENT_GUID
#include "hdl4sesim.h"
#undef IMPLEMENT_GUID
...
...
@@ -216,6 +218,8 @@ static int hdl4sesim_hdl4se_simulator_SetReset(HOBJECT object, int reset)
return
0
;
}
#define THREADCOUNT 4
static
int
hdl4sesim_hdl4se_simulator_ClkTick
(
HOBJECT
object
)
{
sHDL4SESim
*
pobj
;
...
...
@@ -226,14 +230,11 @@ static int hdl4sesim_hdl4se_simulator_ClkTick(HOBJECT object)
for
(
i
=
0
;
i
<
pobj
->
singlethreadmodules
.
itemcount
;
i
++
)
{
hdl4se_module_ClkTick
(
&
((
IHDL4SEModuleVar
*
)(
pobj
->
singlethreadmodules
.
array
[
i
]))
->
data
);
}
#pragma omp parallel for num_threads(2)
//for (i = 0; i < pobj->multithreadmodules.itemcount; i++) {
#pragma omp parallel for num_threads(THREADCOUNT)
for
(
i
=
0
;
i
<
pobj
->
multithreadmodules
.
itemcount
;
i
++
)
{
// int j = i / 16 + (i % 16) * 16;
// if (j < pobj->multithreadmodules.itemcount)
hdl4se_module_ClkTick
(
&
((
IHDL4SEModuleVar
*
)(
pobj
->
multithreadmodules
.
array
[
i
]))
->
data
);
hdl4se_module_ClkTick
(
&
((
IHDL4SEModuleVar
*
)(
pobj
->
multithreadmodules
.
array
[
i
]))
->
data
);
}
return
0
;
return
0
;
}
static
int
hdl4sesim_hdl4se_simulator_Setup
(
HOBJECT
object
)
...
...
@@ -248,7 +249,7 @@ static int hdl4sesim_hdl4se_simulator_Setup(HOBJECT object)
for
(
i
=
0
;
i
<
pobj
->
singlethreadmodules
.
itemcount
;
i
++
)
{
hdl4se_module_Setup
(
&
((
IHDL4SEModuleVar
*
)(
pobj
->
singlethreadmodules
.
array
[
i
]))
->
data
);
}
#pragma omp parallel for num_threads(
2
)
#pragma omp parallel for num_threads(
THREADCOUNT
)
for
(
i
=
0
;
i
<
pobj
->
multithreadmodules
.
itemcount
;
i
++
)
{
hdl4se_module_Setup
(
&
((
IHDL4SEModuleVar
*
)(
pobj
->
multithreadmodules
.
array
[
i
]))
->
data
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录