Update InstrQueue.sv

This commit is contained in:
Hooo1941 2021-07-10 12:43:32 +08:00
parent 1b9ccd10af
commit aa092c4b3f

View File

@ -1,5 +1,4 @@
`include "defines.svh"
module InstrQueue (
input logic clk,
input logic rst,
@ -41,7 +40,7 @@ readygo to valid
1out: out1<-instr1 instr1<-instr2 instr2<-instr3 instr3<-in1
2out: out1<-instr1 out2<-instr2 instr1<-instr3 instr3<-instr4 instr4<-in1
æ ç´é?
<EFBFBD>?
0:
0out: instr1<-in1, instr2<-in2
1out: instr1<-in1, instr2<-in2
@ -67,130 +66,179 @@ readygo to valid
parameter DEPTH = 2, MAX_COUNT = 2'b11;
word_t di1, di2, di3, di4, qi1, qi2, qi3, qi4;
logic dv1, dv2, dv3, dv4, qv1, qv2, qv3, qv4;
logic en1, en2, en3, en4;
word_t dp1, dp2, dp3, dp4, qp1, qp2, qp3, qp4;
// wire [5:0] judge = {qv4, qv3, qv2, qv1, HandShake_out1.allowin, HandShake_out2.allowin};
// ffen #(6) ffj (
// clk,
// {qv4, qv3, qv2, qv1, HandShake_out1.allowin, HandShake_out2.allowin},
// 1'b1,
// judge
// );
logic [5:0] judge;
always_ff @(negedge clk) judge <= {qv4, qv3, qv2, qv1, HandShake_out1.allowin, HandShake_out2.allowin};
wire [5:0] judge = {qv4, qv3, qv2, qv1, HandShake_out1.allowin, HandShake_out2.allowin};
assign HandShake_out1.readygo = judge[1] & judge[2];
assign HandShake_out2.readygo = judge[0] & judge[3];
assign out1 = qi1;
assign out2 = qi2;
assign out1 = qi1;
assign out2 = qi2;
assign pout1 = qp1;
assign pout2 = qp2;
assign HandShake_in1.allowin = ~judge[5] | judge[1];
assign HandShake_in2.allowin = (~judge[4] | judge[1] & (~judge[5] | judge[0]));
assign en1 = ~judge[2] | judge[1];
assign en2 = ~judge[3] | judge[1];
assign en3 = (~judge[3] & ~judge[1] & judge[2] | judge[3] & (~judge[1] & ~judge[4] | judge[1] & (~judge[4] & ~judge[0] | judge[4])));
assign en4 = (~judge[4] & judge[3] & ~judge[1] | judge[4] & (~judge[1] & ~judge[5] | judge[1] & (~judge[5] & ~judge[0] | judge[5])));
always_ff @(posedge clk) begin
if (rst) begin
{qv1, qv2, qv3, qv4} = 4'b0;
end else begin
HandShake_in1.allowin = ~judge[5] | judge[1];
HandShake_in2.allowin = (~judge[4] | judge[1] & (~judge[5] | judge[0]));
en1 = ~judge[2] | judge[1];
en2 = ~judge[3] | judge[1];
en3 = (~judge[3] & ~judge[1] & judge[2] | judge[3] & (~judge[1] & ~judge[4] | judge[1] & (~judge[4] & ~judge[0] | judge[4])));
en4 = (~judge[4] & judge[3] & ~judge[1] | judge[4] & (~judge[1] & ~judge[5] | judge[1] & (~judge[5] & ~judge[0] | judge[5])));
di4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? in1 : in2;
dv4 = ((judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? HandShake_in1.readygo : HandShake_in2.readygo);
dp4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? pin1 : pin2;
if (judge[3] & ~judge[0]) {di1, dv1, dp1} = {qi2, qv2, qp2};
else if (judge[3] & judge[0] & judge[4]) {di1, dv1, dp1} = {qi3, qv3, qp3};
mux3 #(65) mux3_d1 (
{in1, HandShake_in1.readygo, pin1},
{qi3, qv3, qp3},
{qi2, qv2, qp2},
(judge[3] & ~judge[0]) ? 2'b10 : ((judge[3] & judge[0] & judge[4]) ? 2'b01 : 2'b00),
{di1, dv1, dp1}
);
mux4 #(65) mux4_d2 (
{in2, HandShake_in2.readygo, pin2},
{in1, HandShake_in1.readygo, pin1},
{qi4, qv4, qp4},
{qi3, qv3, qp3},
(judge[4] & ~judge[0]) ? 2'b11 : ((judge[4] & judge[0] & judge[5]) ? 2'b10 : ((~judge[4] & (~judge[2] | (~judge[3] & judge[1] | judge[0]))) ? 2'b00 : 2'b01)),
{di2, dv2, dp2}
);
mux3 #(65) mux3_d3 (
{in1, HandShake_in1.readygo, pin1},
{in2, HandShake_in2.readygo, pin2},
{qi4, qv4, qp4},
(judge[5] & ~judge[0]) ? 2'b10 : ((~judge[5] & (~judge[3] | ~judge[4] & judge[1] | judge[0])) ? 2'b01 : 2'b00),
{di3, dv3, dp3}
);
assign di4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? in1 : in2;
assign dv4 = ((judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? HandShake_in1.readygo : HandShake_in2.readygo);
assign dp4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? pin1 : pin2;
else {di1, dv1, dp1} = {in1, HandShake_in1.readygo, pin1};
if (judge[4] & ~judge[0]) {di2, dv2, dp2} = {qi3, qv3, qp3};
else if (judge[4] & judge[0] & judge[5]) {di2, dv2, dp2} = {qi4, qv4, qp4};
else if (~judge[4] & (~judge[2] | (~judge[3] & judge[1] | judge[0])))
{di2, dv2, dp2} = {in2, HandShake_in2.readygo, pin2};
else {di2, dv2, dp2} = {in1, HandShake_in1.readygo, pin1};
ffen #(32) pc1 (
clk,
dp1,
en1,
qp1
);
ffen #(32) pc2 (
clk,
dp2,
en2,
qp2
);
ffen #(32) pc3 (
clk,
dp3,
en3,
qp3
);
ffen #(32) pc4 (
clk,
dp4,
en4,
qp4
);
ffen #(32) instr1 (
clk,
di1,
en1,
qi1
);
ffen #(32) instr2 (
clk,
di2,
en2,
qi2
);
ffen #(32) instr3 (
clk,
di3,
en3,
qi3
);
ffen #(32) instr4 (
clk,
di4,
en4,
qi4
);
ffenr #(1) valid1 (
clk,
rst,
dv1,
en1,
qv1
);
ffenr #(1) valid2 (
clk,
rst,
dv2,
en2,
qv2
);
ffenr #(1) valid3 (
clk,
rst,
dv3,
en3,
qv3
);
ffenr #(1) valid4 (
clk,
rst,
dv4,
en4,
qv4
);
if (judge[5] & ~judge[0]) {di3, dv3, dp3} = {qi4, qv4, qp4};
else if (~judge[5] & (~judge[3] | ~judge[4] & judge[1] | judge[0]))
{di3, dv3, dp3} = {in2, HandShake_in2.readygo, pin2};
else {di3, dv3, dp3} = {in1, HandShake_in1.readygo, pin1};
di4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? in1 : in2;
dv4 = ((judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? HandShake_in1.readygo : HandShake_in2.readygo);
dp4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? pin1 : pin2;
if (en1) begin
qi1 = di1;
qv1 = dv1;
qp1 = dp1;
end
if (en2) begin
qi2 = di2;
qv2 = dv2;
qp2 = dp2;
end
if (en3) begin
qi3 = di3;
qv3 = dv3;
qp3 = dp3;
end
if (en4) begin
qi4 = di4;
qv4 = dv4;
qp4 = dp4;
end
end
end
//assign HandShake_out1.readygo = judge[1] & judge[2];
//assign HandShake_out2.readygo = judge[0] & judge[3];
//assign HandShake_in1.allowin = ~judge[5] | judge[1];
//assign HandShake_in2.allowin = (~judge[4] | judge[1] & (~judge[5] | judge[0]));
//assign en1 = ~judge[2] | judge[1];
//assign en2 = ~judge[3] | judge[1];
//assign en3 = (~judge[3] & ~judge[1] & judge[2] | judge[3] & (~judge[1] & ~judge[4] | judge[1] & (~judge[4] & ~judge[0] | judge[4])));
//assign en4 = (~judge[4] & judge[3] & ~judge[1] | judge[4] & (~judge[1] & ~judge[5] | judge[1] & (~judge[5] & ~judge[0] | judge[5])));
// mux3 #(65) mux3_d1 (
// {in1, HandShake_in1.readygo, pin1},
// {qi3, qv3, qp3},
// {qi2, qv2, qp2},
// (judge[3] & ~judge[0]) ? 2'b10 : ((judge[3] & judge[0] & judge[4]) ? 2'b01 : 2'b00),
// {di1, dv1, dp1}
// );
// mux4 #(65) mux4_d2 (
// {in2, HandShake_in2.readygo, pin2},
// {in1, HandShake_in1.readygo, pin1},
// {qi4, qv4, qp4},
// {qi3, qv3, qp3},
// (judge[4] & ~judge[0]) ? 2'b11 : ((judge[4] & judge[0] & judge[5]) ? 2'b10 : ((~judge[4] & (~judge[2] | (~judge[3] & judge[1] | judge[0]))) ? 2'b00 : 2'b01)),
// {di2, dv2, dp2}
// );
// mux3 #(65) mux3_d3 (
// {in1, HandShake_in1.readygo, pin1},
// {in2, HandShake_in2.readygo, pin2},
// {qi4, qv4, qp4},
// (judge[5] & ~judge[0]) ? 2'b10 : ((~judge[5] & (~judge[3] | ~judge[4] & judge[1] | judge[0])) ? 2'b01 : 2'b00),
// {di3, dv3, dp3}
// );
// assign di4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? in1 : in2;
// assign dv4 = ((judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? HandShake_in1.readygo : HandShake_in2.readygo);
// assign dp4 = (judge[4] & ~judge[0] & (~judge[1] | judge[5])) ? pin1 : pin2;
// ffen #(32) pc1 (
// clk,
// dp1,
// en1,
// qp1
// );
// ffen #(32) pc2 (
// clk,
// dp2,
// en2,
// qp2
// );
// ffen #(32) pc3 (
// clk,
// dp3,
// en3,
// qp3
// );
// ffen #(32) pc4 (
// clk,
// dp4,
// en4,
// qp4
// );
// ffen #(32) instr1 (
// clk,
// di1,
// en1,
// qi1
// );
// ffen #(32) instr2 (
// clk,
// di2,
// en2,
// qi2
// );
// ffen #(32) instr3 (
// clk,
// di3,
// en3,
// qi3
// );
// ffen #(32) instr4 (
// clk,
// di4,
// en4,
// qi4
// );
// ffenr #(1) valid1 (
// clk,
// rst,
// dv1,
// en1,
// qv1
// );
// ffenr #(1) valid2 (
// clk,
// rst,
// dv2,
// en2,
// qv2
// );
// ffenr #(1) valid3 (
// clk,
// rst,
// dv3,
// en3,
// qv3
// );
// ffenr #(1) valid4 (
// clk,
// rst,
// dv4,
// en4,
// qv4
// );
endmodule