2 # -*- coding: utf-8 -*-
4 =======================================
6 ---------------------------------------
7 Author: Rodrigo Peixoto
9 ---------------------------------------
11 - This moludes contains the basics
13 =======================================
15 from random
import randrange
20 class VerilogModule(object):
21 def __init__(self
, module_name
=""):
22 self
.name
=module_name
#It must respect the regexp [a-zA-Z]\w*
23 self
.in_ports
=[] #Can be a bit (a) or vector ex.: (a,(7,0))
24 self
.out_ports
=[] #Can be a bit (a) or vector ex.: (a,(7,0))
25 self
.time_slice
=() #Must be ((division, unit) ,(precision, unit))
26 self
.in_ports_behavior
=[]
27 self
.out_ports_behavior
=[]
29 self
.ref_functions
= {}
31 def set_in_ports_behavior(self
, behav
):
32 self
.in_ports_behavior
=behav
34 def set_out_ports_behavior(self
, behav
):
35 self
.out_ports_behavior
=behav
37 def gen_random_values(self
):
38 regexp
= re
.compile("R\d+")
39 for beh
in self
.in_ports_behavior
:
40 for val
in beh
.content
:
43 ri
,ro
= self
.ran_range
[val
]
44 beh
.content
[beh
.content
.index(val
)] = hex(randrange(ri
,ro
))[2:]
47 print "!Error: The random range to %s value is not defined in vut file!" % val
48 print self
.in_ports_behavior
50 def resolve_reference_functions(self
):
51 for kref
in self
.ref_functions
:
52 print self
.ref_functions
[kref
]
55 return "============================\nModule: %s\n----------------------------\nIn_ports: %s\
56 \nOut_ports: %s\n============================" % (self
.name
, self
.in_ports
, self
.out_ports
)
59 class MemoryIO(object):
60 def __init__(self
, pname
="", pcontent
=[]):
62 self
.content
= pcontent
64 def get_content(self
):
68 return "Memory name: %s || Content: %s\n" % (self
.name
, self
.content
)
74 @The skeleton was generated by VUTGenerator@
75 =======================================
76 module_name: %(module_name)s
77 ---------------------------------------
80 ---------------------------------------
81 Description: <description>
82 =======================================
85 module %(module_name)s(%(ports)s);
119 $dumpfile ("waveform.vcd");
131 if (k >= %(memlen)s) begin
132 $display("|VUT_OK| > All the signals are right-right!\\n\\n By Rodrigo Peixoto\\n");
135 else #%(delay)s -> send;
147 """ if (%(port)s !== tmp_%(port)s) begin
148 $display("|VUT_FAIL|> Error in %(port)s value at time %%0dns!!!",$time);