renamed madzscript, modified ppa.sv alu and shifter

This commit is contained in:
mmasserfrye 2022-05-12 18:05:02 +00:00
parent 999754801c
commit b089ee26ee
2 changed files with 42 additions and 11 deletions

View File

@ -84,6 +84,36 @@ module ppa_mult_64 #(parameter WIDTH=64) (
assign y = a * b; assign y = a * b;
endmodule endmodule
module ppa_alu_16 #(parameter WIDTH=16) (
input logic [WIDTH-1:0] A, B,
input logic [2:0] ALUControl,
input logic [2:0] Funct3,
output logic [WIDTH-1:0] Result,
output logic [WIDTH-1:0] Sum);
ppa_alu #(WIDTH) alu_16 (.*);
endmodule
module ppa_alu_32 #(parameter WIDTH=32) (
input logic [WIDTH-1:0] A, B,
input logic [2:0] ALUControl,
input logic [2:0] Funct3,
output logic [WIDTH-1:0] Result,
output logic [WIDTH-1:0] Sum);
ppa_alu #(WIDTH) alu_32 (.*);
endmodule
module ppa_alu_64 #(parameter WIDTH=64) (
input logic [WIDTH-1:0] A, B,
input logic [2:0] ALUControl,
input logic [2:0] Funct3,
output logic [WIDTH-1:0] Result,
output logic [WIDTH-1:0] Sum);
ppa_alu #(WIDTH) alu_64 (.*);
endmodule
module ppa_alu #(parameter WIDTH=32) ( module ppa_alu #(parameter WIDTH=32) (
input logic [WIDTH-1:0] A, B, input logic [WIDTH-1:0] A, B,
input logic [2:0] ALUControl, input logic [2:0] ALUControl,
@ -109,7 +139,7 @@ module ppa_alu #(parameter WIDTH=32) (
assign {Carry, Sum} = A + CondInvB + {{(WIDTH-1){1'b0}}, SubArith}; assign {Carry, Sum} = A + CondInvB + {{(WIDTH-1){1'b0}}, SubArith};
// Shifts // Shifts
shifter sh(.A, .Amt(B[`LOG_XLEN-1:0]), .Right(Funct3[2]), .Arith(SubArith), .W64, .Y(Shift)); ppa_shifter #(WIDTH) sh(.A, .Amt(B[$clog2(WIDTH)-1:0]), .Right(Funct3[2]), .Arith(SubArith), .W64, .Y(Shift));
// condition code flags based on subtract output Sum = A-B // condition code flags based on subtract output Sum = A-B
// Overflow occurs when the numbers being subtracted have the opposite sign // Overflow occurs when the numbers being subtracted have the opposite sign
@ -150,21 +180,21 @@ module ppa_shiftleft #(parameter WIDTH=32) (
assign y = a << amt; assign y = a << amt;
endmodule endmodule
module ppa_shifter ( module ppa_shifter_32 #(parameter WIDTH=32) (
input logic [`XLEN-1:0] A, input logic [WIDTH-1:0] A,
input logic [`LOG_XLEN-1:0] Amt, input logic [$clog2(WIDTH)-1:0] Amt,
input logic Right, Arith, W64, input logic Right, Arith, W64,
output logic [`XLEN-1:0] Y); output logic [WIDTH-1:0] Y);
logic [2*`XLEN-2:0] z, zshift; logic [2*WIDTH-2:0] z, zshift;
logic [`LOG_XLEN-1:0] amttrunc, offset; logic [$clog2(WIDTH)-1:0] amttrunc, offset;
// Handle left and right shifts with a funnel shifter. // Handle left and right shifts with a funnel shifter.
// For RV32, only 32-bit shifts are needed. // For RV32, only 32-bit shifts are needed.
// For RV64, 32 and 64-bit shifts are needed, with sign extension. // For RV64, 32 and 64-bit shifts are needed, with sign extension.
// funnel shifter input (see CMOS VLSI Design 4e Section 11.8.1, note Table 11.11 shift types wrong) // funnel shifter input (see CMOS VLSI Design 4e Section 11.8.1, note Table 11.11 shift types wrong)
if (`XLEN==32) begin:shifter // RV32 if (WIDTH==32) begin:shifter // RV32
always_comb // funnel mux always_comb // funnel mux
if (Right) if (Right)
if (Arith) z = {{31{A[31]}}, A}; if (Arith) z = {{31{A[31]}}, A};
@ -192,7 +222,7 @@ module ppa_shifter (
// funnel operation // funnel operation
assign zshift = z >> offset; assign zshift = z >> offset;
assign Y = zshift[`XLEN-1:0]; assign Y = zshift[WIDTH-1:0];
endmodule endmodule
module ppa_prioritythermometer #(parameter N = 8) ( module ppa_prioritythermometer #(parameter N = 8) (

View File

@ -4,14 +4,15 @@ import subprocess
from multiprocessing import Pool from multiprocessing import Pool
import csv import csv
import re import re
# import matplotlib.pyplot as plt
def run_command(module, width, freq): def run_command(module, width, freq):
command = "make synth DESIGN=ppa_{}_{} TECH=sky90 DRIVE=INV FREQ={} MAXOPT=1".format(module, width, freq) command = "make synth DESIGN=ppa_{}_{} TECH=sky90 DRIVE=INV FREQ={} MAXOPT=1".format(module, width, freq)
subprocess.Popen(command, shell=True) subprocess.Popen(command, shell=True)
widths = ['16', '32', '64'] widths = ['32']
modules = ['mult'] modules = ['shifter']
freqs = ['10', '4000', '5000', '6000'] freqs = ['10', '4000', '5000', '6000']
LoT = [] LoT = []