1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00
myhdl/example/rs232/test_rs232.py
2005-12-27 14:45:38 +00:00

147 lines
4.0 KiB
Python

import sys
from random import randrange
import unittest
from unittest import TestCase
from rs232_rx import rs232_rx
from myhdl import Simulation, Signal, intbv, join
from rs232_tx import rs232_tx
from rs232_util import Config, EVEN, ODD, ParityError, Error
class rs232Test(TestCase):
""" rs232 functional unit test """
def default(self):
tx = Signal(intbv(0))
rx = tx
actual = intbv(0)
cfg = Config()
for i in range(256):
data = intbv(i)
yield join(rs232_tx(tx, data, cfg), rs232_rx(rx, actual, cfg))
self.assertEqual(data, actual)
def testDefault(self):
""" Check default case """
Simulation(self.default()).run(quiet=1)
def oddParity(self):
tx = Signal(intbv(0))
rx = tx
actual = intbv(0)
cfg = Config(parity=ODD)
for i in range(256):
data = intbv(i)
yield join(rs232_tx(tx, data, cfg), rs232_rx(rx, actual, cfg))
self.assertEqual(data, actual)
def testOddParity(self):
""" Check odd parity """
Simulation(self.oddParity()).run(quiet=1)
def sevenBitsEvenParity(self):
tx = Signal(intbv(0))
rx = tx
actual = intbv(0)
cfg = Config(parity=EVEN, n_bits=7)
cfg_rx = Config(parity=EVEN, n_bits=7)
for i in range(256):
data = intbv(i)
yield join(rs232_tx(tx, data, cfg), rs232_rx(rx, actual, cfg_rx))
self.assertEqual(data, actual)
def testSevenBitsEvenParity(self):
""" Check 7 bits with even parity """
Simulation(self.sevenBitsEvenParity()).run(quiet=1)
def ParityError(self):
tx = Signal(intbv(0))
rx = tx
actual = intbv(0)
cfg_rx = Config(parity=ODD)
cfg_tx = Config(parity=EVEN)
data = intbv(randrange(256))
yield join(rs232_tx(tx, data, cfg_tx), rs232_rx(rx, actual, cfg_rx))
def testParityError(self):
""" Expect a parity error """
try:
Simulation(self.ParityError()).run(quiet=1)
except ParityError:
pass
else:
self.fail("Expected parity error")
class rs232Characterize(TestCase):
""" rs232 baud rate characterization test """
def bench(self, tx_baud_rate):
tx = Signal(intbv(0))
rx = tx
actual = intbv(0)
cfg_tx = Config(baud_rate=tx_baud_rate)
cfg_rx = Config()
for i in range(256):
data = intbv(i)
yield join(rs232_tx(tx, data, cfg_tx), rs232_rx(rx, actual, cfg_rx))
if not data == actual:
raise Error
def testCharacterize(self):
""" Find min/max tx baud rate tolerance by simulation """
coarseOffset = 100
fineOffset = 5
tx_baud_rate = 9600
try:
while 1:
tx_baud_rate += coarseOffset
Simulation(self.bench(tx_baud_rate)).run(quiet=1)
except Error:
pass
while 1:
try:
tx_baud_rate -= fineOffset
Simulation(self.bench(tx_baud_rate)).run(quiet=1)
except Error:
continue
else:
print "Max tx baudrate: %s" % tx_baud_rate
break
tx_baud_rate = 9600
try:
while 1:
tx_baud_rate -= coarseOffset
Simulation(self.bench(tx_baud_rate)).run(quiet=1)
except Error:
pass
while 1:
try:
tx_baud_rate += fineOffset
Simulation(self.bench(tx_baud_rate)).run(quiet=1)
except Error:
continue
else:
print "Min tx baudrate: %s" % tx_baud_rate
break
if __name__ == "__main__":
testRunner = unittest.TextTestRunner(verbosity=2)
unittest.main(testRunner=testRunner)