{"id":458,"date":"2018-11-11T19:30:22","date_gmt":"2018-11-11T19:30:22","guid":{"rendered":"https:\/\/justanotherelectronicsblog.com\/?p=458"},"modified":"2018-11-11T19:30:22","modified_gmt":"2018-11-11T19:30:22","slug":"using-gals-in-the-21st-century","status":"publish","type":"post","link":"https:\/\/justanotherelectronicsblog.com\/?p=458","title":{"rendered":"Using GAls in the 21st century"},"content":{"rendered":"<p>A long time ago, 7400 logic was all that was available, but having only 7400 logic means designs can get big and difficult, but making a custom logic IC was expensive and hardly a possibility. A few companies started making programmable logic devices like the Programmable Logic Array (PLA) and Programmable Array Logic (PAL). These devices started being available in the 1970&#8217;s and where generally one time programmable devices, with the capability to contain a handful of simple logic. Much later, in 1985, the Generic Array Logic (GAL) came into existence, a reprogrammable version of the PAL. Later on the CPLD&#8217;s and FPGA&#8217;s came and are still used today.When reading about this I discovered there are still GAL&#8217;s made and sold, and getting old ones from Ebay is easy enough. They looked like weird odd devices, so I decided to have a closer look, eventually making a dual BCD to 7 segment decoder with them that even handled multiplexing.<\/p>\n<p><a href=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-461\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg\" alt=\"\" width=\"1024\" height=\"435\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-300x128.jpg 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-768x326.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h3><!--more--><\/h3>\n<h3>What&#8217;s inside a GAL<\/h3>\n<p>The GAL I ordered is the GAL22V10. The chip number directly says something about it, 22V10 means it has 22 IO&#8217;s from which 10 can be used as an output. The 16V8 for example has 16 IO&#8217;s from which 8 can be used as output. The GAL22V10 even has it&#8217;s own <a href=\"https:\/\/en.wikipedia.org\/wiki\/GAL22V10\">Wikipedia page.<\/a> Inside this device is an array of fuses, that can be used for OR\/AND type logic and for every output there is a flip flop block for clocked logic. A section for a single IO looks like this:<br \/>\n<a href=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-462\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117-1024x384.png\" alt=\"\" width=\"1024\" height=\"384\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117-1024x384.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117-300x113.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117-768x288.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/Selection_117.png 1452w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><br \/>\nThe datasheet of the device can be found <a href=\"http:\/\/web.mit.edu\/6.115\/www\/document\/gal22v10.pdf\">here.<\/a> With just a handful of flip-flops and logic, the GAL can&#8217;t fit big designs, but plenty of glue logic can be made with these and one GAL could replace a number of 7400 series logic. By now an CPLD or such is a much better choice, but for the 1980s it made sense.<\/p>\n<h3>Tools for programming GAL&#8217;s<\/h3>\n<p>After having a look, it seems that most tools to program logic into a GAL are about as old as the GAL&#8217;s themselves. To program a GAL a fuse map needs to be generated. This can be done by hand but some form of higher level method would be much much nicer. I found the <a href=\"https:\/\/github.com\/daveho\/GALasm\">GALasm<\/a> tool, which seems to be a great option. It turns a readable file into a fuse map and it comes with a few examples. A bit of example code, with explanation included:<\/p>\n<pre class=\"lang:default decode:true\">GAL16V8    ; 4-Bit-Counter  first line : used GAL\r\nGAL16V8               first line : used type of GAL\r\nBsp.1                 second line: any text (max. 8 character)\r\n\r\nB  C   D   E   F  G  H  I  J  GND\r\nK  NC  NC  NC  Z  Y  X  W  A  VCC\t \r\n\r\n W = A * B * C\r\n\/X = D * E\r\n Y = F + G\r\n Z = H * I + J * K\r\n\r\n\r\nDESCRIPTION:\r\n\r\nformat of the boolean equations:\r\n\r\n  output pin = boolean function of input and output pins\r\n\r\n  in this mode is no feedback of output pins allowed, this means that a output\r\n  pin can not be a function of output pins again\r\n\r\n \r\n *: AND\r\n +: OR\r\n \/: NEGATION\r\n\r\n Example: Pin Y is HIGH if pin F OR pin G is HIGH, else Y will be LOW.\r\n\r\n\t  Y = F + G\r\n\r\n\r\n<\/pre>\n<p>In the <a href=\"https:\/\/github.com\/daveho\/GALasm\">github<\/a> page of GALasm a lot of documentation is included in the GALer folder. This combined with the examples gives a good explanation on how it works.<\/p>\n<p>For me, downloading GALasm and a &#8220;make&#8221; command in the src folder compiled everything without any problem. GALasm is a command line tool, executing .\/GALasm -h gives a quick how to.<\/p>\n<p>For programming, the popular TL866II Plus works great, it now also supports the ATF22V10 and ATF16V8 devices that are still being made. When I started working on this, the ATF GAL&#8217;s from Atmel where not supported, but recently the new software now also supports these. Make sure to get the TL866II Plus and not the TL866A as that one does not support those devices. Sadly there is no Linux software currently available, so I use a virtual machine for this.<\/p>\n<p><a href=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-464\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog3.jpg\" alt=\"\" width=\"1023\" height=\"560\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog3.jpg 1023w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog3-300x164.jpg 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog3-768x420.jpg 768w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/a><\/p>\n<h3>Designing a 7 segment decoder<\/h3>\n<p>A BCD to 7 segment decoder seemed like a good challenge for getting started using GAL&#8217;s. There are plenty of truth tables online for such an application, like the following:<br \/>\n<a href=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-465\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4-1024x640.jpg\" alt=\"\" width=\"1024\" height=\"640\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4-1024x640.jpg 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4-300x188.jpg 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4-768x480.jpg 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog4.jpg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><br \/>\nBut what I need is an equation when a segment must be high, for each segment. A quick look at the truth table made it clean that an equation for each segment when it is low is probably a lot easier. For example, the c segment is low when the input is 0010, else it is high. The equation for this for the GAL is as follows:<\/p>\n<pre class=\"lang:default decode:true\">\/QC =     \/D1 * \/C1 * B1 * \/A1<\/pre>\n<p>Output QC is low when D1 is low AND C1 is low AND B1 is high AND A1 is low. Perfect. The a segment is a bit more complicated, it is low when the input is 0001 and when it is 0100. The equation is:<\/p>\n<pre class=\"lang:default decode:true\">\/QA =     \/D1 * \/C1 * \/B1 * A1\r\n        + \/D1 * C1 * \/B1 * \/A1<\/pre>\n<p>When the input is 0001 OR when it is 0100, the output is low. After some trial and error, the complete GAL code is as follows:<\/p>\n<pre class=\"lang:default decode:true \">GAL22V10\r\n7SEGMENT\r\n\r\nClock   D1   C1   B1   A1    D2   C2    B2    A2    NC  NC   GND\r\n\/OE   NC    NC  NC  QG    QF    QE    QD   QC    QB   QA   VCC\r\n\r\n\r\n\/QA =     \/D1 * \/C1 * \/B1 * A1\r\n        + \/D1 * C1 * \/B1 * \/A1\r\n\r\n\/QB=      \/D1 * C1 * \/B1 * A1\r\n        + \/D1 * C1 * B1 * \/A1\r\n\r\n\/QC =     \/D1 * \/C1 * B1 * \/A1\r\n     \r\n\r\n\/QD=      \/D1 * \/C1* \/B1 * A1\r\n        + \/D1 * C1 * \/B1 * \/A1\r\n        + \/D1 * C1 * B1 * A1\r\n        \r\n\/QE =     \/D1 * \/C1 * \/B1 * A1   \r\n        + \/D1 * \/C1 * B1 * A1\r\n        + \/D1 * C1 * \/B1 * \/A1\r\n        + \/D1 * C1 * \/B1 * A1\r\n        + \/D1 * C1 * B1 * A1\r\n        + D1 * \/C1 * \/B1 * A1\r\n        \r\n\/QF =     \/D1 * \/C1 * \/B1 * A1\r\n        + \/D1 * \/C1 * B1 * \/A1\r\n        + \/D1 * \/C1 * B1 * A1\r\n        + \/D1 * C1 * B1 * A1\r\n        \r\n\/QG =     \/D1 * \/C1 * \/B1 * \/A1\r\n        + \/D1 * \/C1 * \/B1 * A1\r\n        + \/D1 * C1 * B1 * A1\r\n\r\nDESCRIPTION\r\nA 7 segment decoder<\/pre>\n<p>Assembling it with GALasm and some breadboarding later, it works perfectly.<\/p>\n<h3>Multiplexing fun<\/h3>\n<p>Of course, a BCD to 7 segment decoder is readily available in the 7400 series. Time to make something a bit more interesting, a BCD to dual 7 segment decoder. I have a few dual 7 segment displays laying around. These displays have 10 pins, 8 for the 7 segments + the dot and 2 to select which segment is on. This means multiplexing is needed. Time to see if the old GAL is up for the task.<\/p>\n<p>To add multiplexing, I used the clock signal to decide which segment is lit. When the clock is low, one segment is lit, when high, the other segment is lit. The code above for the a segment output turned into this:<\/p>\n<pre class=\"lang:default decode:true\">\/QA =     \/D1 * \/C1 * \/B1 * A1 * Clock\r\n        + \/D1 * C1 * \/B1 * \/A1 * Clock\r\n        + \/D2 * \/C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * \/B2 * \/A2 * \/Clock<\/pre>\n<p>When the clock is high, the same happens as before. But when the clock is low, the second BCD input lines (A2 to D2) are used instead. This needs to be done for all the segments, making the complete code quite a bit bigger:<\/p>\n<pre class=\"lang:default decode:true \">GAL22V10\r\nFERIXFOX\r\n\r\nClock   D1   C1   B1   A1    D2   C2    B2    A2    NC  NC   GND\r\n\/OE   SEG1    SEG2  NC  QG    QF    QE    QD   QC    QB   QA   VCC\r\n\r\n\r\n\/QA =     \/D1 * \/C1 * \/B1 * A1 * Clock\r\n        + \/D1 * C1 * \/B1 * \/A1 * Clock\r\n        + \/D2 * \/C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * \/B2 * \/A2 * \/Clock\r\n\r\n\/QB=      \/D1 * C1 * \/B1 * A1 * Clock\r\n        + \/D1 * C1 * B1 * \/A1 * Clock\r\n        + \/D2 * C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * B2 * \/A2 * \/Clock\r\n\r\n\/QC =     \/D1 * \/C1 * B1 * \/A1 * Clock\r\n        + \/D2 * \/C2 * B2 * \/A2 * \/Clock\r\n     \r\n\r\n\/QD=      \/D1 * \/C1* \/B1 * A1 * Clock\r\n        + \/D1 * C1 * \/B1 * \/A1 * Clock\r\n        + \/D1 * C1 * B1 * A1 * Clock\r\n        + \/D2 * \/C2* \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * \/B2 * \/A2 * \/Clock\r\n        + \/D2 * C2 * B2 * A2 * \/Clock\r\n        \r\n\/QE =     \/D1 * \/C1 * \/B1 * A1 * Clock   \r\n        + \/D1 * \/C1 * B1 * A1 * Clock\r\n        + \/D1 * C1 * \/B1 * \/A1 * Clock\r\n        + \/D1 * C1 * \/B1 * A1 * Clock\r\n        + \/D1 * C1 * B1 * A1 * Clock\r\n        + D1 * \/C1 * \/B1 * A1 * Clock\r\n        + \/D2 * \/C2 * \/B2 * A2 * \/Clock   \r\n        + \/D2 * \/C2 * B2 * A2 * \/Clock\r\n        + \/D2 * C2 * \/B2 * \/A2 * \/Clock\r\n        + \/D2 * C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * B2 * A2 * \/Clock\r\n        + D2 * \/C2 * \/B2 * A2 * \/Clock\r\n        \r\n\/QF =     \/D1 * \/C1 * \/B1 * A1 * Clock\r\n        + \/D1 * \/C1 * B1 * \/A1 * Clock\r\n        + \/D1 * \/C1 * B1 * A1 * Clock\r\n        + \/D1 * C1 * B1 * A1 * Clock\r\n        + \/D2 * \/C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * \/C2 * B2 * \/A2 * \/Clock\r\n        + \/D2 * \/C2 * B2 * A2 * \/Clock\r\n        + \/D2 * C2 * B2 * A2 * \/Clock\r\n        \r\n\/QG =     \/D1 * \/C1 * \/B1 * \/A1 * Clock\r\n        + \/D1 * \/C1 * \/B1 * A1 * Clock\r\n        + \/D1 * C1 * B1 * A1 * Clock\r\n        + \/D2 * \/C2 * \/B2 * \/A2 * \/Clock\r\n        + \/D2 * \/C2 * \/B2 * A2 * \/Clock\r\n        + \/D2 * C2 * B2 * A2 * \/Clock\r\n        \r\nSEG1 = Clock\r\n\r\nSEG2 = \/Clock\r\n\r\nDESCRIPTION\r\n\r\nA dual 7 segment decoder\r\n<\/pre>\n<p>The segments are selected by the clock and the inverted clock. I was a bit surprised it all fitted in the GAL, but it did and it works quite well:<\/p>\n<p><a href=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/ezgif-5-5c2729b03d94.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-467\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/ezgif-5-5c2729b03d94.gif\" alt=\"\" width=\"560\" height=\"316\" \/><\/a><\/p>\n<p>Here I selected 2 different numbers to get 42 on the display and slowly increased the clock speed, from a speed where the switching is visible up to a few Khz. Even at more then a megahertz this still works fine, so if you need a 1 million FPS 7 segment display, this is a way.<\/p>\n<h3>Concluding remarks<\/h3>\n<p>GAL&#8217;s are strange and kind of fun to use, but with FPGA&#8217;s and CPLD&#8217;s being affordable and tools for GAL&#8217;s being old and weird there is no good reason to use these devices today, except perhaps for some 5V glue logic and legacy applications. But they are not very expensive and interesting to mess with for a glimpse how logic development used to be done.<\/p>\n<p>The 7 segment truth table originated from <a href=\"https:\/\/quickgrid.wordpress.com\/2015\/03\/22\/7-segment-decoder-implementation-truth-table-logisim-diagram\/\">here.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A long time ago, 7400 logic was all that was available, but having only 7400 logic means designs can get big and difficult, but making a custom logic IC was expensive and hardly a possibility. A few companies started making programmable logic devices like the Programmable Logic Array (PLA) and Programmable Array Logic (PAL). These [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-458","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using GAls in the 21st century - jaeblog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/justanotherelectronicsblog.com\/?p=458\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using GAls in the 21st century - jaeblog\" \/>\n<meta property=\"og:description\" content=\"A long time ago, 7400 logic was all that was available, but having only 7400 logic means designs can get big and difficult, but making a custom logic IC was expensive and hardly a possibility. A few companies started making programmable logic devices like the Programmable Logic Array (PLA) and Programmable Array Logic (PAL). These [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/justanotherelectronicsblog.com\/?p=458\" \/>\n<meta property=\"og:site_name\" content=\"jaeblog\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-11T19:30:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg\" \/>\n<meta name=\"author\" content=\"riktw\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"riktw\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#article\",\"isPartOf\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458\"},\"author\":{\"name\":\"riktw\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b\"},\"headline\":\"Using GAls in the 21st century\",\"datePublished\":\"2018-11-11T19:30:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458\"},\"wordCount\":1059,\"commentCount\":7,\"image\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage\"},\"thumbnailUrl\":\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/justanotherelectronicsblog.com\/?p=458#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458\",\"url\":\"https:\/\/justanotherelectronicsblog.com\/?p=458\",\"name\":\"Using GAls in the 21st century - jaeblog\",\"isPartOf\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage\"},\"image\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage\"},\"thumbnailUrl\":\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg\",\"datePublished\":\"2018-11-11T19:30:22+00:00\",\"author\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b\"},\"breadcrumb\":{\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/justanotherelectronicsblog.com\/?p=458\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage\",\"url\":\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1.jpg\",\"contentUrl\":\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1.jpg\",\"width\":3183,\"height\":1353},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/?p=458#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/justanotherelectronicsblog.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using GAls in the 21st century\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/#website\",\"url\":\"https:\/\/justanotherelectronicsblog.com\/\",\"name\":\"jaeblog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/justanotherelectronicsblog.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b\",\"name\":\"riktw\",\"url\":\"https:\/\/justanotherelectronicsblog.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using GAls in the 21st century - jaeblog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/justanotherelectronicsblog.com\/?p=458","og_locale":"en_US","og_type":"article","og_title":"Using GAls in the 21st century - jaeblog","og_description":"A long time ago, 7400 logic was all that was available, but having only 7400 logic means designs can get big and difficult, but making a custom logic IC was expensive and hardly a possibility. A few companies started making programmable logic devices like the Programmable Logic Array (PLA) and Programmable Array Logic (PAL). These [&hellip;]","og_url":"https:\/\/justanotherelectronicsblog.com\/?p=458","og_site_name":"jaeblog","article_published_time":"2018-11-11T19:30:22+00:00","og_image":[{"url":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg","type":"","width":"","height":""}],"author":"riktw","twitter_card":"summary_large_image","twitter_misc":{"Written by":"riktw","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#article","isPartOf":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458"},"author":{"name":"riktw","@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b"},"headline":"Using GAls in the 21st century","datePublished":"2018-11-11T19:30:22+00:00","mainEntityOfPage":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458"},"wordCount":1059,"commentCount":7,"image":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage"},"thumbnailUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/justanotherelectronicsblog.com\/?p=458#respond"]}]},{"@type":"WebPage","@id":"https:\/\/justanotherelectronicsblog.com\/?p=458","url":"https:\/\/justanotherelectronicsblog.com\/?p=458","name":"Using GAls in the 21st century - jaeblog","isPartOf":{"@id":"https:\/\/justanotherelectronicsblog.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage"},"image":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage"},"thumbnailUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1-1024x435.jpg","datePublished":"2018-11-11T19:30:22+00:00","author":{"@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b"},"breadcrumb":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/justanotherelectronicsblog.com\/?p=458"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#primaryimage","url":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1.jpg","contentUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2018\/11\/blog1.jpg","width":3183,"height":1353},{"@type":"BreadcrumbList","@id":"https:\/\/justanotherelectronicsblog.com\/?p=458#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/justanotherelectronicsblog.com\/"},{"@type":"ListItem","position":2,"name":"Using GAls in the 21st century"}]},{"@type":"WebSite","@id":"https:\/\/justanotherelectronicsblog.com\/#website","url":"https:\/\/justanotherelectronicsblog.com\/","name":"jaeblog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/justanotherelectronicsblog.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b","name":"riktw","url":"https:\/\/justanotherelectronicsblog.com\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=458"}],"version-history":[{"count":5,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":469,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions\/469"}],"wp:attachment":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}