долото не генерирует соответствующий Verilog RTL - PullRequest
1 голос
/ 08 марта 2020

Я хочу добавить модуль делителя тактовых импульсов к модулю конечного автомата с помощью долота, но я столкнулся с проблемой, заключающейся в том, что код генерации долота Verilog не включает модуль делителя тактовых импульсов.

Ниже приведено модуль моего конечного автомата

package taillights
import  chisel3._

class tailLightStateMachine extends Module{
  val io = IO(new Bundle{
    val left = Input(Bool())
    val right = Input(Bool())
    val leftLight = Output(UInt(3.W))
    val rightLight = Output(UInt(3.W))
  })
  val leftLightState = Module(new singalTailLightStateMachine)
  val rightLightState = Module(new singalTailLightStateMachine)

  val clockDivider = Module(new ClockDivider(200))


  clockDivider.io.clock := clock
  clockDivider.io.reset := reset
  leftLightState.io.clk := clockDivider.io.outClock
  rightLightState.io.clk := clockDivider.io.outClock

  leftLightState.io.is_on := io.left
  rightLightState.io.is_on := io.right

  io.leftLight := leftLightState.io.light
  io.rightLight := rightLightState.io.light

}

Удар сгенерирован Verilog-код (это так ужасно) Я не думаю, что он включает в себя модуль делителя часов

module singalTailLightStateMachine(
  input        clock,
  input        reset,
  input        io_is_on,
  output [2:0] io_light
);
  reg [1:0] state; // @[singalTailLightStateMachine.scala 11:22]
  reg [31:0] _RAND_0;
  wire  _T; // @[Conditional.scala 37:30]
  wire  _T_1; // @[Conditional.scala 37:30]
  wire  _T_2; // @[Conditional.scala 37:30]
  wire  _T_3; // @[Conditional.scala 37:30]
  assign _T = 2'h0 == state; // @[Conditional.scala 37:30]
  assign _T_1 = 2'h1 == state; // @[Conditional.scala 37:30]
  assign _T_2 = 2'h2 == state; // @[Conditional.scala 37:30]
  assign _T_3 = 2'h3 == state; // @[Conditional.scala 37:30]
  assign io_light = {{1'd0}, state}; // @[singalTailLightStateMachine.scala 13:14]
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
  integer initvar;
`endif
`ifndef SYNTHESIS
initial begin
  `ifdef RANDOMIZE
    `ifdef INIT_RANDOM
      `INIT_RANDOM
    `endif
    `ifndef VERILATOR
      `ifdef RANDOMIZE_DELAY
        #`RANDOMIZE_DELAY begin end
      `else
        #0.002 begin end
      `endif
    `endif
  `ifdef RANDOMIZE_REG_INIT
  _RAND_0 = {1{`RANDOM}};
  state = _RAND_0[1:0];
  `endif // RANDOMIZE_REG_INIT
  `endif // RANDOMIZE
end // initial
`endif // SYNTHESIS
  always @(posedge clock) begin
    if (reset) begin
      state <= 2'h0;
    end else if (_T) begin
      if (io_is_on) begin
        state <= 2'h1;
      end
    end else if (_T_1) begin
      state <= 2'h2;
    end else if (_T_2) begin
      state <= 2'h3;
    end else if (_T_3) begin
      state <= 2'h0;
    end
  end
endmodule
module tailLightStateMachine(
  input        clock,
  input        reset,
  input        io_left,
  input        io_right,
  output [2:0] io_leftLight,
  output [2:0] io_rightLight
);
  wire  leftLightState_clock; // @[tailLightStateMachine.scala 11:30]
  wire  leftLightState_reset; // @[tailLightStateMachine.scala 11:30]
  wire  leftLightState_io_is_on; // @[tailLightStateMachine.scala 11:30]
  wire [2:0] leftLightState_io_light; // @[tailLightStateMachine.scala 11:30]
  wire  rightLightState_clock; // @[tailLightStateMachine.scala 12:31]
  wire  rightLightState_reset; // @[tailLightStateMachine.scala 12:31]
  wire  rightLightState_io_is_on; // @[tailLightStateMachine.scala 12:31]
  wire [2:0] rightLightState_io_light; // @[tailLightStateMachine.scala 12:31]
  singalTailLightStateMachine leftLightState ( // @[tailLightStateMachine.scala 11:30]
    .clock(leftLightState_clock),
    .reset(leftLightState_reset),
    .io_is_on(leftLightState_io_is_on),
    .io_light(leftLightState_io_light)
  );
  singalTailLightStateMachine rightLightState ( // @[tailLightStateMachine.scala 12:31]
    .clock(rightLightState_clock),
    .reset(rightLightState_reset),
    .io_is_on(rightLightState_io_is_on),
    .io_light(rightLightState_io_light)
  );
  assign io_leftLight = leftLightState_io_light; // @[tailLightStateMachine.scala 25:16]
  assign io_rightLight = rightLightState_io_light; // @[tailLightStateMachine.scala 26:17]
  assign leftLightState_clock = clock;
  assign leftLightState_reset = reset;
  assign leftLightState_io_is_on = io_left; // @[tailLightStateMachine.scala 22:27]
  assign rightLightState_clock = clock;
  assign rightLightState_reset = reset;
  assign rightLightState_io_is_on = io_right; // @[tailLightStateMachine.scala 23:28]
endmodule

...