MinecraftHDL icon indicating copy to clipboard operation
MinecraftHDL copied to clipboard

Simple 2-bit adder fails

Open s5bug opened this issue 6 years ago • 2 comments

[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: minecrafthdl.MHDLException: Unknown Cell:ManuallyAdd
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at GraphBuilder.GraphBuilder.resolveType(GraphBuilder.java:762)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at GraphBuilder.GraphBuilder.buildGraph(GraphBuilder.java:132)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at minecrafthdl.block.blocks.Synthesizer.synth_gen(Synthesizer.java:119)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at minecrafthdl.block.blocks.Synthesizer.func_189540_a(Synthesizer.java:69)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_189546_a(BlockStateContainer.java:463)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.world.World.func_180496_d(World.java:519)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.world.World.func_175685_c(World.java:470)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.world.World.func_175722_b(World.java:423)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.world.World.markAndNotifyBlock(World.java:368)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.world.World.func_180501_a(World.java:349)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.block.BlockButton.func_180639_a(BlockButton.java:156)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.server.management.PlayerInteractionManager.func_187251_a(PlayerInteractionManager.java:451)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.network.NetHandlerPlayServer.func_184337_a(NetHandlerPlayServer.java:679)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.func_148833_a(SourceFile:55)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.func_148833_a(SourceFile:11)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.util.Util.func_181617_a(SourceFile:45)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:668)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:613)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:149)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:471)
[01:03:47] [Server thread/INFO] [STDERR]: [minecrafthdl.block.blocks.Synthesizer:synth_gen:129]: 	at java.lang.Thread.run(Thread.java:748)

Verilog:

module ManuallyAdd(
  input   io_inputA,
  input   io_inputB,
  input   io_inputC,
  output  io_output,
  output  io_carry
);
  wire  _T; // @[Adder.scala 36:30]
  wire  _T_1; // @[Adder.scala 36:27]
  wire  _T_2; // @[Adder.scala 36:44]
  wire  _T_3; // @[Adder.scala 36:41]
  wire  _T_4; // @[Adder.scala 36:60]
  wire  _T_5; // @[Adder.scala 36:71]
  wire  _T_7; // @[Adder.scala 36:84]
  wire  _T_8; // @[Adder.scala 36:56]
  wire  _T_9; // @[Adder.scala 36:113]
  wire  _T_10; // @[Adder.scala 36:126]
  wire  _T_13; // @[Adder.scala 37:54]
  wire  _T_14; // @[Adder.scala 37:40]
  wire  _T_15; // @[Adder.scala 37:82]
  assign _T = io_inputB == 1'h0; // @[Adder.scala 36:30]
  assign _T_1 = io_inputA & _T; // @[Adder.scala 36:27]
  assign _T_2 = io_inputC == 1'h0; // @[Adder.scala 36:44]
  assign _T_3 = _T_1 & _T_2; // @[Adder.scala 36:41]
  assign _T_4 = io_inputA == 1'h0; // @[Adder.scala 36:60]
  assign _T_5 = _T_4 & io_inputB; // @[Adder.scala 36:71]
  assign _T_7 = _T_5 & _T_2; // @[Adder.scala 36:84]
  assign _T_8 = _T_3 | _T_7; // @[Adder.scala 36:56]
  assign _T_9 = io_inputA & io_inputB; // @[Adder.scala 36:113]
  assign _T_10 = _T_9 & io_inputC; // @[Adder.scala 36:126]
  assign _T_13 = io_inputA & io_inputC; // @[Adder.scala 37:54]
  assign _T_14 = _T_9 | _T_13; // @[Adder.scala 37:40]
  assign _T_15 = io_inputB & io_inputC; // @[Adder.scala 37:82]
  assign io_output = _T_8 | _T_10; // @[Adder.scala 36:13]
  assign io_carry = _T_14 | _T_15; // @[Adder.scala 37:12]
endmodule
module Adder(
  input   io_inputA_0,
  input   io_inputA_1,
  input   io_inputB_0,
  input   io_inputB_1,
  output  io_output_0,
  output  io_output_1,
  output  io_output_2
);
  wire  ManuallyAdd_io_inputA; // @[Adder.scala 14:53]
  wire  ManuallyAdd_io_inputB; // @[Adder.scala 14:53]
  wire  ManuallyAdd_io_inputC; // @[Adder.scala 14:53]
  wire  ManuallyAdd_io_output; // @[Adder.scala 14:53]
  wire  ManuallyAdd_io_carry; // @[Adder.scala 14:53]
  wire  ManuallyAdd_1_io_inputA; // @[Adder.scala 14:53]
  wire  ManuallyAdd_1_io_inputB; // @[Adder.scala 14:53]
  wire  ManuallyAdd_1_io_inputC; // @[Adder.scala 14:53]
  wire  ManuallyAdd_1_io_output; // @[Adder.scala 14:53]
  wire  ManuallyAdd_1_io_carry; // @[Adder.scala 14:53]
  ManuallyAdd ManuallyAdd ( // @[Adder.scala 14:53]
    .io_inputA(ManuallyAdd_io_inputA),
    .io_inputB(ManuallyAdd_io_inputB),
    .io_inputC(ManuallyAdd_io_inputC),
    .io_output(ManuallyAdd_io_output),
    .io_carry(ManuallyAdd_io_carry)
  );
  ManuallyAdd ManuallyAdd_1 ( // @[Adder.scala 14:53]
    .io_inputA(ManuallyAdd_1_io_inputA),
    .io_inputB(ManuallyAdd_1_io_inputB),
    .io_inputC(ManuallyAdd_1_io_inputC),
    .io_output(ManuallyAdd_1_io_output),
    .io_carry(ManuallyAdd_1_io_carry)
  );
  assign io_output_0 = ManuallyAdd_io_output; // @[Adder.scala 19:22]
  assign io_output_1 = ManuallyAdd_1_io_output; // @[Adder.scala 19:22]
  assign io_output_2 = ManuallyAdd_1_io_carry; // @[Adder.scala 14:19]
  assign ManuallyAdd_io_inputA = io_inputA_0; // @[Adder.scala 17:23]
  assign ManuallyAdd_io_inputB = io_inputB_0; // @[Adder.scala 18:23]
  assign ManuallyAdd_io_inputC = 1'h0; // @[Adder.scala 16:23]
  assign ManuallyAdd_1_io_inputA = io_inputA_1; // @[Adder.scala 17:23]
  assign ManuallyAdd_1_io_inputB = io_inputB_1; // @[Adder.scala 18:23]
  assign ManuallyAdd_1_io_inputC = ManuallyAdd_io_carry; // @[Adder.scala 16:23]
endmodule

Yes, it's generated Verilog, but a generated 1-bit adder works.

Also, adding two Vectors fails (input [1:0] a, input [1:0] b, output [2:0] c, assign c = a + b) with "To many input pins".

s5bug avatar Jan 01 '20 09:01 s5bug

This Verilog surprisingly works fine until it has to process the actual inputs and outputs which use Vectors.

SevenSegmentDisplay.zip

s5bug avatar Jan 01 '20 09:01 s5bug

Seems the issue is it can't do custom cells/other modules as cells.

s5bug avatar Jan 01 '20 21:01 s5bug