mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
formatted files
This commit is contained in:
parent
fb529e1640
commit
8f3acedec8
@ -37,7 +37,6 @@ module bitreverse #(parameter WIDTH=32) (
|
|||||||
for (i=0; i<WIDTH;i++) begin:loop
|
for (i=0; i<WIDTH;i++) begin:loop
|
||||||
assign b[WIDTH-i-1] = a[i];
|
assign b[WIDTH-i-1] = a[i];
|
||||||
end
|
end
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,11 +63,11 @@ module bmuctrl(
|
|||||||
logic MaskD; // Indicates if zbs instruction in Decode Stage
|
logic MaskD; // Indicates if zbs instruction in Decode Stage
|
||||||
logic PreShiftD; // Indicates if sh1add, sh2add, sh3add instruction in Decode Stage
|
logic PreShiftD; // Indicates if sh1add, sh2add, sh3add instruction in Decode Stage
|
||||||
logic [2:0] BALUControlD; // ALU Control signals for B instructions
|
logic [2:0] BALUControlD; // ALU Control signals for B instructions
|
||||||
|
|
||||||
`define BMUCTRLW 16
|
`define BMUCTRLW 16
|
||||||
|
|
||||||
logic [`BMUCTRLW-1:0] BMUControlsD; // Main B Instructions Decoder control signals
|
logic [`BMUCTRLW-1:0] BMUControlsD; // Main B Instructions Decoder control signals
|
||||||
|
|
||||||
|
|
||||||
// Extract fields
|
// Extract fields
|
||||||
assign OpD = InstrD[6:0];
|
assign OpD = InstrD[6:0];
|
||||||
assign Funct3D = InstrD[14:12];
|
assign Funct3D = InstrD[14:12];
|
||||||
@ -158,7 +158,7 @@ module bmuctrl(
|
|||||||
17'b0110011_0000101_111: BMUControlsD = `BMUCTRLW'b000_10_100_1_0_1_0_0_0_0_0; // maxu
|
17'b0110011_0000101_111: BMUControlsD = `BMUCTRLW'b000_10_100_1_0_1_0_0_0_0_0; // maxu
|
||||||
17'b0110011_0000101_100: BMUControlsD = `BMUCTRLW'b000_10_011_1_0_1_0_0_0_0_0; // min
|
17'b0110011_0000101_100: BMUControlsD = `BMUCTRLW'b000_10_011_1_0_1_0_0_0_0_0; // min
|
||||||
17'b0110011_0000101_101: BMUControlsD = `BMUCTRLW'b000_10_011_1_0_1_0_0_0_0_0; // minu
|
17'b0110011_0000101_101: BMUControlsD = `BMUCTRLW'b000_10_011_1_0_1_0_0_0_0_0; // minu
|
||||||
default: BMUControlsD = {Funct3D, {12'b0}, {1'b1}}; // not B instruction or shift
|
default: BMUControlsD = {Funct3D, {12'b0}, {1'b1}}; // not B instruction or shift
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
// Unpack Control Signals
|
// Unpack Control Signals
|
||||||
@ -170,8 +170,6 @@ module bmuctrl(
|
|||||||
// Comparator should perform signed comparison when min/max instruction. We have overlap in funct3 with some branch instructions so we use opcode to differentiate betwen min/max and branches
|
// Comparator should perform signed comparison when min/max instruction. We have overlap in funct3 with some branch instructions so we use opcode to differentiate betwen min/max and branches
|
||||||
assign BComparatorSignedD = (Funct3D[2]^Funct3D[0]) & ~OpD[6];
|
assign BComparatorSignedD = (Funct3D[2]^Funct3D[0]) & ~OpD[6];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// BMU Execute stage pipieline control register
|
// BMU Execute stage pipieline control register
|
||||||
flopenrc#(13) controlregBMU(clk, reset, FlushE, ~StallE, {ALUSelectD, BSelectD, ZBBSelectD, BRegWriteD, BComparatorSignedD, BALUControlD}, {ALUSelectE, BSelectE, ZBBSelectE, BRegWriteE, BComparatorSignedE, BALUControlE});
|
flopenrc#(13) controlregBMU(clk, reset, FlushE, ~StallE, {ALUSelectD, BSelectD, ZBBSelectD, BRegWriteD, BComparatorSignedD, BALUControlD}, {ALUSelectE, BSelectE, ZBBSelectE, BRegWriteE, BComparatorSignedE, BALUControlE});
|
||||||
endmodule
|
endmodule
|
@ -42,6 +42,4 @@ module ext #(parameter WIDTH = 32) (
|
|||||||
assign sextbResult = {{(WIDTH-8){A[7]}},A[7:0]};
|
assign sextbResult = {{(WIDTH-8){A[7]}},A[7:0]};
|
||||||
|
|
||||||
mux3 #(WIDTH) extmux(sextbResult, sexthResult, zexthResult, ExtSelect, ExtResult);
|
mux3 #(WIDTH) extmux(sextbResult, sexthResult, zexthResult, ExtSelect, ExtResult);
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
@ -39,6 +39,4 @@ module popcnt #(parameter WIDTH = 32) (
|
|||||||
end
|
end
|
||||||
|
|
||||||
assign PopCnt = sum[$clog2(WIDTH):0];
|
assign PopCnt = sum[$clog2(WIDTH):0];
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -37,32 +37,19 @@ module zbb #(parameter WIDTH=32) (
|
|||||||
input logic lt, // lt flag
|
input logic lt, // lt flag
|
||||||
input logic [2:0] ZBBSelect, // Indicates word operation
|
input logic [2:0] ZBBSelect, // Indicates word operation
|
||||||
output logic [WIDTH-1:0] ZBBResult); // ZBB result
|
output logic [WIDTH-1:0] ZBBResult); // ZBB result
|
||||||
|
|
||||||
|
|
||||||
// count result
|
logic [WIDTH-1:0] CntResult; // count result
|
||||||
logic [WIDTH-1:0] CntResult;
|
logic [WIDTH-1:0] MinResult,MaxResult; // min,max result
|
||||||
|
logic [WIDTH-1:0] ByteResult; // byte results
|
||||||
// min,max result
|
logic [WIDTH-1:0] ExtResult; // sign/zero extend results
|
||||||
logic [WIDTH-1:0] MaxResult;
|
|
||||||
logic [WIDTH-1:0] MinResult;
|
|
||||||
|
|
||||||
// byte results
|
|
||||||
logic [WIDTH-1:0] ByteResult;
|
|
||||||
|
|
||||||
// sign/zero extend results
|
|
||||||
logic [WIDTH-1:0] ExtResult; // sign/zero extend result
|
|
||||||
|
|
||||||
|
|
||||||
cnt #(WIDTH) cnt(.A(A), .RevA(RevA), .B(B[4:0]), .W64(W64), .CntResult(CntResult));
|
cnt #(WIDTH) cnt(.A(A), .RevA(RevA), .B(B[4:0]), .W64(W64), .CntResult(CntResult));
|
||||||
byteUnit #(WIDTH) bu(.A(A), .ByteSelect(B[0]), .ByteResult(ByteResult));
|
byteUnit #(WIDTH) bu(.A(A), .ByteSelect(B[0]), .ByteResult(ByteResult));
|
||||||
ext #(WIDTH) ext(.A(A), .ExtSelect({~B[2], {B[2] & B[0]}}), .ExtResult(ExtResult));
|
ext #(WIDTH) ext(.A(A), .ExtSelect({~B[2], {B[2] & B[0]}}), .ExtResult(ExtResult));
|
||||||
|
|
||||||
|
|
||||||
assign MaxResult = (lt) ? B : A;
|
assign MaxResult = (lt) ? B : A;
|
||||||
assign MinResult = (lt) ? A : B;
|
assign MinResult = (lt) ? A : B;
|
||||||
|
|
||||||
// ZBB Result select mux
|
// ZBB Result select mux
|
||||||
mux5 #(WIDTH) zbbresultmux(CntResult, ExtResult, ByteResult, MinResult, MaxResult, ZBBSelect, ZBBResult);
|
mux5 #(WIDTH) zbbresultmux(CntResult, ExtResult, ByteResult, MinResult, MaxResult, ZBBSelect, ZBBResult);
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
@ -42,14 +42,13 @@ module zbc #(parameter WIDTH=32) (
|
|||||||
assign select = ~Funct3[1:0];
|
assign select = ~Funct3[1:0];
|
||||||
|
|
||||||
bitreverse #(WIDTH) brB(.a(B), .b(RevB));
|
bitreverse #(WIDTH) brB(.a(B), .b(RevB));
|
||||||
|
|
||||||
|
|
||||||
mux3 #(WIDTH) xmux({RevA[WIDTH-2:0], {1'b0}}, RevA, A, select, x);
|
mux3 #(WIDTH) xmux({RevA[WIDTH-2:0], {1'b0}}, RevA, A, select, x);
|
||||||
mux3 #(WIDTH) ymux({{1'b0},RevB[WIDTH-2:0]}, RevB, B, select, y);
|
mux3 #(WIDTH) ymux({{1'b0},RevB[WIDTH-2:0]}, RevB, B, select, y);
|
||||||
|
|
||||||
clmul #(WIDTH) clm(.A(x), .B(y), .ClmulResult(ClmulResult));
|
clmul #(WIDTH) clm(.A(x), .B(y), .ClmulResult(ClmulResult));
|
||||||
|
|
||||||
bitreverse #(WIDTH) brClmulResult(.a(ClmulResult), .b(RevClmulResult));
|
bitreverse #(WIDTH) brClmulResult(.a(ClmulResult), .b(RevClmulResult));
|
||||||
|
|
||||||
mux2 #(WIDTH) zbcresultmux(ClmulResult, RevClmulResult, Funct3[1], ZBCResult);
|
mux2 #(WIDTH) zbcresultmux(ClmulResult, RevClmulResult, Funct3[1], ZBCResult);
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
@ -39,7 +39,6 @@ module shifter (
|
|||||||
logic [2*`XLEN-2:0] z, zshift; // Input to funnel shifter, shifted amount before truncated to 32 or 64 bits
|
logic [2*`XLEN-2:0] z, zshift; // Input to funnel shifter, shifted amount before truncated to 32 or 64 bits
|
||||||
logic [`LOG_XLEN-1:0] amttrunc, offset; // Shift amount adjusted for RV64, right-shift amount
|
logic [`LOG_XLEN-1:0] amttrunc, offset; // Shift amount adjusted for RV64, right-shift amount
|
||||||
|
|
||||||
|
|
||||||
if (`ZBB_SUPPORTED) begin: rotfunnel
|
if (`ZBB_SUPPORTED) begin: rotfunnel
|
||||||
if (`XLEN==32) begin // rv32 with rotates
|
if (`XLEN==32) begin // rv32 with rotates
|
||||||
always_comb // funnel mux
|
always_comb // funnel mux
|
||||||
|
Loading…
Reference in New Issue
Block a user