Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
09/24/07 21:59
Modified:
  09/24/07 22:08

Read: times


 
#144939 - pictures and amusement
Responding to: ???'s previous message
Well, I thought it's the software and description which will be the main source of entertainment; but I admit pictures are much more enjoyable, except that I really can't draw (and I also hate PC-based drawing tools, they are too clumsy for my clumsy hands).

However, for what I am doing now, that sort of pictures are not really needed - as I said, the gross picture is uninterestingly plain, and the detailed picture is too complex to be interesting enough.

What I do - regardless of if it leads to quick results or to a mess - is, that I try to think about an instruction - or, better, a class of instructions - as a sequence of events, all of which have to happen in a given order to fulfill the task of the instruction; then I try to think about how this can be achieved using some simple logic like latches and gates.

For example, let's just randomly point to the opcodes chart.... eyes closed, finger points directly to the middle of the sheet... voila, MOV @R1,#data, opcode 77h. Why not.

So, we need to pick content of R1 (or, Rn, n=0..1 - this is a group of instructions anyway) first, to form the address into IRAM. This means to read the RAM - address 0,1 or 8,9 or 10h,11h, or 18h,19h; depending on the bank - this comes from PSW (assuming we already have one :-) ) - to get the address first.

Here comes the first "I knew this or that beforehand" (I was thinking about the "gross picture" before, but no drawings, just a bunch of ideas). Note, that the "@Rn" instructions (except the MOVX @Rn) come together with the same "Ri" instructions (notable exception, DJNZ Ri,dspl are "paired" with the infamous XCHD A,@Rn instructions). I would like to implement the @Rn instructions at no cycle penalty to their Ri counterpart. But, while the Ri instruction has an address generated simply by decoding the opcode (oh, the decoding consists of stripping down the bottommost 3 bits and concatenating it with the bank bits from PSW); for the @Rn instruction, after the Rn "decoding" I'd need an extra RAM access to extract the address. I again don't have exact data, but intuitively, the RAM, while integral part of the '51 core, it is certailny more off-hand (read: slow) than a register inside the core. So the extra RAM access to get the address costs me extra cycles, and that's what I don't want. I am ready to pay the cost of speed in silicon.

So, I design an extra set of 2x4 registers for 4 banks of R0 and R1 into the very core, in a SFR manner; being written simultaneously with writing to RAM addresses 0, 1, 8, 9, etc.; and their (tristateable) outputs being tied to the internal address bus, outputting when the corresponding @Rn instruction has to be executed. As this involves only a few gates, I expect this process (opcode decoding, Rn extra register output enable assertion and address output) be of sufficient speed to achieve similar performance as the simple address generation for the Ri instructions.

Time for a drawing? Well, maybe...:

(now I see I forgot to finish "INTERNAL ADDRESS BUS" inside the bottom "bus").But, honestly, was it illustrative enough? I doubt. Sorry, I can't do any better. And this illustrates only a fraction of a particular problem; it is far from the gross overall picture; and at the same time it is not too detailed - for example, it does not show what is exactly decoded and how the address into the extra registers generated, nor does it really indicate that the write occurs both into the RAM addresses 0,1 etc. and the extra registers. So, what's exactly the value of these drawings, except for entertainment?

But let's proceed.

Once the instruction is decoded (if ((OPCODE = something_with_@Rn) and (proper_phase_of_instruction_execution)), sorry for Pascalism - yes, I still do actively practise the C-hatred :-) ), the address is output to the data bus from the extra Rn registers, and WRITE signal is asserted for RAM (accounting for the difference of IRAM and SFR depending on the highest address bit - an another "lookahead"), while the just-fetched second-byte of the instruction is output to the data bus from the fetch unit.

