<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27352794</id><updated>2011-07-07T16:33:34.497-07:00</updated><title type='text'>Bitstuff</title><subtitle type='html'>For people interested in how computers work bottom-up.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27352794.post-4263184448030452009</id><published>2007-02-09T09:35:00.000-08:00</published><updated>2007-02-09T11:03:12.746-08:00</updated><title type='text'>Subtract and Branch if Negative</title><content type='html'>I got pretty bored over winter break, and decided I needed a project to keep me busy until class started.  Well, there was one thing that I've been wanting to do for a long time.  I have wanted to build a simple computer out of 7400 series logic chips.  I only had about a week for the whole project, so the design had to be pretty spartan.  I also wanted to use chips that I had on hand, though that didn't last for too long.&lt;br /&gt;&lt;br /&gt;After thinking up a few different ideas, I finally remembered another project that  I've been wanting to do: build a Subtract and Branch if Negative computer.  That is, a computer whose only instruction is to subtract two numbers, store the result, and branch to an alternative memory location if the result is negative.  This is very much like &lt;a href="http://en.wikipedia.org/wiki/Subtract_and_branch_if_negative"&gt;SBN&lt;/a&gt; on wikipedia.&lt;br /&gt;&lt;br /&gt;If you don't care to look at the Wikipedia page, the subtract and branch if negative instruction turns out to be the only instruction you need to build a turing-complete computer.  That is, this one instruction, given enough time and memory, can compute anything that a regular computer can.  Of course, it's slow, inefficient, and a pain to program.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_1F4Ce6aZ05I/RczFOW0MSaI/AAAAAAAAAA8/wu1-Txw5GVI/s1600-h/sbnBlock.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_1F4Ce6aZ05I/RczFOW0MSaI/AAAAAAAAAA8/wu1-Txw5GVI/s320/sbnBlock.png" alt="" id="BLOGGER_PHOTO_ID_5029611734299330978" border="0" /&gt;&lt;/a&gt;So I went about designing a  simple microcomputer based on this instruction.  First step, I needed to decide on some basic specifications for the processor:&lt;br /&gt;&lt;br /&gt;Data Width: 8-Bits&lt;br /&gt;Address Space: 16-Bits&lt;br /&gt;Instruction Set: Subtract and Branch if Negative&lt;br /&gt;&lt;br /&gt;After that, I could rough out a block diagram of the dataflow.  Using the dataflow as a guide, I figured out what chips I could use in what blocks, how many I would need and how they connect to each other.&lt;br /&gt;&lt;br /&gt;The dataflow was the easy part.  More difficult is designing the control logic, which was going to be especially complicated because of the 8 and 16 bit busses.  This is because it now requires two cycles to read in the address of an operand, and another cycle to read in the value of the operand.  This needs to be done once for both operands, and then again when we need to load the new PC value if the instruction takes the branch.&lt;br /&gt;&lt;br /&gt;The control sequence for the processor goes something like this:&lt;ol&gt;&lt;li&gt;Load MAR.H; PC++&lt;/li&gt;&lt;li&gt;Load MAR.L; PC++&lt;/li&gt;&lt;li&gt;Load B&lt;/li&gt;&lt;li&gt;Load MAR.H; PC++&lt;/li&gt;&lt;li&gt;Load MAR.L; PC++&lt;/li&gt;&lt;li&gt;Load A&lt;/li&gt;&lt;li&gt;Store ALU Result; PC++&lt;/li&gt;&lt;li&gt;Load PC.L&lt;/li&gt;&lt;li&gt;If (ALU Result is negative)  {Load PC}&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;A pretty reasonable way to encode the control logic would be to program the control signals into an EEPROM.  This is very simple and is easier to change if there is a bug.  However, I had never used EEPROMs before, so I decided to build a state machine out of 7400 series logic.  It's a bit of a mess, and there were a few bugs to squash, but it works.&lt;br /&gt;&lt;br /&gt;So we have the control and the dataflow...what else?  Input and output.  There needs to be a way to load programs onto the device, and then a method of interacting with the running program.&lt;br /&gt;&lt;br /&gt;I had initially thought about using a series of switches for loading programs into RAM.  That was going to be incredibly tedious and time consuming, so I scratched that.  Instead, I did some research on the Parallel port, and found it to be the perfect solution.  It's easy to interface, easy to program and completely automated.  This only required a few extra chips to interface the parallel port to the system bus on the microcomputer.  Basically, it needs to be able to take control of the bus when it needs to program, and relinquish control when it's done.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_1F4Ce6aZ05I/Rcy7k20MSWI/AAAAAAAAAAc/0zff1Yyteps/s1600-h/mainBoard.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_1F4Ce6aZ05I/Rcy7k20MSWI/AAAAAAAAAAc/0zff1Yyteps/s320/mainBoard.jpg" alt="" id="BLOGGER_PHOTO_ID_5029601125730109794" border="0" /&gt;&lt;/a&gt;Last bit of hardware, the human machine interface.  I have to admit, it's pretty craptacular on this microcomputer.  An 8-bit dipswitch and an 8-LED bargraph are all the I/O you get.  However, this fits in with the overall strategy of making somewhat rediculous design decisions.  There is however, at least one neat trick that can be done to expand the output capabilities.&lt;br /&gt;&lt;br /&gt;The fabrication of this computer is another story.  I had hoped I would be able to build it on a printed circuit board, that would have been wonderful.  However, I had too many chips for the free version of Eagle CAD I had.  Simply would not fit on the board.  So I decided to use a pre-drilled perferated board with solder pads.  Good enough, but wiring ended up taking most of the week.  Luckily for you, you don't have to wait to see the finished product.  The final stage of the microcomputer has two boards.  The bottom board has the processor, memory, power supply and clock generator.  The top board holds the batteries, has some blinky lights, dip switch and some simple address decode logic for memory-mapped IO.&lt;br /&gt;&lt;br /&gt;To wire up all the parts, I used a lot of wire-wrap wire, solder and a wire-wrap tool.  The leads&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_1F4Ce6aZ05I/Rcy8s20MSXI/AAAAAAAAAAk/ktZa5xymGe4/s1600-h/finished.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_1F4Ce6aZ05I/Rcy8s20MSXI/AAAAAAAAAAk/ktZa5xymGe4/s320/finished.jpg" alt="" id="BLOGGER_PHOTO_ID_5029602362680691058" border="0" /&gt;&lt;/a&gt; on the parts were very short, so wire-wrapping was a real pain, but it seemed to be the best way to get the leads into place for soldering.  It was slow going and took about four very full days to finish.  On top of that, I had to test and debug different parts as I finished them.  It can make you pretty nervous when you have to desolder several connections on one IC to make a fix.&lt;br /&gt;&lt;br /&gt;If I do another 7400 series-based microcomputer, I will get a proper wire-wrap board.&lt;br /&gt;&lt;br /&gt;Now that the darn thing is built, what to do?  The work's not done yet.  After building and debugging it, I still needed to be able to write, assemble and load programs.  I needed to write an assembler and program loader.&lt;br /&gt;&lt;br /&gt;The program loader actually turned out to be the easiest part of the whole project.  Programming the parallel port on Linux was much easier than I expected.  In fact, the loader program only had one bug in it the first time I tried it.  Made the fix, tried it again, worked!&lt;br /&gt;&lt;br /&gt;Now that I could load any data I wanted into the microcomputer's memory, I needed an easier way to program it.  This meant developing a simple two-pass assembler.  On top of that, I wanted it to have some built-in pseudo operations, so I could program and still keep my sanity.  Programming this device with only using the low-level subtract and branch if negative instruction is not my cup of tea.&lt;br /&gt;&lt;br /&gt;Eventually I hacked out a simple assembler that fit the bill.  The assembly code looks like this:&lt;br /&gt;&lt;br /&gt;sub     i, imm(-10)&lt;br /&gt;loop:&lt;br /&gt;dec     i&lt;br /&gt;bltz    i, loop&lt;br /&gt;&lt;br /&gt;This little snippet is a simple loop.  It subtracts -10 from i (which it assumes to be 0), setting up the number of iterations.  Each iteration it decrements the loop index, and continues to loop as long as "i" is greater than or equal to zero.&lt;br /&gt;&lt;br /&gt;Each instruction in that snippet is a pseudo-operation that is converted into SBN instructions by the assembler.  Furthermore, each of those pseudo-ops can be converted into exactly one SBN instruction.&lt;br /&gt;&lt;br /&gt;The "imm(-10)" bit of code allows me to operate with immediate values in my code.  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_1F4Ce6aZ05I/RczBdm0MSYI/AAAAAAAAAAs/iX4h7XfIDnU/s1600-h/blinkies.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_1F4Ce6aZ05I/RczBdm0MSYI/AAAAAAAAAAs/iX4h7XfIDnU/s320/blinkies.jpg" alt="" id="BLOGGER_PHOTO_ID_5029607598245824898" border="0" /&gt;&lt;/a&gt;All it does is return the address of the value"-10" on the constant table.  These keeps me from having to allocate a memory location for each constant I use in my code.&lt;br /&gt;&lt;br /&gt;I now have everything I need to write a demo program.  I wanted the microcomputer to do something unexpected.  Something you wouldn't think it would be able to do.  I think the most limiting part of it is it's input and output.  I decided the demo would be an output-only program.  This leaves me with eight blinky lights to do something cool with.&lt;br /&gt;&lt;br /&gt;So, the most unexpected thing to do, would be to project an image with those eight lights.  That's my thought anyways.  I was set on displaying a smiley face using just those lights.  How, you might ask, can that be done?  Using persistance of vision.&lt;br /&gt;&lt;br /&gt;If you've ever looked at a flashlight in the dark, you've probably noticed that it seems to leave a trail when you look at it.  If you spin it in a circle fast enough, you might see a circle of light, &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_1F4Ce6aZ05I/RczDdW0MSZI/AAAAAAAAAA0/vbCuoyAbmrc/s1600-h/smiley.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_1F4Ce6aZ05I/RczDdW0MSZI/AAAAAAAAAA0/vbCuoyAbmrc/s320/smiley.jpg" alt="" id="BLOGGER_PHOTO_ID_5029609792974113170" border="0" /&gt;&lt;/a&gt;neato.  The idea behind displaying a smiley face on the eight lights is the same.  If I move the lights, or use a mirror to move them, your eyes will see a trail marking where that light has been in your field of vision.  If we setup a regular motion of a mirror, and display one line of the image at a time, we can display an entire 2D image using one line of eight lights.&lt;br /&gt;&lt;br /&gt;So that's what I did.  The program outputs one line of the desired image, blanks the lights for a split second, the next line is lit up, and so on.  I took a picture of the effect with my camera.  I don't have any mirrors yet, so I just panned the camera across the lights in the dark, it worked out really well.  To show other people, I can just shake the lights up and down.  Eventually, I would like to get a small mirror, motor and switch for synchronization.  That seems a bit safer than shaking the fragile computer.&lt;br /&gt;&lt;br /&gt;In the end what I got is an 8-Bit computer with one instruction, 32 KB of RAM and a clock speed of 250KHz.  Though it takes nine cycles to execute one instruction, so in reality, it's executing about 28,000 instructions per second.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-4263184448030452009?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/4263184448030452009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=4263184448030452009' title='53 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/4263184448030452009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/4263184448030452009'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2007/02/subtract-and-branch-if-negative.html' title='Subtract and Branch if Negative'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_1F4Ce6aZ05I/RczFOW0MSaI/AAAAAAAAAA8/wu1-Txw5GVI/s72-c/sbnBlock.png' height='72' width='72'/><thr:total>53</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114886480565804965</id><published>2006-05-28T18:00:00.000-07:00</published><updated>2006-05-28T18:06:45.986-07:00</updated><title type='text'>Epiphany</title><content type='html'>So I just realized that a multiple-issue superscalar processor is not at all efficient in an fpga.  It simply will not provide the performance I'd like for one major reason: multiple write ports in FPGAs are prohibitively expensive.&lt;br /&gt;&lt;br /&gt;So what I will do, is create a one-issue out of order processor that runs at a very high clock rate.  The goal is 200MHz.  We'll see.  The scheduling hardware will be much cheaper this way.  Also, it will be faster than a slower multiple-issue processor on an fpga.&lt;br /&gt;&lt;br /&gt;Basically, my one choice for implementing multiple-write ports was to time-multiplex the register files.  This creates some asynchronous fun.  I figured as long as I was doing the time-multiplexing for the register files, I might as well time-multiplex the write back bus.  Turns out, that is not such a bad idea.  In fact, I should make things easy and run everything at the higher clock speed and pipeline where I have to.  This would make a 200MHz scalar out of order cpu similiar to a 50MHz four-issue cpu.  Tada!  But it's even better, because many instructions will take only one cycle, while others, like addition, will take a couple.&lt;br /&gt;&lt;br /&gt;Neato, right?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114886480565804965?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114886480565804965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114886480565804965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114886480565804965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114886480565804965'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/epiphany.html' title='Epiphany'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114721943323269348</id><published>2006-05-09T17:03:00.000-07:00</published><updated>2006-05-09T17:04:39.333-07:00</updated><title type='text'>CPU Project Calendar (sortof)</title><content type='html'>Looking at this whole project at once is a bit intimidating, so I split it up into a few different stages.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Overall Architecture&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Concrete design parameters&lt;/li&gt;&lt;li&gt;Number of functional units and their partitioning&lt;/li&gt;&lt;li&gt;Major units&lt;/li&gt;&lt;li&gt;Busses between units&lt;/li&gt;&lt;li&gt;ISA (likely to be a subset of the M-word)&lt;/li&gt;&lt;li&gt;Scheduling algorithm&lt;/li&gt;&lt;li&gt;Do some quantitative analysis to back up design choices&lt;/li&gt;&lt;li&gt;At this point, I should have a bunch of nifty drawings and all-around fuzzy feelings about the project&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Basic Processor&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Implement instruction decode for basic arithmetic instructions&lt;/li&gt;&lt;li&gt;Implement 4-issue scheduling hardware&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Dependency FIFOs&lt;/li&gt;&lt;li&gt;Register file&lt;/li&gt;&lt;li&gt;Re-Order Buffer&lt;/li&gt;&lt;li&gt;Write-Back bus arbitrator&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Implement basic ALU functional units&lt;/li&gt;&lt;li&gt;Bypass hardware&lt;/li&gt;&lt;li&gt;Instruction memory (trivial)&lt;/li&gt;&lt;li&gt;Trackers, trackers, and more trackers&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Make sure to have good debugging information&lt;/li&gt;&lt;li&gt;Possibly implment a transaction checker&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;At this point, I should have a good testbench environment and be able to calculate the fibbonacci sequence along with some other basic programs&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Branches&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Implement branch functional unit&lt;/li&gt;&lt;ol&gt;&lt;li&gt;branch&lt;/li&gt;&lt;li&gt;jump&lt;/li&gt;&lt;li&gt;trap&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Implement branch prediction unit&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Branch prediction table&lt;/li&gt;&lt;li&gt;Branch target buffer&lt;/li&gt;&lt;li&gt;Return address stack&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Implement branch-misprediction rollback mechanism (&lt;span style="font-style: italic;"&gt;should&lt;/span&gt; be trivial)&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Load/Store + Cache&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Implement Load/store functional unit&lt;/li&gt;&lt;li&gt;Implement data and instruction caches&lt;/li&gt;&lt;li&gt;Implement bus interface&lt;/li&gt;&lt;li&gt;Implement cache system instructions&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;TLB + interrupts/exceptions + Finish implementing all instructions&lt;/li&gt;&lt;ol&gt;&lt;li&gt;TLB&lt;/li&gt;&lt;li&gt;interrupts/exceptions&lt;/li&gt;&lt;li&gt;finish all instructions&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Floating Point Units?&lt;/li&gt;&lt;ol&gt;&lt;li&gt;This would be nifty.  We'll see how much space is left.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;At this point, I should have a working processor.  Pat self on back.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114721943323269348?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114721943323269348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114721943323269348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114721943323269348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114721943323269348'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/cpu-project-calendar-sortof.html' title='CPU Project Calendar (sortof)'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114680268553354160</id><published>2006-05-04T21:14:00.000-07:00</published><updated>2006-05-04T21:18:05.736-07:00</updated><title type='text'>x86 ISA</title><content type='html'>I kindof think it would be cool to implement a 80386-compatible CPU.  It would be more relavent to my interests, even though the ISA isn't nearly as clean as a RISC CPU.  Funny thing is, I've only been designing RISC CPUs, so maybe I should take a detour to the dark side of CISC anyways.&lt;br /&gt;&lt;br /&gt;I think I will still piece together the requirements and solutions for the superscalar processor; but in the interim, I want to hack together an x86 CPU.&lt;br /&gt;&lt;br /&gt;Fun stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114680268553354160?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114680268553354160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114680268553354160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114680268553354160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114680268553354160'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/x86-isa.html' title='x86 ISA'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114663735695288303</id><published>2006-05-02T23:08:00.000-07:00</published><updated>2006-05-02T23:24:09.186-07:00</updated><title type='text'>HOT16 ISA</title><content type='html'>I thought I'd post the ISA encoding of the "speed-demon" processor I created.  It really did have a ridiculously high-clock rate for being implemented in an FPGA.  It also was quite efficient with resources.  It is a dual-issue statically scheduled processor.  The two issue slots have their register file, registers from the other file are accessed through a few instructions.  Operands from the other register file are denoted by a preceding "x.".&lt;br /&gt;&lt;br /&gt;The major problem with this processor is that it is a super pain in the bum to program.  I didn't even bother, because I knew it would vaporize my brain if I tried.  It's only a 16-bit processor with 16-bit addressing.  It has a carry flag and add with carry to facilitate adding larger numbers.  It has several shift operations to implement a fast multi-cycle barrel-shifter of sorts.  There are one to three delay slots after each instruction depending on how much forwarding logic is included when the CPU is instantiated.  The forwarding logic costs cycle time, but I'm not sure this processor would be possible to efficiently schedule with 3 delay slots before the result of an instruction can be used, especially with only 8 registers per issue slot.&lt;br /&gt;&lt;br /&gt;So even though it has all these shortcomings, I did some quantitative analysis to see how fast it is compared to another 32-Bit Pipelined RISC processor I designed.  Turns out, with perfect instruction scheduling, the processor is 5 to 10 times faster than the 32 bit processor, leaning towards the lower-end with more 32-bit instructions.  With more realistic scheduling, say, one instruction per cycle on average, it is still 2 to 5 times faster.  Along with the fact that 12 of these  can fit on a chip, it could actually get some pretty decent performance.  Definately not general-purpose computing, however.  It is more akin to the cell architecture with attached processing units.&lt;br /&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;&lt;span style="font-size:6;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;table style="color: rgb(0, 0, 0);" border="1" cellpadding="4" cellspacing="0" width="100%"&gt;  &lt;col width="80*"&gt;  &lt;col width="20*"&gt;  &lt;col width="25*"&gt;  &lt;col width="9*"&gt;  &lt;col width="9*"&gt;  &lt;col width="9*"&gt;  &lt;col width="22*"&gt;  &lt;col width="53*"&gt;  &lt;col width="31*"&gt;  &lt;thead&gt;   &lt;tr valign="top"&gt;    &lt;th style="color: rgb(255, 255, 255);" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;Instruction&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;Type&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;[15:14]&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;[13:11]&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;[10:8]&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;[7:3]&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p&gt;&lt;span style="font-family:Arial,sans-serif;"&gt;[2:0]&lt;/span&gt;&lt;/p&gt;    &lt;/th&gt;   &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;ld rt, imm8(rs1)&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;Rm&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;10&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;st rt, imm8(rs1)&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;Rm&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;11&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;addi rs1, imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;subi rs1, imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;001&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;cmpi rs1, imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;010&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;andi rs1, imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;011&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;lui rs1, imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;100&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;b.&lt;span style="font-style: normal;"&gt;cc&lt;/span&gt;&lt;i&gt;     &lt;/i&gt;&lt;span style="font-style: normal;"&gt;imm8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;I&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="3%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;n&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="3%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;z&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="3%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;o&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;101&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm8&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;jr rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;J&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;110&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00000000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;jal imm11&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;J&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm11&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;111&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="2" width="33%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm11&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;add rt, x.rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;sub rt, x.rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00001&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;or rt, x.rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00010&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;and rt, x.rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00011&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;add rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00100&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;sub rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00101&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;or rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00110&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;and rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00111&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;addc rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;xor rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01001&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;not rt, rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01010&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;mulhi rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01011&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;mullo rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;01100&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;sll.m rt, rs1, imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;0111m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;srl.m rt, rs1, imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;1000m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;sra.m rt, rs1, imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;1001m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;imm3&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;sllv.m rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;1010m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;srlv.m rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;1011m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;srav.m rt, rs1, rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rt&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;1100m&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs2&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;test rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;rs1&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;11010&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;000&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="color: rgb(255, 255, 255);" valign="top" width="31%"&gt;     &lt;p&gt;&lt;span style="font-family:Courier New,monospace;"&gt;RESERVED&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="8%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;R&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="10%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;00&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" colspan="3" width="10%"&gt;     &lt;p align="center"&gt;&lt;br /&gt;   &lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="9%"&gt;     &lt;p align="center"&gt;&lt;br /&gt;   &lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="21%"&gt;     &lt;p align="center"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;11011&lt;/span&gt;&lt;/p&gt;    &lt;/td&gt;    &lt;td style="color: rgb(255, 255, 255);" width="12%"&gt;     &lt;p align="center"&gt;&lt;br /&gt;   &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt; &lt;p style="margin-bottom: 0in;"&gt;m: [L=shift 0,1,2,3 bits | H= shift 0,4,8,12 bits]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114663735695288303?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114663735695288303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114663735695288303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114663735695288303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114663735695288303'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/hot16-isa.html' title='HOT16 ISA'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114653847181602400</id><published>2006-05-01T19:50:00.000-07:00</published><updated>2006-05-01T19:54:31.823-07:00</updated><title type='text'>A Complexity-Effective Dynamic Scheduling Algorithm</title><content type='html'>I found this paper online:&lt;br /&gt;&lt;br /&gt;     http://courses.ece.uiuc.edu/ece512/Papers/Palacharla.1997.ISCA.pdf&lt;br /&gt;&lt;br /&gt;This method uses register renaming along with dependency checking in instruction dispatch to reduce complexity in the wakeup-select logic (reservation stations).  A FIFO is setup for each issue slot, instructions are issued to FIFOs so that dependency chains are located in FIFOs.  This means that instructions only need to be checked at the head of the FIFO if they are ready to be dispatched to a function unit.&lt;br /&gt;&lt;br /&gt;This could greatly reduce the cycle-time and resources used by the scheduler in an FPGA CPU.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114653847181602400?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114653847181602400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114653847181602400' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114653847181602400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114653847181602400'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/complexity-effective-dynamic.html' title='A Complexity-Effective Dynamic Scheduling Algorithm'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114647342535612239</id><published>2006-05-01T01:34:00.000-07:00</published><updated>2006-05-01T01:50:25.363-07:00</updated><title type='text'>New Reservation Station Operand Design</title><content type='html'>A couple things I can do to optimize the size of reservation stations.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Don't store data in the reservation station itself.  Instead, store only the tag of the operand.  This saves a ton of luts and flipflops because multiplexers are expensive in FPGAs, and without the data, we significantly reduce the width of the multiplexer required.  We also don't need a multiplexer from each of the write-back busses because we don't need to save the data.  Data for outstanding tags can be stored in a special register-file because register files can be implemented as distributed RAM.  This basically combines the storage and multiplexer into one relatively tiny alternative.  The drawback is that the in-flight register file will need two read ports for each functional unit and one write port for each write-back bus (there are some time-multiplexing tricks to alleviate this issue).  This should still be cheaper.&lt;/li&gt;&lt;li&gt;Something like 90% of instructions have only one or none of their operands outstanding.  Therefore, most reservation stations only need to compare one operand at a time.  This allows us to save a bit on comparators (which are relatively cheap in the Spartan 3 fabric).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; The utilization savings are huge:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;7 slices VS 82 slices&lt;br /&gt;&lt;/li&gt;&lt;li&gt;6 flipflops VS 39 flipflops&lt;br /&gt;&lt;/li&gt;&lt;li&gt;10 LUTs VS 200 LUTs&lt;/li&gt;&lt;/ul&gt;Something like 10 times smaller.  Also somewhat faster (~200MHz).  Hopefully this is correct and will work out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114647342535612239?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114647342535612239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114647342535612239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114647342535612239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114647342535612239'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/new-reservation-station-operand-design.html' title='New Reservation Station Operand Design'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114646822244331406</id><published>2006-05-01T00:16:00.000-07:00</published><updated>2006-05-01T00:23:42.450-07:00</updated><title type='text'>Dynamic Instruction Scheduling Algorithms</title><content type='html'>For my latest processor design, I want to do a modern processor design.  This can mean many things.  To me, it means it must have the following qualities:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Out of Order Execution&lt;/li&gt;&lt;li&gt;Speculative Execution&lt;/li&gt;&lt;li&gt;Superscalar&lt;/li&gt;&lt;li&gt;At least L1 Cache&lt;/li&gt;&lt;li&gt;Memory Management Unit&lt;/li&gt;&lt;/ul&gt;The most expensive quality is Out of Order Execution.  I had read a paper on OOO using the Tomasulo Algorithm.  Really quite helpful.  However, the reservation stations are far too expensive to implement.  A dual-issue superscalar CPU with out of order execution would require something like a 32 entry Reorder Buffer to be efficient.  This would then require 32 reservation stations to hold instructions waiting for their operands to become available.  Each reservation station requires at least two slots to compare operand tags and hold operand data, each operand slot requires one tag comparator for each write-back bus.  This is waaaay to much resources for the FPGA I have.  In fact, it uses &gt; 100% resources on the chip :/&lt;br /&gt;&lt;br /&gt;So now I'm researching other alternatives.  I would really like to be able to do a four-issue processor, however, I don't think it's possible at this point.&lt;br /&gt;&lt;br /&gt;Here are some resources I'm currently reading:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://courses.ece.uiuc.edu/ece512/Papers/sched.html&lt;/li&gt;&lt;li&gt;http://www.cs.swan.ac.uk/~csandy/cs-323/09_dynamic_scheduling.html&lt;/li&gt;&lt;li&gt;http://courses.ece.uiuc.edu/ece512/Papers/Dwyer.1992.MICRO.pdf&lt;/li&gt;&lt;/ul&gt;Pizza out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114646822244331406?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114646822244331406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114646822244331406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114646822244331406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114646822244331406'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/05/dynamic-instruction-scheduling.html' title='Dynamic Instruction Scheduling Algorithms'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27352794.post-114646217772651777</id><published>2006-04-30T22:34:00.000-07:00</published><updated>2006-04-30T22:42:57.733-07:00</updated><title type='text'>Hello</title><content type='html'>I started up this blog to post updates on the various projects I undertake.  I enjoy designing and implementing CPU designs and the like.  People who truly enjoy something like that are far and few inbetween.  Hopefully I can provide some interesting content to people and even get some feedback on the stuff I work on.&lt;br /&gt;&lt;br /&gt;I learned synchronous digital design not quite a year ago.  Ever since I've been focusing on implementing my own computer system and porting Linux.  I've created several different processors in this time.  Most of them are based on the MIPS instruction set, two of them weren't.  Of the two that differed, one was a Subtract and Branch if Negative machine.  Very slow, but with enough time, just as capable as any other cpu.&lt;br /&gt;&lt;br /&gt;The other was a 16-Bit dual issue superscalar processor I designed specifically for a high clock speed on an FPGA.  I was able to sanely fit 9 of these processor cores in one Spartan 3 FPGA.  Theoretically it should be very fast, however it's programming model is a major pain in the bum.  One core alone would operate at 180MHz on an FPGA.  The nine core version operated at about 150MHz.&lt;br /&gt;&lt;br /&gt;So now I'm trying to figure out the most cost-effective/performance cpu design, for the FPGA development board I have, that can run Linux.  Then I will port Linux to the board, say "Woop-de-doo", and pat myself on the back for a job well done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27352794-114646217772651777?l=bitstuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitstuff.blogspot.com/feeds/114646217772651777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27352794&amp;postID=114646217772651777' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114646217772651777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27352794/posts/default/114646217772651777'/><link rel='alternate' type='text/html' href='http://bitstuff.blogspot.com/2006/04/hello.html' title='Hello'/><author><name>Luke Valenty</name><uri>http://www.blogger.com/profile/04371506445312526728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
