Skip to content

Commit cf111ee

Browse files
committed
update data generate
1 parent c002986 commit cf111ee

File tree

10 files changed

+584
-242
lines changed

10 files changed

+584
-242
lines changed

py/dataGenerate.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import torch.nn as nn
2+
import torch
3+
import numpy as np
4+
import json
5+
import sys
6+
import paddingMode
7+
8+
9+
def dataGenerate(cfgPath, saveDataGenerateFile=True):
10+
_, paddingData = paddingMode.padding(cfgPath, True)
11+
with open(cfgPath) as f:
12+
a = json.load(f)
13+
dst_dataGenerate_py = a['featureGenerateSim']['dst_py']
14+
dst_dataGenerate_scala = a['featureGenerateSim']['dst_scala']
15+
computeChannel = a['total']['COMPUTE_CHANNEL_NUM']
16+
KERNEL_NUM = a['featureGeneratePara']['KERNEL_NUM']
17+
FEATURE_RAM_ADDR_WIDTH = a['featureGeneratePara']['FEATURE_RAM_ADDR_WIDTH']
18+
19+
h = paddingData.shape[1]
20+
w = paddingData.shape[2]
21+
c = paddingData.shape[0]
22+
d = []
23+
d.append(paddingData[:, 0:h - 2, 0:w - 2])
24+
d.append(paddingData[:, 0:h - 2, 1:w - 1])
25+
d.append(paddingData[:, 0:h - 2, 2:w])
26+
d.append(paddingData[:, 1:h - 1, 0:w - 2])
27+
d.append(paddingData[:, 1:h - 1, 1:w - 1])
28+
d.append(paddingData[:, 1:h - 1, 2:w])
29+
d.append(paddingData[:, 2:h, 0:w - 2])
30+
d.append(paddingData[:, 2:h, 1:w - 1])
31+
d.append(paddingData[:, 2:h, 2:w])
32+
for i in range(9):
33+
fp = open(dst_dataGenerate_py + "d" + str(i)+".txt", 'w')
34+
35+
def save_xx(high, width, channel, xx, fp):
36+
for i in range(high):
37+
for j in range(width):
38+
out = []
39+
for k in range(channel):
40+
out.append(xx[k][i][j])
41+
if len(out) == computeChannel:
42+
out.reverse()
43+
for m in out:
44+
m = m.item()
45+
fp.write('%02x' % m)
46+
fp.write('\n')
47+
out = []
48+
fp.close()
49+
50+
save_xx(h - 2, w - 2, c, d[i], fp)
51+
52+
53+
dataGenerate("../simData/config.json", False)

py/paddingMode.py

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
import sys
66

77

8-
def main(cfgPath):
8+
def padding(cfgPath, saveFile=True):
99
with open(cfgPath) as f:
1010
a = json.load(f)
11-
channel = a['padding']['channelIn']
12-
row = a['padding']['rowNumIn']
13-
col = a['padding']['colNumIn']
14-
enPadding = a['padding']['enPadding']
15-
src = a['padding']['src_py']
16-
dst = a['padding']['dst_py']
17-
computeChannel = a['padding']['COMPUTE_CHANNEL_NUM']
18-
zeroData = a['padding']['zeroDara']
19-
zeroNum = a['padding']['zeroNum']
11+
channel = a['paddingSim']['channelIn']
12+
row = a['paddingSim']['rowNumIn']
13+
col = a['paddingSim']['colNumIn']
14+
enPadding = a['paddingSim']['enPadding']
15+
src = a['paddingSim']['src_py']
16+
dst = a['paddingSim']['dst_py']
17+
computeChannel = a['total']['COMPUTE_CHANNEL_NUM']
18+
zeroData = a['paddingSim']['zeroDara']
19+
zeroNum = a['paddingSim']['zeroNum']
2020

2121
x = torch.randint(0, 127, (channel, row, col))
2222
xx = np.array(x)
@@ -25,28 +25,30 @@ def main(cfgPath):
2525
pad = nn.ConstantPad2d(padding=(zeroNum, zeroNum, zeroNum, zeroNum), value=zeroData)
2626
y = pad(x)
2727
yy = np.array(y)
28-
fp1 = open(src, 'w')
29-
fp2 = open(dst, 'w')
28+
if (saveFile):
29+
fp1 = open(src, 'w')
30+
fp2 = open(dst, 'w')
3031

