Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
饶先宏
hdl4se
提交
00be60b7
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 搜索 >>
提交
00be60b7
编写于
8月 13, 2021
作者:
饶先宏
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
202108131152
上级
bb7d033b
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
146 addition
and
121 deletion
+146
-121
examples/hdl4secnn/cnn/cnncell/cnncell_concat.c
examples/hdl4secnn/cnn/cnncell/cnncell_concat.c
+19
-19
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
+11
-10
examples/hdl4secnn/cnn/cnncell/cnncell_dataoutput.c
examples/hdl4secnn/cnn/cnncell/cnncell_dataoutput.c
+8
-7
examples/hdl4secnn/cnn/cnncell/cnncell_datasource.c
examples/hdl4secnn/cnn/cnncell/cnncell_datasource.c
+9
-9
examples/hdl4secnn/cnn/cnncell/cnncell_innerproduct.c
examples/hdl4secnn/cnn/cnncell/cnncell_innerproduct.c
+10
-10
examples/hdl4secnn/cnn/cnncell/cnncell_lrn.c
examples/hdl4secnn/cnn/cnncell/cnncell_lrn.c
+6
-7
examples/hdl4secnn/cnn/cnncell/cnncell_pooling.c
examples/hdl4secnn/cnn/cnncell/cnncell_pooling.c
+6
-7
examples/hdl4secnn/cnn/cnncell/cnncell_softmax.c
examples/hdl4secnn/cnn/cnncell/cnncell_softmax.c
+7
-7
examples/hdl4secnn/googlenet/verilog/googlenet.v
examples/hdl4secnn/googlenet/verilog/googlenet.v
+1
-1
examples/hdl4secnn/googlenet/verilog/main.c
examples/hdl4secnn/googlenet/verilog/main.c
+48
-19
hdl4secell/include/hdl4secell.h
hdl4secell/include/hdl4secell.h
+0
-3
hdl4secell/src/hdl4se_fifo.c
hdl4secell/src/hdl4se_fifo.c
+20
-18
hdl4secell/src/hdl4se_module.c
hdl4secell/src/hdl4se_module.c
+0
-3
hdl4sesim/src/hdl4sesim.c
hdl4sesim/src/hdl4sesim.c
+1
-1
未找到文件。
examples/hdl4secnn/cnn/cnncell/cnncell_concat.c
浏览文件 @
00be60b7
...
...
@@ -74,17 +74,17 @@ IDLIST
VID
(
bDataWriteData
),
VID
(
index
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_concat
)
int
input_w
[
4
],
input_h
[
4
],
input_c
[
4
];
int
c0
,
c1
,
c2
,
c3
;
int
output_w
,
output_h
,
output_c
;
int
reset
;
END_MODULE_DECLARE
(
cnncell_concat
)
DEFINE_FUNC
(
cncell_concat_gen_read_write
,
"index, wDataWriteEnable, "
"
reset,
index, wDataWriteEnable, "
"wDataReadValid_0, bDataReadData_0, "
"wDataReadValid_1, bDataReadData_1, "
"wDataReadValid_2, bDataReadData_2, "
...
...
@@ -95,7 +95,7 @@ DEFINE_FUNC(cncell_concat_gen_read_write,
int
read2
=
0
;
int
read3
=
0
;
int
write
=
0
;
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
0
)
&&
(
index
<
pobj
->
c0
)
&&
vget
(
wDataReadValid_0
)))
{
read0
=
1
;
write
=
1
;
...
...
@@ -125,14 +125,14 @@ DEFINE_FUNC(cncell_concat_gen_read_write,
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cncell_concat_gen_write_data
,
"index, wDataWriteEnable, "
"
reset,
index, wDataWriteEnable, "
"wDataReadValid_0, bDataReadData_0, "
"wDataReadValid_1, bDataReadData_1, "
"wDataReadValid_2, bDataReadData_2, "
"wDataReadValid_3, bDataReadData_3"
)
{
int
index
=
vget
(
index
);
vput
(
bDataWriteData
,
0xcdcdcdcd
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
0
)
&&
(
index
<
pobj
->
c0
)
&&
vget
(
wDataReadValid_0
)))
{
VAssign
(
bDataWriteData
,
bDataReadData_0
);
}
...
...
@@ -150,14 +150,14 @@ DEFINE_FUNC(cncell_concat_gen_write_data,
DEFINE_FUNC
(
cncell_concat_gen_write
,
"index, wDataWriteEnable, "
"
reset,
index, wDataWriteEnable, "
"wDataReadValid_0, "
"wDataReadValid_1, "
"wDataReadValid_2, "
"wDataReadValid_3 "
)
{
int
index
=
vget
(
index
);
vput
(
wDataWrite
,
0
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(
((
index
>=
0
)
&&
(
index
<
pobj
->
c0
)
&&
vget
(
wDataReadValid_0
))
||
((
index
>=
pobj
->
c0
)
&&
(
index
<
pobj
->
c1
)
&&
vget
(
wDataReadValid_1
))
||
((
index
>=
pobj
->
c1
)
&&
(
index
<
pobj
->
c2
)
&&
vget
(
wDataReadValid_2
))
...
...
@@ -169,40 +169,40 @@ DEFINE_FUNC(cncell_concat_gen_write,
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cncell_concat_gen_read_0
,
"index, wDataWriteEnable, wDataReadValid_0"
)
{
DEFINE_FUNC
(
cncell_concat_gen_read_0
,
"
reset,
index, wDataWriteEnable, wDataReadValid_0"
)
{
int
index
=
vget
(
index
);
vput
(
wDataRead_0
,
0
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
0
)
&&
(
index
<
pobj
->
c0
)
&&
vget
(
wDataReadValid_0
)))
{
vput
(
wDataRead_0
,
1
);
}
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cncell_concat_gen_read_1
,
"index, wDataWriteEnable, wDataReadValid_1"
)
{
DEFINE_FUNC
(
cncell_concat_gen_read_1
,
"
reset,
index, wDataWriteEnable, wDataReadValid_1"
)
{
int
index
=
vget
(
index
);
vput
(
wDataRead_1
,
0
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
pobj
->
c0
)
&&
(
index
<
pobj
->
c1
)
&&
vget
(
wDataReadValid_1
)))
{
vput
(
wDataRead_1
,
1
);
}
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cncell_concat_gen_read_2
,
"index, wDataWriteEnable, wDataReadValid_2"
)
{
DEFINE_FUNC
(
cncell_concat_gen_read_2
,
"
reset,
index, wDataWriteEnable, wDataReadValid_2"
)
{
int
index
=
vget
(
index
);
vput
(
wDataRead_2
,
0
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
pobj
->
c1
)
&&
(
index
<
pobj
->
c2
)
&&
vget
(
wDataReadValid_2
)))
{
vput
(
wDataRead_2
,
1
);
}
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cncell_concat_gen_read_3
,
"index, wDataWriteEnable, wDataReadValid_3"
)
{
DEFINE_FUNC
(
cncell_concat_gen_read_3
,
"
reset,
index, wDataWriteEnable, wDataReadValid_3"
)
{
int
index
=
vget
(
index
);
vput
(
wDataRead_3
,
0
);
if
(
pobj
->
reset
&&
vget
(
wDataWriteEnable
))
{
if
(
vget
(
reset
)
&&
vget
(
wDataWriteEnable
))
{
if
(((
index
>=
pobj
->
c2
)
&&
(
index
<
pobj
->
c3
)
&&
vget
(
wDataReadValid_3
)))
{
vput
(
wDataRead_3
,
1
);
}
...
...
@@ -211,13 +211,14 @@ DEFINE_FUNC(cncell_concat_gen_read_3, "index, wDataWriteEnable, wDataReadValid_3
DEFINE_FUNC
(
cncell_concat_gen_clktick
,
""
)
{
int
index
;
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
index
=
0
;
vput
(
index
,
index
);
vput
(
reset
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
if
(
vget
(
wDataWriteEnable
))
{
...
...
@@ -251,7 +252,6 @@ MODULE_INIT(cnncell_concat)
pobj
->
output_w
=
(
int
)
MODULE_PARAM
(
i
*
3
+
0
);
pobj
->
output_h
=
(
int
)
MODULE_PARAM
(
i
*
3
+
1
);
pobj
->
output_c
=
(
int
)
MODULE_PARAM
(
i
*
3
+
2
);
pobj
->
reset
=
0
;
PORT_IN
(
wClk
,
1
);
PORT_IN
(
nwReset
,
1
);
...
...
@@ -277,7 +277,7 @@ MODULE_INIT(cnncell_concat)
GPORT_OUT
(
bDataWriteData
,
32
,
cncell_concat_gen_write_data
);
REG
(
index
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cncell_concat_gen_clktick
);
END_MODULE_INIT
(
cnncell_concat
)
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_convolution.c
浏览文件 @
00be60b7
...
...
@@ -83,6 +83,7 @@ IDLIST
VID
(
writeline
),
VID
(
readline
),
VID
(
lineindex
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_convolution
)
...
...
@@ -98,7 +99,6 @@ MODULE_DECLARE(cnncell_convolution)
float
*
line_out
;
short
*
coeff
;
short
*
bias
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -113,8 +113,8 @@ enum convstate {
CONV_STRIPLINE
,
};
DEFINE_FUNC
(
cnncell_convolution_gen_output_coeff
,
"state, index, wCoeffReadValid, bCoeffOffset, bCoeffBiasOffset"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
cnncell_convolution_gen_output_coeff
,
"
reset,
state, index, wCoeffReadValid, bCoeffOffset, bCoeffBiasOffset"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
wCoeffRead
,
0
);
vput
(
bCoeffReadAddr
,
0
);
}
...
...
@@ -153,9 +153,9 @@ DEFINE_FUNC(cnncell_convolution_gen_output_coeff, "state, index, wCoeffReadValid
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_convolution_gen_output_read
,
"state, wDataReadValid, readline, index"
)
{
DEFINE_FUNC
(
cnncell_convolution_gen_output_read
,
"
reset,
state, wDataReadValid, readline, index"
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
CONV_START
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -230,20 +230,21 @@ END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_convolution_clktick
,
""
)
{
//wDataRead = 0;
if
(
pobj
->
reset
==
0
)
{
int
reset
=
vget
(
reset
);
if
(
reset
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_COEFF
);
vput
(
index
,
0
);
vput
(
readline
,
0
);
vput
(
writeline
,
0
);
vput
(
reset
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
if
(
pobj
->
reset
)
{
if
(
reset
)
{
int
state
=
vget
(
state
);
pobj
->
reset
=
1
;
if
(
state
==
READ_COEFF
)
{
int
coeffvalid
;
coeffvalid
=
vget
(
wCoeffReadValid
);
...
...
@@ -397,7 +398,6 @@ 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
));
...
...
@@ -445,6 +445,7 @@ MODULE_INIT(cnncell_convolution)
REG
(
writeline
,
32
);
REG
(
readline
,
32
);
REG
(
lineindex
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_convolution_clktick
);
DEINIT_FUNC
(
cnncell_convolution_deinit
);
END_MODULE_INIT
(
cnncell_convolution
)
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_dataoutput.c
浏览文件 @
00be60b7
...
...
@@ -86,6 +86,7 @@ IDLIST
VID
(
state
),
VID
(
index
),
VID
(
reset
),
END_IDLIST
enum
outputstate
{
...
...
@@ -96,7 +97,6 @@ enum outputstate {
MODULE_DECLARE
(
cnncell_dataoutput
)
int
w
,
h
,
c
;
float
*
buf
;
int
reset
;
END_MODULE_DECLARE
(
cnncell_dataoutput
)
DEFINE_FUNC
(
cnncell_dataoutput_output
,
""
)
{
...
...
@@ -112,14 +112,15 @@ DEFINE_FUNC(cnncell_dataoutput_output, "") {
return
0
;
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_dataoutput_clktick
,
""
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
cnncell_dataoutput_clktick
,
"
reset, nwReset
"
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_DATA
);
vput
(
index
,
0
);
vput
(
reset
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
{
...
...
@@ -146,9 +147,9 @@ DEFINE_FUNC(cnncell_dataoutput_clktick, "") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_dataoutput_gen_output_read
,
"state, wDataReadValid"
)
{
DEFINE_FUNC
(
cnncell_dataoutput_gen_output_read
,
"
reset,
state, wDataReadValid"
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
READ_DATA
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -170,7 +171,6 @@ MODULE_INIT(cnncell_dataoutput)
pobj
->
buf
=
(
float
*
)
malloc
(
pobj
->
c
*
pobj
->
w
*
pobj
->
h
*
sizeof
(
float
));
PORT_IN
(
wClk
,
1
);
PORT_IN
(
nwReset
,
1
);
pobj
->
reset
=
0
;
GPORT_OUT
(
wDataRead
,
1
,
cnncell_dataoutput_gen_output_read
);
PORT_IN
(
wDataReadValid
,
1
);
...
...
@@ -178,6 +178,7 @@ MODULE_INIT(cnncell_dataoutput)
REG
(
state
,
3
);
REG
(
index
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_dataoutput_clktick
);
DEINIT_FUNC
(
cnncell_dataoutput_deinit
);
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_datasource.c
浏览文件 @
00be60b7
...
...
@@ -68,23 +68,23 @@ IDLIST
VID
(
cur_c
),
VID
(
index
),
VID
(
complete
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_datasource
)
int
w
,
h
,
c
;
int
reset
;
END_MODULE_DECLARE
(
cnncell_datasource
)
DEFINE_FUNC
(
cnncell_datasource_gen_wDataWrite
,
"complete, wDataWriteEnable"
)
{
vput
(
wDataWrite
,
(
vget
(
complete
)
==
0
)
&&
(
pobj
->
reset
!=
0
)
&&
vget
(
wDataWriteEnable
));
DEFINE_FUNC
(
cnncell_datasource_gen_wDataWrite
,
"
reset,
complete, wDataWriteEnable"
)
{
vput
(
wDataWrite
,
(
vget
(
complete
)
==
0
)
&&
(
vget
(
reset
)
!=
0
)
&&
vget
(
wDataWriteEnable
));
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_datasource_gen_bDataWriteData
,
"cur_c, cur_h, cur_w"
)
{
vput
(
bDataWriteData
,
*
((
unsigned
int
*
)
&
keyboard
[
vget
(
cur_c
)][
vget
(
cur_h
)][
vget
(
cur_w
)]));
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_datasource_gen_cur_whc
,
"complete, wDataWriteEnable, index, cur_c, cur_w, cur_h"
)
{
if
(
pobj
->
reset
==
0
)
{
/* 低电平有效 */
DEFINE_FUNC
(
cnncell_datasource_gen_cur_whc
,
"
reset,
complete, wDataWriteEnable, index, cur_c, cur_w, cur_h"
)
{
if
(
vget
(
reset
)
==
0
)
{
/* 低电平有效 */
vput
(
index
,
0
);
vput
(
complete
,
0
);
vput
(
cur_w
,
0
);
...
...
@@ -121,10 +121,10 @@ DEFINE_FUNC(cnncell_datasource_gen_cur_whc, "complete, wDataWriteEnable, index,
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_datasource_clktick
,
""
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
cnncell_datasource_clktick
,
"
nwReset
"
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
))
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
END_DEFINE_FUNC
...
...
@@ -132,7 +132,6 @@ MODULE_INIT(cnncell_datasource)
pobj
->
w
=
(
int
)
MODULE_PARAM
(
0
);
pobj
->
h
=
(
int
)
MODULE_PARAM
(
1
);
pobj
->
c
=
(
int
)
MODULE_PARAM
(
2
);
pobj
->
reset
=
0
;
PORT_IN
(
wClk
,
1
);
PORT_IN
(
nwReset
,
1
);
...
...
@@ -144,5 +143,6 @@ MODULE_INIT(cnncell_datasource)
GREG
(
cur_c
,
32
,
cnncell_datasource_gen_cur_whc
);
GREG
(
index
,
32
,
cnncell_datasource_gen_cur_whc
);
GREG
(
complete
,
1
,
cnncell_datasource_gen_cur_whc
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_datasource_clktick
);
END_MODULE_INIT
(
cnncell_datasource
)
examples/hdl4secnn/cnn/cnncell/cnncell_innerproduct.c
浏览文件 @
00be60b7
...
...
@@ -79,6 +79,7 @@ IDLIST
VID
(
bDataWriteData
),
VID
(
state
),
VID
(
index
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_innerproduct
)
...
...
@@ -90,7 +91,6 @@ MODULE_DECLARE(cnncell_innerproduct)
short
*
bias
;
float
*
inbuf
;
float
*
outbuf
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -104,8 +104,8 @@ enum innerproductstate {
DO_WRITE
,
};
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_coeff
,
"state, index, wCoeffReadValid, bCoeffOffset, bCoeffBiasOffset"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_coeff
,
"
reset,
state, index, wCoeffReadValid, bCoeffOffset, bCoeffBiasOffset"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
wCoeffRead
,
0
);
vput
(
bCoeffReadAddr
,
0
);
}
...
...
@@ -179,13 +179,14 @@ DEFINE_FUNC(cnncell_innerproduct_calc, "") {
DEFINE_FUNC
(
cnncell_innerproduct_clktick
,
""
)
{
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_COEFF
);
vput
(
index
,
0
);
vput
(
reset
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
{
...
...
@@ -267,9 +268,9 @@ DEFINE_FUNC(cnncell_innerproduct_clktick, "") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_read
,
"state, wDataReadValid"
)
{
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_read
,
"
reset,
state, wDataReadValid"
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
READ_DATA
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -279,7 +280,7 @@ DEFINE_FUNC(cnncell_innerproduct_gen_output_read, "state, wDataReadValid") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_write
,
"index, wDataWriteEanble"
)
{
DEFINE_FUNC
(
cnncell_innerproduct_gen_output_write
,
"index,
state,
wDataWriteEanble"
)
{
int
index
;
index
=
vget
(
index
);
vput
(
wDataWrite
,
0
);
...
...
@@ -307,7 +308,6 @@ MODULE_INIT(cnncell_innerproduct)
pobj
->
output_w
=
(
int
)
MODULE_PARAM
(
3
);
pobj
->
output_h
=
(
int
)
MODULE_PARAM
(
4
);
pobj
->
output_c
=
(
int
)
MODULE_PARAM
(
5
);
pobj
->
reset
=
0
;
pobj
->
coeffcount
=
pobj
->
output_c
*
pobj
->
input_h
*
pobj
->
input_w
*
pobj
->
input_c
;
pobj
->
coeff
=
(
short
*
)
malloc
(
pobj
->
coeffcount
*
sizeof
(
short
));
pobj
->
bias
=
(
short
*
)
malloc
(
pobj
->
output_c
*
pobj
->
output_h
*
pobj
->
output_w
*
sizeof
(
short
));
...
...
@@ -350,7 +350,7 @@ MODULE_INIT(cnncell_innerproduct)
REG
(
state
,
3
);
REG
(
index
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_innerproduct_clktick
);
DEINIT_FUNC
(
cnncell_innerproduct_deinit
);
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_lrn.c
浏览文件 @
00be60b7
...
...
@@ -63,6 +63,7 @@ IDLIST
VID
(
bDataWriteData
),
VID
(
index
),
VID
(
state
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_lrn
)
...
...
@@ -72,7 +73,6 @@ MODULE_DECLARE(cnncell_lrn)
float
k
,
alpha
,
beta
;
float
*
buf
;
float
*
square
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -84,9 +84,9 @@ enum cnncell_lrn_state {
LRN_WRITE
,
};
DEFINE_FUNC
(
cnncell_lrn_gen_read
,
"state, wDataReadValid"
)
{
DEFINE_FUNC
(
cnncell_lrn_gen_read
,
"
reset,
state, wDataReadValid"
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
if
(
vget
(
state
)
==
LRN_READ
)
{
if
(
vget
(
wDataReadValid
))
{
vput
(
wDataRead
,
1
);
...
...
@@ -159,13 +159,13 @@ DEFINE_FUNC(cnncell_lrn_gen_line, "") {
DEFINE_FUNC
(
cnncell_lrn_clktick
,
""
)
{
int
state
=
vget
(
state
);
int
index
=
vget
(
index
);
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
LRN_READ
);
index
=
0
;
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
if
(
state
==
LRN_READ
)
{
...
...
@@ -215,7 +215,6 @@ MODULE_INIT(cnncell_lrn)
pobj
->
alpha
=
(
float
)
MODULE_PARAM_REAL
(
5
);
pobj
->
beta
=
(
float
)
MODULE_PARAM_REAL
(
6
);
pobj
->
region
=
(
int
)
MODULE_PARAM
(
7
);
pobj
->
reset
=
0
;
#if CNNCELLDEBUG
{
char
filename
[
80
];
...
...
@@ -242,7 +241,7 @@ MODULE_INIT(cnncell_lrn)
REG
(
index
,
32
);
REG
(
state
,
3
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_lrn_clktick
);
DEINIT_FUNC
(
cnncell_lrn_deinit
);
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_pooling.c
浏览文件 @
00be60b7
...
...
@@ -67,6 +67,7 @@ IDLIST
VID
(
writeline
),
VID
(
readline
),
VID
(
lineindex
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_pooling
)
...
...
@@ -78,7 +79,6 @@ MODULE_DECLARE(cnncell_pooling)
int
linesize
;
float
*
line_in
;
float
*
line_out
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -93,9 +93,9 @@ enum poolingstate {
};
DEFINE_FUNC
(
cnncell_pooling_gen_read
,
"state, wDataReadValid, readline, index, "
)
{
DEFINE_FUNC
(
cnncell_pooling_gen_read
,
"
reset,
state, wDataReadValid, readline, index, "
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
POOLING_START
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -202,7 +202,7 @@ END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_pooling_clktick
,
""
)
{
//wDataRead = 0;
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
POOLING_START
);
vput
(
index
,
0
);
...
...
@@ -210,7 +210,7 @@ DEFINE_FUNC(cnncell_pooling_clktick, "") {
vput
(
writeline
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
{
...
...
@@ -326,7 +326,6 @@ MODULE_INIT(cnncell_pooling)
pobj
->
line_in
=
(
float
*
)
malloc
(
pobj
->
kh
*
pobj
->
linesize
*
sizeof
(
float
));
memset
(
pobj
->
line_in
,
0
,
pobj
->
kh
*
pobj
->
linesize
*
sizeof
(
float
));
pobj
->
line_out
=
(
float
*
)
malloc
(
pobj
->
output_w
*
pobj
->
output_c
*
sizeof
(
float
));
pobj
->
reset
=
0
;
#if CNNCELLDEBUG
{
char
filename
[
80
];
...
...
@@ -351,7 +350,7 @@ MODULE_INIT(cnncell_pooling)
REG
(
writeline
,
32
);
REG
(
readline
,
32
);
REG
(
lineindex
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_pooling_clktick
);
DEINIT_FUNC
(
cnncell_pooling_deinit
);
...
...
examples/hdl4secnn/cnn/cnncell/cnncell_softmax.c
浏览文件 @
00be60b7
...
...
@@ -63,13 +63,13 @@ IDLIST
VID
(
bDataWriteData
),
VID
(
state
),
VID
(
index
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
cnncell_softmax
)
int
w
,
h
,
c
;
float
*
inbuf
;
float
*
outbuf
;
int
reset
;
#if CNNCELLDEBUG
FILE
*
pDumpFile
;
#endif
...
...
@@ -113,13 +113,13 @@ DEFINE_FUNC(cnncell_softmax_calc, "") {
DEFINE_FUNC
(
cnncell_softmax_clktick
,
""
)
{
if
(
pobj
->
reset
==
0
)
{
if
(
vget
(
reset
)
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
state
,
READ_DATA
);
vput
(
index
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
{
...
...
@@ -160,9 +160,9 @@ DEFINE_FUNC(cnncell_softmax_clktick, "") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_softmax_gen_output_read
,
"state, wDataReadValid"
)
{
DEFINE_FUNC
(
cnncell_softmax_gen_output_read
,
"
reset,
state, wDataReadValid"
)
{
vput
(
wDataRead
,
0
);
if
(
pobj
->
reset
!=
0
)
{
if
(
vget
(
reset
)
!=
0
)
{
int
state
=
vget
(
state
);
if
(
state
==
READ_DATA
)
{
if
(
vget
(
wDataReadValid
))
{
...
...
@@ -172,7 +172,7 @@ DEFINE_FUNC(cnncell_softmax_gen_output_read, "state, wDataReadValid") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
cnncell_softmax_gen_output_write
,
"state, i
dn
ex, wDataWriteEnable"
)
{
DEFINE_FUNC
(
cnncell_softmax_gen_output_write
,
"state, i
nd
ex, wDataWriteEnable"
)
{
int
index
;
index
=
vget
(
index
);
vput
(
wDataWrite
,
0
);
...
...
@@ -195,7 +195,6 @@ MODULE_INIT(cnncell_softmax)
pobj
->
c
=
(
int
)
MODULE_PARAM
(
2
);
pobj
->
inbuf
=
(
float
*
)
malloc
(
pobj
->
c
*
pobj
->
h
*
pobj
->
w
*
sizeof
(
float
));
pobj
->
outbuf
=
(
float
*
)
malloc
(
pobj
->
c
*
pobj
->
h
*
pobj
->
w
*
sizeof
(
float
));
pobj
->
reset
=
0
;
#if CNNCELLDEBUG
{
char
filename
[
80
];
...
...
@@ -216,6 +215,7 @@ MODULE_INIT(cnncell_softmax)
REG
(
state
,
3
);
REG
(
index
,
32
);
REG
(
reset
,
1
);
CLKTICK_FUNC
(
cnncell_softmax_clktick
);
DEINIT_FUNC
(
cnncell_softmax_deinit
);
...
...
examples/hdl4secnn/googlenet/verilog/googlenet.v
浏览文件 @
00be60b7
...
...
@@ -31,7 +31,7 @@
/*
* 由googlenet程序生成
* 生成时间:Fri Aug
6 21:35:17
2021
* 生成时间:Fri Aug
13 10:47:54
2021
* 请不要手工修改。
*/
`include
"hdl4secell.v"
...
...
examples/hdl4secnn/googlenet/verilog/main.c
浏览文件 @
00be60b7
...
...
@@ -49,7 +49,7 @@ unsigned long long clocks = 0;
static
int
running
=
1
;
#define VCDOUTPUT
1
#define VCDOUTPUT
0
int
cnnInit
();
...
...
@@ -95,25 +95,54 @@ int main(int argc, char* argv[])
objectCall2
(
vcdfile
,
AddSignal
,
"/top/srcbuf"
,
"count"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/srcbuf"
,
"maxcount"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"wDataRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"wDataReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"bDataReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"wDataWriteEnable"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"wDataWrite"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"bDataWriteData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"index"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"state"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"writeline"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"readline"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_13"
,
"lineindex"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wDataValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"bReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wWriteEnable"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wWrite"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"bWriteData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"readpos"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"writepos"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wWriteEn"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"wReadEn"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"inputcount"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"outputcount"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"count"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/cnn_buf_167"
,
"maxcount"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wCoeffRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"bCoeffReadAddr"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wCoeffReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wDataRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wDataReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"bDataReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wDataWriteEnable"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"wDataWrite"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"bDataWriteData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"index"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"state"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"writeline"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"readline"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/convolution_2"
,
"lineindex"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"wCoeffRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"wCoeffReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"bCoeffReadAddr"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"bCoeffReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"bCoeffOffset"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"read"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_13"
,
"readaddr"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"wCoeffRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"wCoeffReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"bCoeffReadAddr"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"bCoeffReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"bCoeffOffset"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"read"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/coeffbuf_2"
,
"readaddr"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"wDataRead"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"wDataReadValid"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"bDataReadData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"wDataWriteEnable"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"wDataWrite"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"bDataWriteData"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"state"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"index"
);
objectCall2
(
vcdfile
,
AddSignal
,
"/top/net/softmax_168"
,
"reset"
);
objectCall1
(
vcdfile
,
SetTopModule
,
topmodule
);
objectCall0
(
vcdfile
,
StartRecord
);
...
...
hdl4secell/include/hdl4secell.h
浏览文件 @
00be60b7
...
...
@@ -92,8 +92,6 @@ typedef struct _sGeneralModule {
MODULE_FUNC
deinit_func
;
THREADLOCK
lock
;
const
char
*
clktick_depend
;
void
*
pobj
;
void
*
priv_data
;
void
*
func_param
;
...
...
@@ -538,7 +536,6 @@ do { \
#define CLKTICK_FUNC(func) \
do { \
pobj->pmodule->clktick_func = func; \
pobj->pmodule->clktick_depend = STRDUP(__##func##_depend_list); \
}while (0)
#define DEINIT_FUNC(func) pobj->pmodule->deinit_func = func
...
...
hdl4secell/src/hdl4se_fifo.c
浏览文件 @
00be60b7
...
...
@@ -64,6 +64,7 @@ IDLIST
VID
(
outputcount
),
VID
(
count
),
VID
(
maxcount
),
VID
(
reset
),
END_IDLIST
MODULE_DECLARE
(
hdl4se_fifo
)
...
...
@@ -71,10 +72,9 @@ MODULE_DECLARE(hdl4se_fifo)
unsigned
int
depth
;
unsigned
int
wordsize
;
unsigned
int
*
fifo_data
;
int
reset
;
END_MODULE_DECLARE
(
hdl4se_fifo
)
DEFINE_FUNC
(
hdl4se_fifo_gen_bReadData
,
"readpos"
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_bReadData
,
"readpos
, wWrite
"
)
{
unsigned
int
readaddr
=
vget
(
readpos
);
var
readdata
=
Var
(
bReadData
);
unsigned
int
j
;
...
...
@@ -91,8 +91,8 @@ DEFINE_FUNC(hdl4se_fifo_gen_wWriteEnable, "wWriteEn") {
VAssign
(
wWriteEnable
,
wWriteEn
);
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_readpos
,
"readpos, wRead, wReadEn"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_readpos
,
"re
set, re
adpos, wRead, wReadEn"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
readpos
,
0
);
}
else
{
...
...
@@ -106,8 +106,8 @@ DEFINE_FUNC(hdl4se_fifo_gen_readpos, "readpos, wRead, wReadEn") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_writepos
,
"writepos, wWrite, wWriteEn"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_writepos
,
"
reset,
writepos, wWrite, wWriteEn"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
writepos
,
0
);
}
else
{
...
...
@@ -121,8 +121,8 @@ DEFINE_FUNC(hdl4se_fifo_gen_writepos, "writepos, wWrite, wWriteEn") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_outputcount
,
"wRead, wReadEn, outputcount"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_outputcount
,
"
reset,
wRead, wReadEn, outputcount"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
outputcount
,
0
);
}
else
{
...
...
@@ -132,8 +132,8 @@ DEFINE_FUNC(hdl4se_fifo_gen_outputcount, "wRead, wReadEn, outputcount") {
}
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_inputcount
,
"wWrite, wWriteEn, inputcount"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_inputcount
,
"
reset,
wWrite, wWriteEn, inputcount"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
inputcount
,
0
);
}
else
{
...
...
@@ -154,8 +154,8 @@ DEFINE_FUNC(hdl4se_fifo_count, "readpos, writepos") {
vput
(
count
,
datacount
);
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_maxcount
,
"readpos, writepos, maxcount"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_maxcount
,
"re
set, re
adpos, writepos, maxcount"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
maxcount
,
0
);
}
else
{
...
...
@@ -186,8 +186,8 @@ DEFINE_FUNC(hdl4se_fifo_gen_wReadEn, "readpos, writepos, wRead, wReadEn, wWrite,
vput
(
wReadEn
,
(
readaddr
!=
writeaddr
)
?
1
:
0
);
}
END_DEFINE_FUNC
DEFINE_FUNC
(
hdl4se_fifo_gen_wWriteEn
,
"readpos, writepos, wRead, wReadEn, wWrite, wWriteEn"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_gen_wWriteEn
,
"re
set, re
adpos, writepos, wRead, wReadEn, wWrite, wWriteEn"
)
{
if
(
vget
(
reset
)
==
0
)
{
vput
(
wWriteEn
,
0
);
}
else
{
...
...
@@ -226,17 +226,19 @@ DEFINE_FUNC(hdl4se_fifo_ClkTick, "nwReset, readpos, writepos, wRead, wReadEn, ou
#else
DEFINE_FUNC
(
hdl4se_fifo_ClkTick
,
"nwReset, readpos, writepos, wRead, wReadEn, outputcount, wWrite, wWriteEn, inputcount, maxcount"
)
{
if
(
pobj
->
reset
==
0
)
{
DEFINE_FUNC
(
hdl4se_fifo_ClkTick
,
"reset, nwReset, readpos, writepos, wRead, wReadEn, outputcount, wWrite, wWriteEn, inputcount, maxcount"
)
{
int
reset
=
vget
(
reset
);
if
(
reset
==
0
)
{
if
(
vget
(
nwReset
)
==
0
)
{
vput
(
readpos
,
0
);
vput
(
writepos
,
0
);
vput
(
wReadEn
,
0
);
vput
(
wWriteEn
,
0
);
vput
(
maxcount
,
0
);
vput
(
reset
,
0
);
}
else
{
pobj
->
reset
=
1
;
vput
(
reset
,
1
)
;
}
}
else
{
...
...
@@ -290,7 +292,6 @@ MODULE_INIT(hdl4se_fifo)
pobj
->
fifo_data
=
NULL
;
pobj
->
width
=
(
int
)
MODULE_PARAM
(
0
);
pobj
->
depth
=
(
int
)
MODULE_PARAM
(
1
);
pobj
->
reset
=
0
;
if
(
pobj
->
width
<=
0
)
return
EIID_INVALIDPARAM
;
if
(
pobj
->
depth
<=
2
)
...
...
@@ -325,6 +326,7 @@ MODULE_INIT(hdl4se_fifo)
REG
(
outputcount
,
32
);
WIRE
(
count
,
32
);
REG
(
maxcount
,
32
);
REG
(
reset
,
1
);
#endif
CLKTICK_FUNC
(
hdl4se_fifo_ClkTick
);
...
...
hdl4secell/src/hdl4se_module.c
浏览文件 @
00be60b7
...
...
@@ -479,7 +479,6 @@ int hdl4se_module_Init(sGeneralModule* pobj, void* obj, const PARAMITEM* pParams
pointerarrayInit
(
&
pobj
->
funcs
);
pobj
->
pobj
=
obj
;
pobj
->
name
=
NULL
;
pobj
->
clktick_depend
=
NULL
;
pobj
->
parent
=
NULL
;
pobj
->
func_param
=
obj
;
pobj
->
setup_func
=
NULL
;
...
...
@@ -518,8 +517,6 @@ void hdl4se_module_DeInit(sGeneralModule* pobj)
{
if
(
pobj
->
name
!=
NULL
)
mt_free
(
pobj
->
name
);
if
(
pobj
->
clktick_depend
!=
NULL
)
free
(
pobj
->
clktick_depend
);
pointerarrayDestroy
(
&
pobj
->
variables
,
variableDestroy
);
pointerarrayDestroy
(
&
pobj
->
modules
,
objRelease
);
pointerarrayDestroy
(
&
pobj
->
parameters
,
mt_free
);
...
...
hdl4sesim/src/hdl4sesim.c
浏览文件 @
00be60b7
...
...
@@ -238,7 +238,7 @@ static int hdl4sesim_hdl4se_simulator_SetReset(HOBJECT object, int reset)
return
0
;
}
#define THREADCOUNT
9
#define THREADCOUNT
3
static
int
hdl4sesim_hdl4se_simulator_ClkTick
(
HOBJECT
object
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录