|
楼主 |
发表于 2021-9-6 17:04:09
|
显示全部楼层
生成的verilog文件内容如下:
module DoubleBuffer(
input clock,
input reset,
output io_enq_ready,
input io_enq_valid,
input [1:0] io_enq_bits,
input io_deq_ready,
output io_deq_valid,
output [1:0] io_deq_bits
);
reg [1:0] stateReg; // @[DoubleBufferFifo.scala 14:27]
reg [31:0] _RAND_0;
reg [1:0] dataReg; // @[DoubleBufferFifo.scala 15:22]
reg [31:0] _RAND_1;
reg [1:0] shadowReg; // @[DoubleBufferFifo.scala 16:24]
reg [31:0] _RAND_2;
wire _T = 2'h0 == stateReg; // @[Conditional.scala 37:30]
wire _T_1 = 2'h1 == stateReg; // @[Conditional.scala 37:30]
wire _T_2 = ~io_enq_valid; // @[DoubleBufferFifo.scala 25:30]
wire _T_3 = io_deq_ready & _T_2; // @[DoubleBufferFifo.scala 25:27]
wire _T_4 = io_deq_ready & io_enq_valid; // @[DoubleBufferFifo.scala 28:27]
wire _T_5 = ~io_deq_ready; // @[DoubleBufferFifo.scala 32:14]
wire _T_6 = _T_5 & io_enq_valid; // @[DoubleBufferFifo.scala 32:28]
wire _T_7 = 2'h2 == stateReg; // @[Conditional.scala 37:30]
wire _T_8 = stateReg == 2'h0; // @[DoubleBufferFifo.scala 44:31]
wire _T_9 = stateReg == 2'h1; // @[DoubleBufferFifo.scala 44:53]
wire _T_12 = stateReg == 2'h2; // @[DoubleBufferFifo.scala 45:51]
assign io_enq_ready = _T_8 | _T_9; // @[DoubleBufferFifo.scala 44:18]
assign io_deq_valid = _T_9 | _T_12; // @[DoubleBufferFifo.scala 45:18]
assign io_deq_bits = dataReg; // @[DoubleBufferFifo.scala 46:17]
`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}};
stateReg = _RAND_0[1:0];
`endif // RANDOMIZE_REG_INIT
`ifdef RANDOMIZE_REG_INIT
_RAND_1 = {1{`RANDOM}};
dataReg = _RAND_1[1:0];
`endif // RANDOMIZE_REG_INIT
`ifdef RANDOMIZE_REG_INIT
_RAND_2 = {1{`RANDOM}};
shadowReg = _RAND_2[1:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`endif // SYNTHESIS
always @(posedge clock) begin
if (reset) begin
stateReg <= 2'h0;
end else if (_T) begin
if (io_enq_valid) begin
stateReg <= 2'h1;
end
end else if (_T_1) begin
if (_T_6) begin
stateReg <= 2'h2;
end else if (_T_4) begin
stateReg <= 2'h1;
end else if (_T_3) begin
stateReg <= 2'h0;
end
end else if (_T_7) begin
if (io_deq_ready) begin
stateReg <= 2'h1;
end
end
if (_T) begin
if (io_enq_valid) begin
dataReg <= io_enq_bits;
end
end else if (!(_T_1)) begin
if (_T_7) begin
if (io_deq_ready) begin
dataReg <= shadowReg;
end
end
end
if (!(_T)) begin
if (_T_1) begin
if (_T_6) begin
shadowReg <= io_enq_bits;
end else if (_T_4) begin
shadowReg <= io_enq_bits;
end
end
end
end
endmodule
module DoubleBufferFifo(
input clock,
input reset,
output io_enq_ready,
input io_enq_valid,
input [1:0] io_enq_bits,
input io_deq_ready,
output io_deq_valid,
output [1:0] io_deq_bits
);
wire DoubleBuffer_clock; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_reset; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_io_enq_ready; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_io_enq_valid; // @[DoubleBufferFifo.scala 49:58]
wire [1:0] DoubleBuffer_io_enq_bits; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_io_deq_ready; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_io_deq_valid; // @[DoubleBufferFifo.scala 49:58]
wire [1:0] DoubleBuffer_io_deq_bits; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_clock; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_reset; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_io_enq_ready; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_io_enq_valid; // @[DoubleBufferFifo.scala 49:58]
wire [1:0] DoubleBuffer_1_io_enq_bits; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_io_deq_ready; // @[DoubleBufferFifo.scala 49:58]
wire DoubleBuffer_1_io_deq_valid; // @[DoubleBufferFifo.scala 49:58]
wire [1:0] DoubleBuffer_1_io_deq_bits; // @[DoubleBufferFifo.scala 49:58]
DoubleBuffer DoubleBuffer ( // @[DoubleBufferFifo.scala 49:58]
.clock(DoubleBuffer_clock),
.reset(DoubleBuffer_reset),
.io_enq_ready(DoubleBuffer_io_enq_ready),
.io_enq_valid(DoubleBuffer_io_enq_valid),
.io_enq_bits(DoubleBuffer_io_enq_bits),
.io_deq_ready(DoubleBuffer_io_deq_ready),
.io_deq_valid(DoubleBuffer_io_deq_valid),
.io_deq_bits(DoubleBuffer_io_deq_bits)
);
DoubleBuffer DoubleBuffer_1 ( // @[DoubleBufferFifo.scala 49:58]
.clock(DoubleBuffer_1_clock),
.reset(DoubleBuffer_1_reset),
.io_enq_ready(DoubleBuffer_1_io_enq_ready),
.io_enq_valid(DoubleBuffer_1_io_enq_valid),
.io_enq_bits(DoubleBuffer_1_io_enq_bits),
.io_deq_ready(DoubleBuffer_1_io_deq_ready),
.io_deq_valid(DoubleBuffer_1_io_deq_valid),
.io_deq_bits(DoubleBuffer_1_io_deq_bits)
);
assign io_enq_ready = DoubleBuffer_io_enq_ready; // @[DoubleBufferFifo.scala 63:10]
assign io_deq_valid = DoubleBuffer_1_io_deq_valid; // @[DoubleBufferFifo.scala 68:10]
assign io_deq_bits = DoubleBuffer_1_io_deq_bits; // @[DoubleBufferFifo.scala 68:10]
assign DoubleBuffer_clock = clock;
assign DoubleBuffer_reset = reset;
assign DoubleBuffer_io_enq_valid = io_enq_valid; // @[DoubleBufferFifo.scala 63:10]
assign DoubleBuffer_io_enq_bits = io_enq_bits; // @[DoubleBufferFifo.scala 63:10]
assign DoubleBuffer_io_deq_ready = DoubleBuffer_1_io_enq_ready; // @[DoubleBufferFifo.scala 57:25]
assign DoubleBuffer_1_clock = clock;
assign DoubleBuffer_1_reset = reset;
assign DoubleBuffer_1_io_enq_valid = DoubleBuffer_io_deq_valid; // @[DoubleBufferFifo.scala 57:25]
assign DoubleBuffer_1_io_enq_bits = DoubleBuffer_io_deq_bits; // @[DoubleBufferFifo.scala 57:25]
assign DoubleBuffer_1_io_deq_ready = io_deq_ready; // @[DoubleBufferFifo.scala 68:10]
endmodule
|
|