Я хочу добавить модуль делителя тактовых импульсов к модулю конечного автомата с помощью долота, но я столкнулся с проблемой, заключающейся в том, что код генерации долота 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