diff --git a/nmigen/hdl/rec.py b/nmigen/hdl/rec.py
index 999c85b..f1ddbd2 100644
--- a/nmigen/hdl/rec.py
+++ b/nmigen/hdl/rec.py
@@ -72,7 +72,7 @@ class Record(Value):
         def concat(a, b):
             if a is None:
                 return b
-            return "{}_{}".format(a, b)
+            return "{}__{}".format(a, b)
 
         self.layout = Layout.wrap(layout)
         self.fields = OrderedDict()

diff --git a/nmigen/test/test_hdl_rec.py b/nmigen/test/test_hdl_rec.py
index 3f68247..65e8bf6 100644
--- a/nmigen/test/test_hdl_rec.py
+++ b/nmigen/test/test_hdl_rec.py
@@ -65,11 +65,11 @@ class RecordTestCase(FHDLTestCase):
             ])
         ])
 
-        self.assertEqual(repr(r), "(rec r stb data (rec r_info a b))")
+        self.assertEqual(repr(r), "(rec r stb data (rec r__info a b))")
         self.assertEqual(len(r),  35)
         self.assertIsInstance(r.stb, Signal)
-        self.assertEqual(r.stb.name, "r_stb")
-        self.assertEqual(r["stb"].name, "r_stb")
+        self.assertEqual(r.stb.name, "r__stb")
+        self.assertEqual(r["stb"].name, "r__stb")
 
     def test_unnamed(self):
         r = [Record([

seperator of signal names in records causes ambiguity
When creating a `Record`, the signals inside it are named `recordname_fieldname` currently.

This makes it hard to see the hierarchy when using snake case names for records and fields as well. I.e. having a record named `some_record` with a field named `some_field` the resulting signal is called `some_record_some_field` which could also be the name of a signal in a nested record with depth 3. 

I propose to use another character for separation (for example `.`), which would lead to `some_record.some_field` in that case.

(see: https://github.com/m-labs/nmigen/blob/master/nmigen/hdl/rec.py#L75)
nmigen/test/test_hdl_rec.py::RecordTestCase::test_basic
nmigen/test/test_hdl_rec.py::LayoutTestCase::test_fields nmigen/test/test_hdl_rec.py::LayoutTestCase::test_wrong_direction nmigen/test/test_hdl_rec.py::LayoutTestCase::test_wrong_field nmigen/test/test_hdl_rec.py::LayoutTestCase::test_wrong_name nmigen/test/test_hdl_rec.py::LayoutTestCase::test_wrong_name_duplicate nmigen/test/test_hdl_rec.py::LayoutTestCase::test_wrong_shape nmigen/test/test_hdl_rec.py::RecordTestCase::test_unnamed nmigen/test/test_hdl_rec.py::RecordTestCase::test_wrong_field nmigen/test/test_hdl_rec.py::RecordTestCase::test_wrong_field_unnamed