As this is a two-byte instruction, there is no hurry - there are at least two full cycles ("fetch" cycles, but that's a clock cycle in this design) to accomplish a single write. Yet another lookahead - I anticipate, that the internal RAM is fast enough, so the RAM and SFR accesses can be squeezed into less than a half-clock interval (less by the ALU delay) - so that single-byte read-modify-write instructions (such as INC Ri) can be executed within a single "fetch" cycle. But, in this case, there is ample time; the write window can be left open for almost the whole second cycle... It would be nice if one could write down: "leave the write window open for one or half cycle, as it suits you better for optimisation of the logic", I just don't know if this is possible... So, I end with simply opening the window only for the minimum time.

Time for a "timing" diagram:

I've warned, there is no formalism in these. Try to figure out for yourself. Sorry - again, this is only a tool for myself.

Now, this proceeds to the C-code stage (yes, no program, code). I see it simple and straighforward - in the first "stage", nothing special happens, the second byte latch happens "automatically", the mechanism for it is already there. Only for second "stage", the data latch has to open it's threestateable buffer to the data bus, the selected "extra" register has to open to the address bus; and at the end of second "stage", the iram write signal has to be generated. At this stage, I believe, it's simple to write down, either in C, or Verilog/VHDL; or, for those who like very big and complex schematics, in 74' logic, for example.

I know this all is very shaky and far from being a real design, but, after all, this is supposed to be fun more than anything else...

Enjoy!

Jan Waclawek


List of 282 messages in thread
TopicAuthorDate
Let's make a '51!            01/01/70 00:00      
   ???            01/01/70 00:00      
      Maybe yes...            01/01/70 00:00      
         Still digging!            01/01/70 00:00      
            re above            01/01/70 00:00      
               digging deep            01/01/70 00:00      
                  It depends on your goal            01/01/70 00:00      
         Thanks            01/01/70 00:00      
   a simulation which actualy works            01/01/70 00:00      
      clockwise            01/01/70 00:00      
      Not Nesasarily            01/01/70 00:00      
   WHAT?            01/01/70 00:00      
      Yeah, C...            01/01/70 00:00      
   From reading the subject title...            01/01/70 00:00      
      verilog to c            01/01/70 00:00      
         FpgaC            01/01/70 00:00      
            there are more similar            01/01/70 00:00      
            re :FpgaC            01/01/70 00:00      
               it's just as with any other C...            01/01/70 00:00      
   Step1: Program Counter, code fetching...            01/01/70 00:00      
      finite state machine            01/01/70 00:00      
      Step 1 1/4: the byte counter&some more infrastruct            01/01/70 00:00      
         Step 1 1/2: first problems            01/01/70 00:00      
            Why not do this ...            01/01/70 00:00      
               reset in a dozen of ways            01/01/70 00:00      
                  It\'s really simple and stupid            01/01/70 00:00      
                     Faking out the LJMP            01/01/70 00:00      
                        You can't have it both ways ...            01/01/70 00:00      
               To IOR or not to IOR            01/01/70 00:00      
                  it's probably a logic reduction            01/01/70 00:00      
                     TRANSPARENT latch?            01/01/70 00:00      
                        Using clocked registers requires multiple clocks            01/01/70 00:00      
                        How to build an oscillator            01/01/70 00:00      
                           it's simple, but not THAT simple            01/01/70 00:00      
                              Where does the IOR belong in my picture?            01/01/70 00:00      
                                 You've got to have a complete picture.            01/01/70 00:00      
                                    Thanks            01/01/70 00:00      
                                       much depends on how you perceive it            01/01/70 00:00      
                     To IOR or not to IOR            01/01/70 00:00      
                        By all means, let\'s see what you think should work            01/01/70 00:00      
                           I don\'t know how I would do it            01/01/70 00:00      
                              Why do you think it\'s a lot of logic?            01/01/70 00:00      
                                 maybe later I will arrive to the LJMP            01/01/70 00:00      
                                    It is only one of a number of options.            01/01/70 00:00      
                  to reset or not to reset            01/01/70 00:00      
                     Not so fast, there, Pilgrim ...            01/01/70 00:00      
      Is there a picture?            01/01/70 00:00      
   Simulator            01/01/70 00:00      
      well, maybe...            01/01/70 00:00      
         The question is one of what you\'re simulating            01/01/70 00:00      
   Opportunity            01/01/70 00:00      
      How about this?            01/01/70 00:00      
         Thaks            01/01/70 00:00      
      not this time...            01/01/70 00:00      
         VHDL vs C            01/01/70 00:00      
            Where you sit (and when) determines what you see            01/01/70 00:00      
               ABEL is now available free            01/01/70 00:00      
               VHDL verbosity            01/01/70 00:00      
                  Entering everything more than once is not safety            01/01/70 00:00      
                  That\'s exactly what it is!            01/01/70 00:00      
                  on tools etc.            01/01/70 00:00      
                     You could, of course, use schematics ...            01/01/70 00:00      
   some basics from the wikiwhatever            01/01/70 00:00      
      Caution is indicated            01/01/70 00:00      
   What's your goal?            01/01/70 00:00      
   Step 2: The ticks counter (and the promised bonus)            01/01/70 00:00      
      BOTTOM-UP vs TOP-DOWN DESIGN            01/01/70 00:00      
   I am stuck            01/01/70 00:00      
      Prototype the ALU?            01/01/70 00:00      
         it's still hard            01/01/70 00:00      
            Jan, if you like \"bottom-up\" ...            01/01/70 00:00      
               I\'ve added a simulation            01/01/70 00:00      
      Maybe you should complete the design            01/01/70 00:00      
   step 2 1/2: MOVCs and JMP @A+DPTR            01/01/70 00:00      
      Design, then implement???            01/01/70 00:00      
         the gross picture            01/01/70 00:00      
            To the C hater            01/01/70 00:00      
               pictures and amusement            01/01/70 00:00      
                  it\'s probably not as amusing ...            01/01/70 00:00      
                     hummmm....            01/01/70 00:00      
                        that is what you have to explore            01/01/70 00:00      
                  ...and this isn\'t very amusing either            01/01/70 00:00      
      Well, this is YOUR game ...            01/01/70 00:00      
         the simplest way            01/01/70 00:00      
            ... there are many ways...            01/01/70 00:00      
               indeed, there are many ways ... BUT ...            01/01/70 00:00      
               re: there are many ways            01/01/70 00:00      
               re: microcoded MCU's            01/01/70 00:00      
                  not really microcoding...            01/01/70 00:00      
                     where there's a will ...            01/01/70 00:00      
                     constraints            01/01/70 00:00      
                        yes, but there's certainly a lower bound...            01/01/70 00:00      
                           lower bound?            01/01/70 00:00      
                              achievable minimum            01/01/70 00:00      
                           lower bound?            01/01/70 00:00      
                              perhaps what he means is a minimal delay            01/01/70 00:00      
   the rough picture            01/01/70 00:00      
      Now, this is YOUR project ... but ...            01/01/70 00:00      
         this is what I am talking about - relative cost            01/01/70 00:00      
            try to benefit from prior art            01/01/70 00:00      
         sorry - double post            01/01/70 00:00      
      I like the new picture            01/01/70 00:00      
         it's ugly            01/01/70 00:00      
            There is no requirement for beautiful drawings            01/01/70 00:00      
            Just sketch and scan ...            01/01/70 00:00      
               Early drawings should be ugly and disorganized.            01/01/70 00:00      
                  I'm not just being contrary, BUT ...            01/01/70 00:00      
                     maybe this is the way how a stupid programmer...            01/01/70 00:00      
                        Too much emphasis on art, not enough on science            01/01/70 00:00      
                     You ARE contrary, but we love you anyway.            01/01/70 00:00      
               is this simulation of this circuit?            01/01/70 00:00      
                  YES!            01/01/70 00:00      
               correction?            01/01/70 00:00      
                  there are certainly 254            01/01/70 00:00      
                     I may be reading something incorrectly            01/01/70 00:00      
                        whoops, double post again, sorry            01/01/70 00:00      
                        try mine            01/01/70 00:00      
                           did you notice the redundant opcodes?            01/01/70 00:00      
            If you like, you can use PAINT!            01/01/70 00:00      
               GIF            01/01/70 00:00      
                  this is not available as a default option...            01/01/70 00:00      
   detour - QR6, and how to explain my ideas...            01/01/70 00:00      
      ???            01/01/70 00:00      
         read one-by-one...            01/01/70 00:00      
            Too late!            01/01/70 00:00      
      Why the context switch?            01/01/70 00:00      
         simplicity            01/01/70 00:00      
            They're unrelated            01/01/70 00:00      
               sure they are unrelated....            01/01/70 00:00      
                  Maybe it\'s just grapho-semantics            01/01/70 00:00      
                  I'm a little confused            01/01/70 00:00      
                     this is not meant to be useful...            01/01/70 00:00      
                     Now I see!            01/01/70 00:00      
                        What's next?            01/01/70 00:00      
      MHO            01/01/70 00:00      
         Correction            01/01/70 00:00      
      One thing I missed ...            01/01/70 00:00      
         yes, and...            01/01/70 00:00      
            pre-ANSI K&R            01/01/70 00:00      
               yes, thanks            01/01/70 00:00      
            Here\'s the K&R chapter            01/01/70 00:00      
   Let\'s make a \'51 core            01/01/70 00:00      
      I like it...            01/01/70 00:00      
         The diagrams are now updated            01/01/70 00:00      
            I thought this is the case...            01/01/70 00:00      
               Bit ops, duplicated registers, and PSW            01/01/70 00:00      
                  I\'d not push SFR into \"internal memory\" at all            01/01/70 00:00      
                     Maybe yes, maybe no            01/01/70 00:00      
                        Certainly no.            01/01/70 00:00      
                           No, certainly            01/01/70 00:00      
                  careful now!            01/01/70 00:00      
                     OT: will there be cheap FPGAs?            01/01/70 00:00      
                        Check ther prices!            01/01/70 00:00      
                           the cost...            01/01/70 00:00      
                              Distributed over the cost of trillions of IC's            01/01/70 00:00      
                     Size vs. Performance            01/01/70 00:00      
                        I think you should do it your way ...            01/01/70 00:00      
                           Bad assumption on my part???            01/01/70 00:00      
                              this is how we see a RAM            01/01/70 00:00      
                                 by way of clarification            01/01/70 00:00      
                              keep instruction set and its implementation apart            01/01/70 00:00      
                                 ???            01/01/70 00:00      
                                    I see what you mean            01/01/70 00:00      
                                       I've almost got it now            01/01/70 00:00      
                                          dunno            01/01/70 00:00      
                                             Dedicated RAM vs flip-flops for SFRs            01/01/70 00:00      
                                          It should have a purpose, should it not?            01/01/70 00:00      
                                             '51 registers R2-R7 are no different...            01/01/70 00:00      
                                                BUT ... he referred only to R0 and R1 ...            01/01/70 00:00      
                                                It\'s all in the approach            01/01/70 00:00      
                                             It does have a purpose            01/01/70 00:00      
                                          Correction            01/01/70 00:00      
                                             I don't think it's impossible...            01/01/70 00:00      
                                                FPGA RAMs            01/01/70 00:00      
                                                   I think I understand that...            01/01/70 00:00      
                                                      It is probably not so easy            01/01/70 00:00      
                                                      bit-split the BRAM            01/01/70 00:00      
                           I think this horse is finally dead            01/01/70 00:00      
                              Be careful not to fool yourself            01/01/70 00:00      
                                 Nobody is fooling anybody            01/01/70 00:00      
                                    Not exactly what I was after, but helpful            01/01/70 00:00      
                                       Out of curiosity, what were you after?            01/01/70 00:00      
                                          I want to understand your approach            01/01/70 00:00      
                                    I try to keep an open mind ...            01/01/70 00:00      
                              dead horses couldn't drag me away            01/01/70 00:00      
                                 A ewe's my aunt            01/01/70 00:00      
                                    You can force the structure to be what you want            01/01/70 00:00      
                                       schematics vs HDL, round 666            01/01/70 00:00      
                                          It's about the money.            01/01/70 00:00      
                                       schematic entry            01/01/70 00:00      
      You may be surprised at how easy it is            01/01/70 00:00      
         It doesn't look too difficult yet ...            01/01/70 00:00      
            different strokes for different folks            01/01/70 00:00      
      Oops - duplicate post            01/01/70 00:00      
   My two cents .. How about Duo/Quad core 8051            01/01/70 00:00      
      Not as simple as that            01/01/70 00:00      
         Just a thought            01/01/70 00:00      
            Exactly!            01/01/70 00:00      
         It's like using a team to do a job            01/01/70 00:00      
            more troubles with multiprocessor...            01/01/70 00:00      
               8051 multi-cores            01/01/70 00:00      
                  Writing code for them would be "interesting" too            01/01/70 00:00      
                  Isn't a '51 core too expensive for this?            01/01/70 00:00      
                     \'multicore\'            01/01/70 00:00      
                        it all depends on the application            01/01/70 00:00      
                           this is not pantyhose            01/01/70 00:00      
                              sure...            01/01/70 00:00      
                     Cost of an 8051 core            01/01/70 00:00      
                        that sounds like pretty expensive to me...            01/01/70 00:00      
               efficiency will surely increase            01/01/70 00:00      
                  How can that be?            01/01/70 00:00      
                     How can that be?            01/01/70 00:00      
                     maybe not "more efficient"            01/01/70 00:00      
                        it might be clever to use a different architecture            01/01/70 00:00      
                           it always MAY be            01/01/70 00:00      
      there are other ways...            01/01/70 00:00      
      One task per CPU is good            01/01/70 00:00      
         you nailed it Russ            01/01/70 00:00      
         that is where things tend fo fall apart            01/01/70 00:00      
   New subtopic - How to initialize block RAM?            01/01/70 00:00      
      there once was a ROM primitive            01/01/70 00:00      
      Initializing BRAMs            01/01/70 00:00      
         re: Initializing BRAMs            01/01/70 00:00      
            re: Initializing RAMs            01/01/70 00:00      
   Update: How the execution unit works            01/01/70 00:00      
   Yet another Verilog question            01/01/70 00:00      
      Yet another Verilog answer            01/01/70 00:00      
         Yet another Verilog thanks            01/01/70 00:00      
            why ... ?            01/01/70 00:00      
   Yo! --- Andy ---- about those fast-carry muxes ...            01/01/70 00:00      
      fast-carry muxes            01/01/70 00:00      
         It's not that simple ...            01/01/70 00:00      
            well ... i don't know.            01/01/70 00:00      
               It depends on what they can do ...            01/01/70 00:00      
                  Now I'm confused.            01/01/70 00:00      
                     it\'s just a documentation issue            01/01/70 00:00      
   Update: Implementation is underway            01/01/70 00:00      
   Update: How to handle C, AC, and OV flags?            01/01/70 00:00      
      there are a couple of ways ...            01/01/70 00:00      
         Can you be more specific?            01/01/70 00:00      
            What I think about your project doesn't matter            01/01/70 00:00      
               Re: what you think doesn't matter            01/01/70 00:00      
                  Now ... please don\'t take this as personal ...            01/01/70 00:00      
                     Okay            01/01/70 00:00      
               if you insist on using schematic entry            01/01/70 00:00      
                  If only it were that simple            01/01/70 00:00      
      you can do it "symptomatically"... but I wouldn't            01/01/70 00:00      
         More on the flags            01/01/70 00:00      
            wrong place ... sorry!            01/01/70 00:00      
      Very ungracefully            01/01/70 00:00      
      Historically...            01/01/70 00:00      
         The key, IMHO, is in the number of data paths            01/01/70 00:00      
            ... or ...            01/01/70 00:00      
               in low production, maybe            01/01/70 00:00      
                  this depends on approach            01/01/70 00:00      
               uC prototyping using FPGAs            01/01/70 00:00      
                  what challenge?            01/01/70 00:00      
         re: Historically            01/01/70 00:00      
            the REAL learning is in what synthesis tools do            01/01/70 00:00      
               Indeed            01/01/70 00:00      
                  xilinx synthesiser and others            01/01/70 00:00      
                  tedium ... yes, that's what it is ...            01/01/70 00:00      
   Update - the core now runs on the FPGA            01/01/70 00:00      
      How much code space does it support?            01/01/70 00:00      
         Re: How much code space does it support?            01/01/70 00:00      
            How about a testbench?            01/01/70 00:00      
               Good ideas            01/01/70 00:00      
            some ideas            01/01/70 00:00      
               Please clarify            01/01/70 00:00      
                  make it vonNeumann...            01/01/70 00:00      
                     I still don\'t get it            01/01/70 00:00      
                        let's not complicate things            01/01/70 00:00      
                           Re: let's not complicate things            01/01/70 00:00      
                              I'm not sure why you'd want to do that ...            01/01/70 00:00      
                              a way how to leave problems to somebody else            01/01/70 00:00      
                                 Von Neumann            01/01/70 00:00      
                              test code            01/01/70 00:00      
                                 Thanks            01/01/70 00:00      
                        Thanks ... it\\\'s clear now            01/01/70 00:00      
      8501 self tests            01/01/70 00:00      
      Another (minor) update            01/01/70 00:00      
         you need external bus            01/01/70 00:00      

Back to Subject List