31-
def save_xx(high, width, channel, xx, fp):
32-
out = []
33-
for h in range(high):
34-
for w in range(width):
35-
for c in range(channel):
36-
out.append(xx[c][h][w])
37-
if len(out) == computeChannel:
38-
out.reverse()
39-
for m in out:
40-
m = m.item()
41-
fp.write('%02x' % m)
42-
fp.write('\n')
43-
out = []
44-
fp.close()
32+
def save_xx(high, width, channel, xx, fp):
33+
out = []
34+
for h in range(high):
35+
for w in range(width):
36+
for c in range(channel):
37+
out.append(xx[c][h][w])
38+
if len(out) == computeChannel:
39+
out.reverse()
40+
for m in out:
41+
m = m.item()
42+
fp.write('%02x' % m)
43+
fp.write('\n')
44+
out = []
45+
fp.close()
4546

46-
save_xx(xx.shape[1], xx.shape[2], xx.shape[0], xx, fp1)
47-
save_xx(yy.shape[1], yy.shape[2], yy.shape[0], yy, fp2)
47+
save_xx(xx.shape[1], xx.shape[2], xx.shape[0], xx, fp1)
48+
save_xx(yy.shape[1], yy.shape[2], yy.shape[0], yy, fp2)
49+
return [xx, yy]
4850

4951

5052
if __name__ == '__main__':
5153
# print(sys)
52-
main("../simData/config.json")
54+
padding("../simData/config.json")

py/simModule.py

Whitespace-only changes.

