{"id":556,"date":"2015-03-08T21:44:49","date_gmt":"2015-03-09T02:44:49","guid":{"rendered":"http:\/\/mikesmods.com\/mm-wp\/?p=556"},"modified":"2016-09-21T22:55:04","modified_gmt":"2016-09-22T03:55:04","slug":"weekend-project-a-tiny-core-memory-array","status":"publish","type":"post","link":"http:\/\/mikesmods.com\/mm-wp\/?p=556","title":{"rendered":"Weekend Project: A Tiny Core Memory Array"},"content":{"rendered":"<p>Remember magnetic core memory?\u00a0 Maybe you don&#8217;t, if you weren&#8217;t around in the &#8217;50s or &#8217;60s (or aren&#8217;t a tech junkie like me).\u00a0 But it was one of the key developments during the evolution of the modern computer.\u00a0 At a time when large scale integration on silicon was just beginning and massive silicon memories were infeasible, core memory fulfilled a critical need for larger, faster memories for some of the early big-iron mainframes.<\/p>\n<p>Core memory is interesting because it&#8217;s one of the simpler memory constructs to understand, even today.\u00a0 The basis of the system is a humble ferrite ring (a &#8220;core&#8221;).\u00a0 The core material is formulated to exhibit high magnetic remanence &#8211; that is, it retains a magnetic field very well.\u00a0 By utilizing Amp\u00e8re&#8217;s law and passing a pulse of current through a wire threaded through the center of the core, a persistent magnetic field can be induced.\u00a0 Applying Faraday&#8217;s Law, it is then possible to &#8220;read out&#8221; the state of the core &#8211; if the core already has had a field induced within it, then passing another current pulse has no effect; otherwise, a slight voltage pulse is developed across any wires passing through it,, which can be measured.<\/p>\n<p>Expanding the scope a bit, it is possible to write to and read from a large quantity of cores if they are arranged on a two-dimensional grid.\u00a0 As a result of the particular magnetic properties of the cores, they only change state when a sufficiently large current is passed through them.\u00a0 This current can be split to any arbitrary number of wires; as long as the sum of the currents is above the minimum for the material, the field is induced.\u00a0 If we pass half the necessary current through one row of a two-dimensional array of cores, and half the necessary current through one column of the same array, we can affect only one chosen core in the array.\u00a0 An additional wire passing through all cores is typically used to detect the state of the chosen core.<\/p>\n<p>I have an ambitious design in mind which will get a more detailed post later, but suffice it to say for now that I&#8217;m planning a combination art and engineering project which needs a bank of memory.\u00a0 I could go the simple route and put a simple DIP SRAM in, but that&#8217;s no fun to look at.\u00a0 But I bought a little can of 50,000 memory cores a few years ago, and that seems like it might be a little more fun.\u00a0 That&#8217;s enough for a 4KB array, which ought to be enough for what I&#8217;m planning.\u00a0 But before I spend several weeks building a 32,000 core array, it&#8217;s important to understand how the assembly will work.\u00a0 To that end, I&#8217;ve planned a few baby-steps to build up to the real deal.<\/p>\n<p>I&#8217;ve designed a simple PCB with a large route-out in the center and an array of holes around the outside.\u00a0 The board is designed as a carrier for a small 8&#215;8 array of cores and their associated wiring.\u00a0 Because my application calls for byte-addressable memory, the eventual plan is to stack eight such boards to support parallel access of an entire byte, but at this point testing will begin with a single 64-bit array.<\/p>\n<div id=\"attachment_566\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-566\" class=\"size-medium wp-image-566\" alt=\"There's not much to it, really.\" src=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board-300x225.jpg 300w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board-1024x768.jpg 1024w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board-624x468.jpg 624w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024_REV_A_Board.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-566\" class=\"wp-caption-text\">The corner pads are isolated by 0402 0-ohm jumpers for flexibility in stacking and addressing boards.<\/p><\/div>\n<p>A core memory build is more like sewing than it is electrical assembly.\u00a0 Very thin thread-like wire is woven through the cores, and the end product resembles cloth.\u00a0 At the height of core memory usage there were many factories of very skilled workers who wove these memories day in and day out.\u00a0 In the process of building my tiny memory, I quickly found that there are assembly methods that work very well, but there are also methods that end up in immediate frustration.\u00a0 You quickly get into a groove, so while the first rows take a while, by the end the focus sets in and hours can pass in an instant as the board comes together.<\/p>\n<p>Speaking of first rows, let&#8217;s begin!\u00a0 First, we solder some stubs of 36AWG enamel wire to the board along two adjacent edges, then thread eight teeny-tiny cores onto each of the eight wires on one side of the board:<\/p>\n<p><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-568\" alt=\"CoreArray_CoresInstalled\" src=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled-300x225.jpg 300w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled-1024x768.jpg 1024w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled-624x468.jpg 624w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_CoresInstalled.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Now the wires are threaded through the pads on the other side of the board and pulled taut, then soldered into place, thereby trapping the cores:<\/p>\n<p><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-569\" alt=\"CoreArray_XWiresTaut\" src=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut-300x225.jpg 300w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut-1024x768.jpg 1024w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut-624x468.jpg 624w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XWiresTaut.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Before we continue, an explanation is necessary.\u00a0 There are a number of different ways to orient the cores.\u00a0 They can all be mounted parallel to each other, they can alternate by rows, they can alternate at every part.\u00a0 I chose to alternate at every part &#8211; this can reduce magnetic coupling between adjacent cores, and can enable the use of simpler read\/write hardware.\u00a0 It also looks pretty neat.\u00a0 So after a while, the array looks like this:<\/p>\n<p><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-570\" alt=\"CoreArray_XYWiresInstalled\" src=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled-300x225.jpg 300w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled-1024x768.jpg 1024w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled-624x468.jpg 624w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_XYWiresInstalled.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>Now that the main array wires are all installed, the sense wire must be threaded through all the cores.\u00a0 Each core must have the sense wire passed through it exactly once.\u00a0 With the cores in this arrangement, this is simplest to accomplish by passing the wires through the cores diagonally, first in one direction, then the other.\u00a0 That leaves us with an end product that looks something like this:<\/p>\n<p><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-571\" alt=\"CoreArray_Finished\" src=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished-300x225.jpg 300w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished-1024x768.jpg 1024w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished-624x468.jpg 624w, http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/CoreArray_Finished.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>And that&#8217;s the current state of things.\u00a0 The corner jumpers and connectors still need to be installed, but that will come when the interface hardware has been developed.\u00a0 There&#8217;s still plenty of work to do, so watch for followup post(s) later on.<\/p>\n<p>Schematics and Gerbers for this board will be posted&#8230; <del>as soon as I get around to it.<\/del> below:<\/p>\n<p><a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/PCB10024-REV-A-GERBERS.zip\">PCB10024 REV A GERBERS<\/a> (zip, 6KB)<br \/>\n<a href=\"http:\/\/mikesmods.com\/mm-wp\/wp-content\/uploads\/2015\/03\/SCH10024-REV-A.pdf\">SCH10024 REV A<\/a> (pdf, 18KB)<\/p>\n<p>Please note:\u00a0 The board has a large cut-out in the center.\u00a0 The first time I ordered these, OSH Park correctly routed to the edge of the definition line (as shown in the above photos).\u00a0 The second time, they routed on the center of the definition line, cutting into the ring of pads.\u00a0 The resulting boards are functional, just not as pretty.\u00a0 Watch out for that.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Remember magnetic core memory?\u00a0 Maybe you don&#8217;t, if you weren&#8217;t around in the &#8217;50s or &#8217;60s (or aren&#8217;t a tech junkie like me).\u00a0 But it was one of the key developments during the evolution of the modern computer.\u00a0 At a time when large scale integration on silicon was just beginning and massive silicon memories were [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/posts\/556"}],"collection":[{"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=556"}],"version-history":[{"count":10,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/posts\/556\/revisions"}],"predecessor-version":[{"id":619,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=\/wp\/v2\/posts\/556\/revisions\/619"}],"wp:attachment":[{"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=556"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mikesmods.com\/mm-wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}