Update InstrQueue.sv
This commit is contained in:
parent
1b9ccd10af
commit
aa092c4b3f
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user