Skip to content

Commit f1ec45e

Browse files
committed
TmpReg, TmpWire, and etc are implemented: signal definition without a specific name
1 parent c0e4e68 commit f1ec45e

File tree

6 files changed

+159
-0
lines changed

6 files changed

+159
-0
lines changed

sample/tests/noname/Makefile

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
TARGET=led.py
2+
TEST=test_led.py
3+
ARGS=
4+
5+
PYTHON=python3
6+
#PYTHON=python
7+
#OPT=-m pdb
8+
#OPT=-m cProfile -s time
9+
#OPT=-m cProfile -o profile.rslt
10+
11+
.PHONY: all
12+
all: test
13+
14+
.PHONY: run
15+
run:
16+
$(PYTHON) $(OPT) $(TARGET) $(ARGS)
17+
18+
.PHONY: test
19+
test:
20+
$(PYTHON) -m pytest -vv $(TEST)
21+
22+
.PHONY: check
23+
check:
24+
$(PYTHON) $(OPT) $(TARGET) $(ARGS) > tmp.v
25+
iverilog -tnull -Wall tmp.v
26+
rm -f tmp.v
27+
28+
.PHONY: clean
29+
clean:
30+
rm -rf *.pyc __pycache__ parsetab.py *.out

sample/tests/noname/led.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import sys
2+
import os
3+
from veriloggen import *
4+
5+
def mkLed():
6+
m = Module('blinkled')
7+
width = m.Parameter('WIDTH', 8)
8+
clk = m.Input('CLK')
9+
rst = m.Input('RST')
10+
led = m.OutputReg('LED', width)
11+
count = m.TmpReg(32)
12+
13+
for i in range(3):
14+
m.TmpReg(32)
15+
m.TmpWire(32)
16+
17+
m.Always(Posedge(clk))(
18+
If(rst)(
19+
count(0)
20+
).Else(
21+
If(count == 1023)(
22+
count(0)
23+
).Else(
24+
count(count + 1)
25+
)
26+
))
27+
28+
m.Always(Posedge(clk))(
29+
If(rst)(
30+
led(0)
31+
).Else(
32+
If(count == 1024 - 1)(
33+
led(led + 1)
34+
)
35+
))
36+
37+
return m
38+
39+
if __name__ == '__main__':
40+
led = mkLed()
41+
verilog = led.to_verilog()
42+
print(verilog)

sample/tests/noname/test_led.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import led
2+
3+
expected_verilog = """
4+
module blinkled #
5+
(
6+
parameter WIDTH = 8
7+
)
8+
(
9+
input CLK,
10+
input RST,
11+
output reg [WIDTH-1:0] LED
12+
);
13+
reg [32-1:0] tmp_0;
14+
reg [32-1:0] tmp_1;
15+
wire [32-1:0] tmp_2;
16+
reg [32-1:0] tmp_3;
17+
wire [32-1:0] tmp_4;
18+
reg [32-1:0] tmp_5;
19+
wire [32-1:0] tmp_6;
20+
always @(posedge CLK) begin
21+
if(RST) begin
22+
tmp_0 <= 0;
23+
end else begin
24+
if(tmp_0 == 1023) begin
25+
tmp_0 <= 0;
26+
end else begin
27+
tmp_0 <= tmp_0 + 1;
28+
end
29+
end
30+
end
31+
always @(posedge CLK) begin
32+
if(RST) begin
33+
LED <= 0;
34+
end else begin
35+
if(tmp_0 == 1023) begin
36+
LED <= LED + 1;
37+
end
38+
end
39+
end
40+
endmodule
41+
"""
42+
43+
def test_led():
44+
led_module = led.mkLed()
45+
led_code = led_module.to_verilog()
46+
47+
from pyverilog.vparser.parser import VerilogParser
48+
from pyverilog.ast_code_generator.codegen import ASTCodeGenerator
49+
parser = VerilogParser()
50+
expected_ast = parser.parse(expected_verilog)
51+
codegen = ASTCodeGenerator()
52+
expected_code = codegen.visit(expected_ast)
53+
54+
assert(expected_code == led_code)

