首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用多路复用的Nand2tetris算术逻辑单元实现

不使用多路复用的Nand2tetris算术逻辑单元实现
EN

Stack Overflow用户
提问于 2016-09-12 20:18:56
回答 1查看 613关注 0票数 0

我试图在不使用多路复用的情况下实现Hack ALU,但我无法将hdl上传到模拟器中。任何帮助都将不胜感激。谢谢

代码语言:javascript
复制
CHIP ALU {
    IN  
        x[16], y[16],  // 16-bit inputs        
        zx, // zero the x input?
        nx, // negate the x input?
        zy, // zero the y input?
        ny, // negate the y input?
        f,  // compute out = x + y (if 1) or x & y (if 0)
        no; // negate the out output?

    OUT 
        out[16], // 16-bit output
        zr, // 1 if (out == 0), 0 otherwise
        ng; // 1 if (out < 0),  0 otherwise

    PARTS:
    // Put you code here:

  //To zero x or not

  Not(in=zx, out=notzx);
  And16(a=x, b[0..15]=notzx, out=zerox);

  //To zero y or not
  Not(in=zy, out=notzy);
  And16(a=y, b[0..15]=notzy, out=zeroy);

  //Negate x or not 

  Xor16(a=zerox, b[0..15]=nx, out=negatex);


  //Negate y or not
  Xor16(a=zeroy, b[0..15]=ny, out=negatey);

  Not(in=f, out=fnot);

  //"and" or "add" x?

  And16(a=negatex, b[0..15]=f, out=addx);
  And16(a=negatex, b[0..15]=fnot, out=andx);

  //"and" or "add" y

  And16(a=negatey, b[0..15]=f, out=addy);
  And16(a=negatey, b[0..15]=fnot, out=andy);

  //adding x and y

  Add16(a=addx, b=addy, out=sum);

  //anding x and y
  And16(a=andx, b=andy, out=outxandy);

  //output of adding or anding

  Or16(a=sum, b=outxandy, out=out1);

  //Negating using "Xor"

  Xor16(a=out1, b[0..15]=no, out=out2);
  Not(in=out2[15], out=ng);
  Or8Way(in=out2[0..7], out=zr1);
  Or8Way(in=out2[8..15], out=zr2);
  Or(a=zr1, b=zr2, out=zr);  
  And16(a=out2, b=out2, out=out);
EN

回答 1

Stack Overflow用户

发布于 2016-09-12 20:35:17

像b0..15=notzx这样的输入在HDL语言中是无效的,因为赋值的两侧不具有相同的宽度。宽度可变的值只有true和false。

您可以尝试如下所示:

And16(a=x,b=notzx,b1=notzx,...,b15=notzx,out=zerox);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39450155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档