mirror of
https://github.com/myhdl/myhdl.git
synced 2025-01-24 21:52:56 +08:00
a test for issue #44
This commit is contained in:
parent
f2c5068dd9
commit
ed18120486
82
myhdl/test/bugs/test_github_issue_44.py
Normal file
82
myhdl/test/bugs/test_github_issue_44.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
from myhdl import *
|
||||||
|
from myhdl.conversion import verify
|
||||||
|
|
||||||
|
def m_int_case(clock, reset, x, y):
|
||||||
|
|
||||||
|
@always_seq(clock.posedge, reset=reset)
|
||||||
|
def rtl():
|
||||||
|
z = (x >> 16) & 0x3
|
||||||
|
if z == 0:
|
||||||
|
y.next = y + 0xDECAFBAD
|
||||||
|
elif z == 1:
|
||||||
|
y.next = x + 0xC0FFEE
|
||||||
|
elif z == 2:
|
||||||
|
y.next = y + 2
|
||||||
|
else:
|
||||||
|
y.next = 299792458
|
||||||
|
|
||||||
|
return rtl
|
||||||
|
|
||||||
|
|
||||||
|
def c_testbench():
|
||||||
|
""" convertible testbench """
|
||||||
|
clock = Signal(bool(0))
|
||||||
|
reset = ResetSignal(0, active=0, async=False)
|
||||||
|
x = Signal(intbv(0, min=0, max=444356))
|
||||||
|
y = Signal(intbv(0)[32:])
|
||||||
|
|
||||||
|
tbdut = m_int_case(clock, reset, x, y)
|
||||||
|
|
||||||
|
@instance
|
||||||
|
def tbclk():
|
||||||
|
clock.next = False
|
||||||
|
while True:
|
||||||
|
yield delay(3)
|
||||||
|
clock.next = not clock
|
||||||
|
|
||||||
|
@instance
|
||||||
|
def tbstim():
|
||||||
|
reset.next = reset.active
|
||||||
|
yield delay(11)
|
||||||
|
reset.next = not reset.active
|
||||||
|
|
||||||
|
# this is a converion issue, test a couple cases to
|
||||||
|
# make sure the module is accurate
|
||||||
|
|
||||||
|
# value after reset
|
||||||
|
yield clock.posedge
|
||||||
|
assert y == 0
|
||||||
|
x.next = 0x17777
|
||||||
|
|
||||||
|
yield clock.posedge
|
||||||
|
assert y == 0xDECAFBAD
|
||||||
|
x.next = 0x20000
|
||||||
|
|
||||||
|
yield clock.posedge
|
||||||
|
assert y == (0x17777 + 0xC0FFEE)
|
||||||
|
yc = int(y)
|
||||||
|
x.next = 0x39999
|
||||||
|
|
||||||
|
yield clock.posedge
|
||||||
|
assert y == (yc + 2)
|
||||||
|
|
||||||
|
yield clock.posedge
|
||||||
|
assert y == 299792458
|
||||||
|
|
||||||
|
raise StopSimulation
|
||||||
|
|
||||||
|
return tbdut, tbclk, tbstim
|
||||||
|
|
||||||
|
|
||||||
|
def test_github_issue_44_sim():
|
||||||
|
Simulation(c_testbench()).run()
|
||||||
|
|
||||||
|
def test_github_issue_44():
|
||||||
|
assert verify(c_testbench) == 0
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test_github_issue_44_sim()
|
Loading…
x
Reference in New Issue
Block a user