-
Notifications
You must be signed in to change notification settings - Fork 9
/
soc_convgenTaps.lua
45 lines (39 loc) · 1.24 KB
/
soc_convgenTaps.lua
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
local R = require "rigel"
R.export()
local SOC = require "soc"
local harness = require "harnessSOC"
local RS = require "rigelSimple"
local C = require "examplescommon"
require "generators".export()
require "types".export()
local SDF = require "sdf"
local Zynq = require "zynq"
local ConvWidth = 4
local ConvRadius = ConvWidth/2
inSize = { 1920, 1080 }
padSize = { 1920+16, 1080+3 }
noc = Zynq.SimpleNOC():instantiate("ZynqNOC")
noc.extern=true
regs = SOC.axiRegs({
coeffs={ar(u(32),ConvWidth,ConvWidth),
{4, 14, 14, 4,
14, 32, 32, 14,
14, 32, 32, 14,
4, 14, 14, 4}}},SDF{1,padSize[1]*padSize[2]},noc.readSource,noc.readSink,noc.writeSource,noc.writeSink):instantiate("regs")
local conv = Module{ ar(u(8),ConvWidth,ConvWidth),
function(inp)
inp = Map{AddMSBs{24}}(inp)
local z = Zip(inp,regs.coeffs())
local out = Map{Mul}(z)
local res = Reduce{Add}(out)
return RemoveMSBs{24}(Rshift{8}(res))
end}
harness({
regs.start,
SOC.readBurst("1080p.raw",1920,1080,u(8),1,nil,nil,noc.read),
HS{Pad{inSize,1,{8,8,2,1}}},
HS{Linebuffer{padSize,1,{3,0,3,0}}},
HS{Map{conv}},
HS{CropSeq{padSize,1,{9,7,3,0}}},
SOC.writeBurst("out/soc_convgenTaps",1920,1080,u(8),1,nil,noc.write),
regs.done},nil,{regs})