simData/config.json

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
11
{
2-
"padding": {
3-
"enPadding": true,
4-
"channelIn": 8,
5-
"rowNumIn": 640,
6-
"colNumIn": 320,
7-
"zeroDara": 8,
8-
"zeroNum": 2,
2+
"total": {
93
"COMPUTE_CHANNEL_NUM": 8,
104
"DATA_WIDTH": 8,
115
"CHANNEL_WIDTH": 10,
12-
"FEATURE_WIDTH": 11,
13-
"src_py": "G:/SpinalStudy/simData/src.txt",
14-
"dst_py": "G:/SpinalStudy/simData/dst.txt",
15-
"dst_scala": "G:/SpinalStudy/simData/dst_scala.txt"
6+
"FEATURE_WIDTH": 11
7+
},
8+
"paddingPara": {
9+
10+
},
11+
"paddingSim": {
12+
"enPadding": true,
13+
"channelIn": 16,
14+
"rowNumIn": 320,
15+
"colNumIn": 640,
16+
"zeroDara": 8,
17+
"zeroNum": 2,
18+
"src_py": "G:/SpinalStudy/simData/src_padding.txt",
19+
"dst_py": "G:/SpinalStudy/simData/dst_padding_py.txt",
20+
"dst_scala": "G:/SpinalStudy/simData/dst_padding_scala.txt"
21+
},
22+
"featureGeneratePara": {
23+
"KERNEL_NUM": 9,
24+
"FEATURE_RAM_ADDR_WIDTH": 11
25+
},
26+
"featureGenerateSim": {
27+
"dst_py": "G:/SpinalStudy/simData/dst_dataGenerate_py",
28+
"dst_scala": "G:/SpinalStudy/simData/dst_dataGenerate_scala"
29+
},
30+
"simPath": {
31+
1632
}
1733
}
Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,27 @@
11
import spinal.core._
22
import spinal.lib.{master, slave}
3-
object FpgaDevice {
4-
val vendor = "xilinx"
5-
val A7 = "A7"
6-
val K7 = "K7"
7-
val V7="V7"
8-
val VU="VU"
9-
val KU="KU"
10-
val ZYNQ = "ZYNQ"
113

12-
}
13-
case class DataGenerateConfig(DATA_WIDTH: Int, PICTURE_NUM: Int, CHANNEL_WIDTH: Int, COMPUTE_CHANNEL_NUM: Int, FEATURE_WIDTH: Int, KERNEL_NUM :Int,FEATURE_RAM_ADDR_WIDTH:Int,device: Device){
4+
5+
case class DataGenerateConfig(DATA_WIDTH: Int, CHANNEL_WIDTH: Int, COMPUTE_CHANNEL_NUM: Int, FEATURE_WIDTH: Int, KERNEL_NUM: Int, FEATURE_RAM_ADDR_WIDTH: Int, ZERO_NUM: Int) {
6+
val PICTURE_NUM = 1
147
val STREAM_DATA_WIDTH = DATA_WIDTH * PICTURE_NUM * COMPUTE_CHANNEL_NUM
15-
val paddingConfig = PaddingConfig(DATA_WIDTH,PICTURE_NUM,CHANNEL_WIDTH,COMPUTE_CHANNEL_NUM,FEATURE_WIDTH)
16-
val featureGenerateConfig = FeatureGenerateConfig(DATA_WIDTH,PICTURE_NUM,CHANNEL_WIDTH,COMPUTE_CHANNEL_NUM,FEATURE_WIDTH,KERNEL_NUM,FEATURE_RAM_ADDR_WIDTH,device: Device)
8+
val paddingConfig = PaddingConfig(DATA_WIDTH, CHANNEL_WIDTH, COMPUTE_CHANNEL_NUM, FEATURE_WIDTH,ZERO_NUM)
9+
val featureGenerateConfig = FeatureGenerateConfig(DATA_WIDTH, CHANNEL_WIDTH, COMPUTE_CHANNEL_NUM, FEATURE_WIDTH, KERNEL_NUM, FEATURE_RAM_ADDR_WIDTH)
1710
}
11+
1812
class DataGenerate(dataGenerateConfig: DataGenerateConfig) extends Component {
19-
val io = new Bundle{
20-
val sData = slave Stream(Bits(dataGenerateConfig.STREAM_DATA_WIDTH bits))
13+
val io = new Bundle {
14+
val sData = slave Stream (Bits(dataGenerateConfig.STREAM_DATA_WIDTH bits))
2115
val start = in Bool()
2216
val enPadding = in Bool()
2317
val channelIn = in UInt (dataGenerateConfig.CHANNEL_WIDTH bits)
2418
val rowNumIn = in UInt (dataGenerateConfig.FEATURE_WIDTH bits)
19+
val colNumIn = in UInt(dataGenerateConfig.FEATURE_WIDTH bits)
2520
val zeroDara = in Bits (dataGenerateConfig.DATA_WIDTH bits)
2621
val zeroNum = in UInt (dataGenerateConfig.paddingConfig.ZERO_NUM_WIDTH bits)
27-
val mData = master(FeaturePort(dataGenerateConfig.STREAM_DATA_WIDTH, dataGenerateConfig.KERNEL_NUM))
22+
// val mData = master(FeaturePort(dataGenerateConfig.STREAM_DATA_WIDTH, dataGenerateConfig.KERNEL_NUM))
23+
val mData = Vec(master Stream Bits(dataGenerateConfig.STREAM_DATA_WIDTH bits), dataGenerateConfig.KERNEL_NUM)
24+
val last = out Bool()
2825
}
2926
noIoPrefix()
3027
val padding = new Padding(dataGenerateConfig.paddingConfig)
@@ -33,17 +30,18 @@ class DataGenerate(dataGenerateConfig: DataGenerateConfig) extends Component {
3330
padding.io.enPadding <> io.enPadding
3431
padding.io.channelIn <> io.channelIn
3532
padding.io.rowNumIn <> io.rowNumIn
33+
padding.io.colNumIn <> io.colNumIn
3634
padding.io.zeroNum <> io.zeroNum
3735
padding.io.zeroDara <> io.zeroDara
3836
val featureGenerate = new FeatureGenerate(dataGenerateConfig.featureGenerateConfig)
3937
featureGenerate.io.mData <> io.mData
4038
padding >> featureGenerate
39+
featureGenerate.io.last <> io.last
4140
}
42-
object DataGenerate{
41+
42+
object DataGenerate {
4343
def main(args: Array[String]): Unit = {
44-
val device = Device(vendor=FpgaDevice.vendor,family = FpgaDevice.K7)
4544
SpinalConfig(
46-
device = device
47-
).generateVerilog(new DataGenerate(DataGenerateConfig(8,1,12,8,10,9,11,device)))
45+
).generateVerilog(new DataGenerate(DataGenerateConfig(8, 12, 8, 10, 9, 11, 1)))
4846
}
4947
}

0 commit comments

Comments
 (0)