sample/tests/noname/veriloggen

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../veriloggen

veriloggen/lib/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
## Please add import notations here for additional library
1515
from bundle import Bundle
1616
from fsm import FSM
17+
from pipeline import Pipeline
1718
import simulation
1819

veriloggen/module.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def __init__(self, name=None):
2828
self.submodule = collections.OrderedDict()
2929
self.generate = collections.OrderedDict()
3030
self.items = []
31+
self.tmp_count = 0
3132

3233
#---------------------------------------------------------------------------
3334
def Input(self, name, width=None, length=None, signed=False, value=None):
@@ -63,30 +64,55 @@ def Wire(self, name, width=None, length=None, signed=False, value=None):
6364
self.items.append(t)
6465
return t
6566

67+
def TmpWire(self, width=None, length=None, signed=False, value=None):
68+
name = '_'.join(['tmp', str(self.tmp_count)])
69+
self.tmp_count += 1
70+
return self.Wire(name, width, length, signed, value)
71+
6672
def Reg(self, name, width=None, length=None, signed=False, value=None, initval=None):
6773
t = vtypes.Reg(name, width, length, signed, value, initval)
6874
self.variable[name] = t
6975
self.items.append(t)
7076
return t
7177

78+
def TmpReg(self, width=None, length=None, signed=False, value=None, initval=None):
79+
name = '_'.join(['tmp', str(self.tmp_count)])
80+
self.tmp_count += 1
81+
return self.Reg(name, width, length, signed, value, initval)
82+
7283
def Integer(self, name, width=None, length=None, signed=False, value=None, initval=None):
7384
t = vtypes.Integer(name, width, length, signed, value, initval)
7485
self.variable[name] = t
7586
self.items.append(t)
7687
return t
7788

89+
def TmpInteger(self, width=None, length=None, signed=False, value=None, initval=None):
90+
name = '_'.join(['tmp', str(self.tmp_count)])
91+
self.tmp_count += 1
92+
return self.Integer(name, width, length, signed, value, initval)
93+
7894
def Real(self, name, width=None, length=None, signed=False, value=None, initval=None):
7995
t = vtypes.Real(name, width, length, signed, value, initval)
8096
self.variable[name] = t
8197
self.items.append(t)
8298
return t
8399

100+
def TmpReal(self, width=None, length=None, signed=False, value=None, initval=None):
101+
name = '_'.join(['tmp', str(self.tmp_count)])
102+
self.tmp_count += 1
103+
return self.Real(name, width, length, signed, value, initval)
104+
84105
def Genvar(self, name, width=None, length=None, signed=False, value=None):
85106
t = vtypes.Genvar(name, width, length, signed, value)
86107
self.variable[name] = t
87108
self.items.append(t)
88109
return t
89110

111+
def TmpGenvar(self, width=None, length=None, signed=False, value=None):
112+
name = '_'.join(['tmp', str(self.tmp_count)])
113+
self.tmp_count += 1
114+
return self.Genvar(name, width, length, signed, value)
115+
90116
def Parameter(self, name, value, width=None, signed=False, length=None):
91117
t = vtypes.Parameter(name, value, width, signed)
92118
self.global_constant[name] = t
@@ -99,6 +125,11 @@ def Localparam(self, name, value, width=None, signed=False, length=None):
99125
self.items.append(t)
100126
return t
101127

128+
def TmpLocalparam(self, value, width=None, signed=False, length=None):
129+
name = '_'.join(['tmp', str(self.tmp_count)])
130+
self.tmp_count += 1
131+
return self.Localparam(name, value, width, signed, length)
132+
102133
#---------------------------------------------------------------------------
103134
def Always(self, *sensitivity):
104135
t = vtypes.Always(*sensitivity)

0 commit comments

Comments
 (0)