Hdl 什么';我的DMUX4方式有什么问题?
它似乎接近工作,只是在7号线出了点问题Hdl 什么';我的DMUX4方式有什么问题?,hdl,mux,nand2tetris,Hdl,Mux,Nand2tetris,它似乎接近工作,只是在7号线出了点问题 /** * 4-way demultiplexor. * {a,b,c,d} = {in,0,0,0} if sel==00 * {0,in,0,0} if sel==01 * {0,0,in,0} if sel==10 * {0,0,0,in} if sel==11 */ CHIP DMux4Way { IN in, sel[2]; OUT a, b,
/**
* 4-way demultiplexor.
* {a,b,c,d} = {in,0,0,0} if sel==00
* {0,in,0,0} if sel==01
* {0,0,in,0} if sel==10
* {0,0,0,in} if sel==11
*/
CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;
PARTS:
DMux(in = in, sel = sel[0], a = out1, b = out2);
DMux(in = out1, sel = sel[1], a = a, b = b);
DMux(in = out2, sel = sel[1], a = c, b = d);
}
我已经按照如下方式实现了我的DMux,我只是将其当作一棵树来使用:
/**
* Dmultiplexor.
* {a,b} = {in,0} if sel==0
* {0,in} if sel==1
*/
CHIP DMux {
IN in, sel;
OUT a, b;
PARTS:
Not(in = sel, out = notsel);
And(a = in, b = notsel, out = a);
And(a = in, b = sel, out = b);
}
你的想法是对的!但是您首先缩小了sel[0]的范围,而不是sel[1],它对应于左列 我知道我迟到了 编辑:根据下面的请求添加固定代码。谢谢你的反馈
CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;
PARTS:
DMux(in = in, sel = sel[1], a = out1, b = out2);
DMux(in = out1, sel = sel[0], a = a, b = b);
DMux(in = out2, sel = sel[0], a = c, b = d);
}
缩小真值表中左边列的范围(即sel[1];记着计数时从右边开始),实际上是将选项从中间的右边分割开来另一种更接近OP试图做的事情的方法(以及他错过正确的部分): 将输出中的b和c交换到不同的行,如下所示:
CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;
PARTS:
// Put your code here:
DMux(in=in, sel=sel[0], a=dOut1, b=dOut2);
DMux(in=dOut1, sel=sel[1], a=a, b=c);
DMux(in=dOut2, sel=sel[1], a=b, b=d);
}
你可以从真值表中看出,考虑到你正在缩小sel[0]的范围,这也是有道理的,你想用哪种HDL来写你的东西?它看起来既不像VHDL也不像Verilog…它似乎就是NAND2TTERIS课程中使用的代码:哇,我写的代码和你的完全一样。似乎我们都误解了sel[0]和sel[1]。在[0,1]中,sel[0]=1,sel[1]=0。如果没有其他人回答,那么迟到没什么错!您可能还需要考虑(部分)张贴纠正代码,以使其尽可能清晰。在这种特殊情况下,您不应该发布解决方案。我不确定你是否知道,但作者明确要求你不要这样做。@AdrianWragg:我完全同意你的看法,但即使有人回答了,晚回答也没什么错。任何增加q/a价值的事情都可以,不管是晚还是早。