0

マルチプレクサを使用せずにハック ALU を実装しようとしていますが、hdl をシミュレータにアップロードできません。どんな助けでも大歓迎です。ありがとう

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);
4

1 に答える 1

0

b[0..15]=notzx のような入力は HDL では有効ではありません。これは、代入の両側の幅が同じでないためです。可変幅を持つ唯一の値は true と false です。

次のようなものを試すことができます。

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

于 2016-09-12T12:35:17.130 に答える