1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00
myhdl/example/manual/shadow.py
2016-03-10 20:27:07 +01:00

58 lines
1.1 KiB
Python

import myhdl
from myhdl import *
from random import randrange
def arbiter(grant_vector, request_vector):
@always_comb
def logic():
grant_vector.next = 0
for i in range(len(request_vector)):
if request_vector[i] == 1:
grant_vector.next[i] = 1
break
return logic
def check():
M = 8
request_list = [Signal(bool()) for i in range(M)]
request_vector = ConcatSignal(*reversed(request_list))
grant_vector = Signal(intbv(0)[M:])
grant_list = [grant_vector(i) for i in range(M)]
arb = arbiter(grant_vector, request_vector)
@instance
def stimulus():
for i in range(100):
for j in range(M):
request_list[j].next = randrange(2)
yield delay(10)
if 1 in request_list:
assert grant_list.index(1) == request_list.index(1)
assert grant_list.count(0) == M-1
#print bin(grant_vector, 8), bin(request_vector, 8)
raise StopSimulation()
return arb, stimulus
sim = Simulation(check())
sim.run()