|
|
Hello,
I am currently trying to get my RAM8 to work, however I am unfortunately failing. I have already discovered what the problem is, but in order to fix it it would require me to mess with the registers, which is something I rather not do and I presume I am not supposed to either.
This is my current design:
CHIP RAM8 {
IN in[16], load, address[3];
OUT out[16];
PARTS:
DMux8Way16(in=in, sel=address, a=a, b=b, c=c, d=d, e=e, f=f, g=g, h=h);
Register(in=a, load=load, out=aa);
Register(in=b, load=load, out=bb);
Register(in=c, load=load, out=cc);
Register(in=d, load=load, out=dd);
Register(in=e, load=load, out=ee);
Register(in=f, load=load, out=ff);
Register(in=g, load=load, out=gg);
Register(in=h, load=load, out=hh);
Mux8Way16(a=aa, b=bb, c=cc, d=dd, e=ee, f=ff, g=gg, h=hh, sel=address, out=out);
}
As you can see, every time load equals true, ALL of the registers are updated, but since every way of DMux8Way16 except for the one in which 'in' is inserted is null, every other register is set to null. How do I solve this without having to resort to changing the registers?
Regards,
Sebastian
PS: My compliments on the book. So far it has been a very satisfying learning experience!
|
|
Sebastian,
Try starting with a DMux8Way that is 1-bit only. The outputs a..h then become the load inputs for each of the 8 registers. The in for each register should be the same.
|
|
I had not even considered using a DMux8Way in such a way. Thanks a bunch, Evan! This proves just how important a thorough analyzation is!
|
|
Thanks Sebastian and Evan.
I was starting to use the Dmux but since I stop and then continue months after I kind of loose track of things and it gets harder and harder to to the chips.
At least I was going in the right direction :D
|
|
Thanks Evan, that's what the Dmux was for!
|
|
Hi Evan,
I have got as far as the Ram8. I have had some distractions and have "lost the thread".
After going back to the Register and DMux, I'm still stuck.
I'd sooooo appreciate any help or hints.
Following your hint to Sebastian, I came up with the following:
PARTS:
DMux8Way(sel=address,a=a,b=b,c=c,d=d,e=e,f=f,g=g,h=h);
Register(in=in,load=a,out=aa);
Register(in=in,load=b,out=bb);
Register(in=in,load=c,out=cc);
Register(in=in,load=d,out=dd);
Register(in=in,load=e,out=ee);
Register(in=in,load=f,out=ff);
Register(in=in,load=g,out=gg);
Register(in=in,load=h,out=hh);
}
Thanks
Mike
|
Administrator
|
The address needs to do two things: it must control which Register gets loaded when RAM8's load is active, and it must control which Register's output appears on the RAM8 output.
--Mark
|
|
mike2549, you're close. As Mark says above, you now just need to handle what happens with the outputs of those registers. aa, bb, etc need to be routed to out... somehow.
|
|
Hi,
Thanks for these hints. Sorry - I still don't get it!
After lots of gyrations, I added the same last line as did Sebastian:
"Mux8Way16(a=aa,b=bb,c=cc,d=dd,e=ee,f=ff,g=gg,h=hh,sel=address,out=out);"
Where can I turn for enlightenment?
Thanks
Mike
|
|
Think about RAM8 itself. It has a data input, a data output, and accepts some address signals.
What should be connected to RAM8's out? And why?
|
|
This post was updated on .
CONTENTS DELETED
The author has deleted this message.
|
|
Hi gust, would you mind deleting this post? We try to refrain from posting solutions here on the forum.
|
|
Hi ybakos and Mark,
Thanks for your help and patience. I eventually stumbled upon the solutions for the memory chips and have completed, including the RAM16K. But I've gotta say that I did not "get" your directions - only encouragement to persist (which was valuable).
gust, thanks for your attempted rescue. :-)
Onward and upward!
Mike
|
|
Thank you guys for the nice discussion and keeping the forum free of solutions.
Sometimes it just helps to listen/read some of the discussion on a topic.
Even years after the topic seems closed ;)
Book is a great learning experience so far!
|
|