2 # -*- coding: utf-8 -*-
4 =======================================
6 ---------------------------------------
7 Author: Rodrigo Peixoto
9 ---------------------------------------
11 - This moludes contains the basics
13 =======================================
15 from random
import randrange
21 class VerilogModule(object):
22 def __init__(self
, module_name
=""):
23 self
.name
=module_name
#It must respect the regexp [a-zA-Z]\w*
24 self
.in_ports
=[] #Can be a bit (a) or vector ex.: (a,(7,0))
25 self
.out_ports
=[] #Can be a bit (a) or vector ex.: (a,(7,0))
26 self
.time_slice
=() #Must be ((division, unit) ,(precision, unit))
27 self
.in_ports_behavior
=[]
28 self
.out_ports_behavior
=[]
29 self
.out_ports_dep
= {}
31 self
.ref_functions
= {}
32 self
.random_alloc
= {} # 'sig_name': ([R1,R2,R3,...,R2], n)signal name list that contains RA
34 def set_in_ports_behavior(self
, behav
):
35 self
.in_ports_behavior
=behav
37 def get_port_behav(self
, name
):
39 for i
in self
.in_ports_behavior
+self
.out_ports_behavior
:
40 if i
.name
== name
: ret
= i
;break
43 def set_out_ports_behavior(self
, behav
):
44 self
.out_ports_behavior
=behav
46 def alloc_random_values():
49 def gen_random_values(self
):
50 regexp
= re
.compile("R\d+")
51 for beh
in self
.in_ports_behavior
:
52 for val
in beh
.content
:
55 ri
,ro
= self
.ran_range
[val
]
56 #TODO: Verificar o [2:-1] da linha abaixo
57 beh
.content
[beh
.content
.index(val
)] = hex(randrange(ri
,ro
))[2:].replace("L","")
60 print "!Error: The random range to %s value is not defined in vut file!" % val
63 print "!Error: Check the random range to %s value it is wrong!" % val
65 print self
.in_ports_behavior
67 def resolve_reference_functions(self
):
68 for kref
in self
.ref_functions
:
69 params
= self
.out_ports_dep
[kref
]
70 reff
= self
.ref_functions
[kref
]
76 mem
.append(self
.get_port_behav(i
))
79 tmp
.append(str([int(m
,16) for m
in x
.content
]))
81 exec "aux = zip(%s)" % ",".join(tmp
)
85 exec "res = reff%s" % str(y
)
87 result
= [hex(x
)[2:].replace("L","") for x
in out
]
89 tmp
= self
.out_ports_behavior
[self
.out_ports_behavior
.index(self
.get_port_behav(kref
))].content
92 tmp
+=result
[(len(tmp
)):]
99 return "============================\nModule: %s\n----------------------------\nIn_ports: %s\
100 \nOut_ports: %s\n============================" % (self
.name
, self
.in_ports
, self
.out_ports
)
103 class MemoryIO(object):
104 def __init__(self
, pname
="", pcontent
=[]):
106 self
.content
= pcontent
108 def get_content(self
):
112 return "Memory name: %s || Content: %s\n" % (self
.name
, self
.content
)
118 @The skeleton was generated by VUTGenerator@
119 =======================================
120 module_name: %(module_name)s
121 ---------------------------------------
124 ---------------------------------------
125 Description: <description>
126 =======================================
129 module %(module_name)s(%(ports)s);
163 $dumpfile ("waveform.vcd");
175 if (k >= %(memlen)s) begin
176 $display("|VUT_OK| > All the signals are right-right!\\n\\n By Rodrigo Peixoto\\n");
179 else #%(delay)s -> send;
191 """ if (%(port)s !== tmp_%(port)s) begin
192 $display("|VUT_FAIL|> Error in %(port)s value at time %%0dns!!!",$time);