Skip to content

Commit 8e8f52d

Browse files
committed
task statement is implemented but not tested
1 parent a9d3dc5 commit 8e8f52d

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

sample/test/function/led.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
# external function definition
77
def get_ext():
8-
ext = Function('ext', 32)
8+
ext = Function('ext_inc', 32)
99
ext_v = ext.Input('v', 32)
1010
ext_o = ext.Input('o', 32)
1111
ext_tmp = ext.Reg('tmp', 32)
1212
ext.Body(
13-
ext_tmp(ext_v + 1),
13+
ext_tmp(ext_v + ext_o),
1414
ext(ext_tmp)
1515
)
1616
return ext
@@ -28,7 +28,7 @@ def mkLed():
2828
inc_o = inc.Input('o', width)
2929
inc_tmp = inc.Reg('tmp', width)
3030
inc.Body(
31-
inc_tmp(inc_v + 1),
31+
inc_tmp(inc_v + inc_o),
3232
inc(inc_tmp)
3333
)
3434

@@ -42,7 +42,8 @@ def mkLed():
4242
If(count == 1023)(
4343
count(0)
4444
).Else(
45-
count( inc.call(count, 1) )
45+
count( FunctionCall(inc.name, count, 1) )
46+
#count( inc.call(count, 1) )
4647
)
4748
))
4849

sample/test/function/test_led.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@
1717
input [WIDTH-1:0] o;
1818
reg [WIDTH-1:0] tmp;
1919
begin
20-
tmp = v + 1;
20+
tmp = v + o;
2121
inc = tmp;
2222
end
2323
endfunction
2424
25-
function [32-1:0] ext;
25+
function [32-1:0] ext_inc;
2626
input [32-1:0] v;
2727
input [32-1:0] o;
2828
reg [32-1:0] tmp;
2929
begin
30-
tmp = v + 1;
31-
ext = tmp;
30+
tmp = v + o;
31+
ext_inc = tmp;
3232
end
3333
endfunction
3434

veriloggen/task.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import os
2+
import sys
3+
import collections
4+
5+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
6+
7+
import vtypes
8+
9+
class Task(vtypes.VeriloggenNode):
10+
def __init__(self, name, width=1):
11+
self.name = name
12+
self.width = width
13+
self.io_variable = collections.OrderedDict()
14+
self.variable = collections.OrderedDict()
15+
self.statement = None
16+
17+
#---------------------------------------------------------------------------
18+
def Input(self, name, width=None, length=None, signed=False, value=None):
19+
t = vtypes.Input(name, width, length, signed, value)
20+
self.io_variable[name] = t
21+
return t
22+
23+
def Reg(self, name, width=None, length=None, signed=False, value=None):
24+
t = vtypes.Reg(name, width, length, signed, value)
25+
self.variable[name] = t
26+
return t
27+
28+
def Integer(self, name, width=None, length=None, signed=False, value=None):
29+
t = vtypes.Integer(name, width, length, signed, value)
30+
self.variable[name] = t
31+
return t
32+
33+
def Body(self, *statement):
34+
if self.statement is not None:
35+
raise ValueError("Statement is already assigned.")
36+
self.statement = tuple(statement)
37+
return self
38+
39+
def call(self, *args):
40+
return TaskCall(self.name, *args)
41+
42+
class TaskCall(vtypes.VeriloggenNode):
43+
def __init__(self, name, *args):
44+
self.name = name
45+
self.args = tuple(args)

0 commit comments

Comments
 (0)