Skip to main content
added 155 characters in body
Source Link
BipedalJoe
  • 233
  • 2
  • 8

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. )

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. )

Is a temporary register used (the "memory address register" could load and output in two separate steps), or is the timing issue just not a problem and tends to work out regardless?

Example LDA with two step "memory address register",

      when LDA_1 =>           -- Load accumulator from operand
        addr_in <= dr;
        
        state := LDA_2;
      when LDA_2 =>
        addr_out <= addr_in;
        
        state := LDA_3;
      when LDA_3 =>
        pc <= pc + one;
        addr_outaccu <= pc + one;dr;
        
        state := load_opcode;

Timing with temporary "address in" register illustrated below,

enter image description here

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. )

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. )

Is a temporary register used (the "memory address register" could load and output in two separate steps), or is the timing issue just not a problem and tends to work out regardless?

Example LDA with two step "memory address register",

      when LDA_1 =>           -- Load accumulator from operand
        addr_in <= dr;
        
        state := LDA_2;
      when LDA_2 =>
        addr_out <= addr_in;
        
        state := LDA_3;
      when LDA_3 =>
        pc <= pc + one;
        addr_out <= pc + one;
        
        state := load_opcode;

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. )

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. )

Is a temporary register used (the "memory address register" could load and output in two separate steps), or is the timing issue just not a problem and tends to work out regardless?

Example LDA with two step "memory address register",

      when LDA_1 =>           -- Load accumulator from operand
        addr_in <= dr;
        
        state := LDA_2;
      when LDA_2 =>
        addr_out <= addr_in;
        
        state := LDA_3;
      when LDA_3 =>
        accu <= dr;
        
        state := load_opcode;

Timing with temporary "address in" register illustrated below,

enter image description here

added 441 characters in body
Source Link
BipedalJoe
  • 233
  • 2
  • 8

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. )

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. ) 

Is the memory address register a "two state"temporary register that loads theused (the "memory address on one clock cycle,register" could load and outputs the new one on the nextoutput in two separate steps), or doesis the timing tendissue just not a problem and tends to work out regardless?

Illustrated in timing diagram below.Example LDA with two step "memory address register",

enter image description here

      when LDA_1 =>           -- Load accumulator from operand
        addr_in <= dr;
        
        state := LDA_2;
      when LDA_2 =>
        addr_out <= addr_in;
        
        state := LDA_3;
      when LDA_3 =>
        pc <= pc + one;
        addr_out <= pc + one;
        
        state := load_opcode;

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. ) How is this usually solved (could be different across different CPUs but there are probably trends. ) Is the memory address register a "two state" register that loads the address on one clock cycle, and outputs the new one on the next, or does the timing tend to work out regardless?

Illustrated in timing diagram below.

enter image description here

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. )

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. ) 

Is a temporary register used (the "memory address register" could load and output in two separate steps), or is the timing issue just not a problem and tends to work out regardless?

Example LDA with two step "memory address register",

      when LDA_1 =>           -- Load accumulator from operand
        addr_in <= dr;
        
        state := LDA_2;
      when LDA_2 =>
        addr_out <= addr_in;
        
        state := LDA_3;
      when LDA_3 =>
        pc <= pc + one;
        addr_out <= pc + one;
        
        state := load_opcode;
added 75 characters in body
Source Link
BipedalJoe
  • 233
  • 2
  • 8

When an operand encodes an address, such asand that address changes the "memory address register" and the word in a Load accumulator (LDA) instructionmemory being addressed, it seems like timing issues could be a temporary address storage register is neededproblem. OtherwiseExamples, reading the address into standardLDA instruction (load address register should result in the addressedfrom memory changing while reading the, load word at thefrom that address.

Illustrated in timing diagram below.

enter image description here

) How is this usually solved (could be different across different CPUs but there are probably trends. ) Is itthe memory address register a temporary"two state" register that loads the address on one clock cycle, and outputs the new one on the next, or does the timing tend to work out regardless?

Illustrated in timing diagram below.

enter image description here

When an operand encodes an address, such as in a Load accumulator (LDA) instruction, it seems like a temporary address storage register is needed. Otherwise, reading the address into standard address register should result in the addressed memory changing while reading the word at the address.

Illustrated in timing diagram below.

enter image description here

How is this usually solved (could be different across different CPUs but there are probably trends. ) Is it a temporary register, or does the timing tend to work out regardless?

When an operand encodes an address, and that address changes the "memory address register" and the word in memory being addressed, it seems like timing issues could be a problem. Examples, LDA instruction (load address from memory, load word from that address. ) How is this usually solved (could be different across different CPUs but there are probably trends. ) Is the memory address register a "two state" register that loads the address on one clock cycle, and outputs the new one on the next, or does the timing tend to work out regardless?

Illustrated in timing diagram below.

enter image description here

Source Link
BipedalJoe
  • 233
  • 2
  • 8
Loading