[HDL] Add more micro benchmarks for counter, and-gate and mac unit
This commit is contained in:
parent
70a4dc26d4
commit
07dcf3ad27
|
@ -0,0 +1,22 @@
|
|||
/////////////////////////////////////////
|
||||
// Functionality: 4-input AND
|
||||
// Author: Xifan Tang
|
||||
////////////////////////////////////////
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
module and4(
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
d,
|
||||
e);
|
||||
|
||||
input wire a;
|
||||
input wire b;
|
||||
input wire c;
|
||||
input wire d;
|
||||
output wire e;
|
||||
|
||||
assign e = a & b & c & d;
|
||||
|
||||
endmodule
|
|
@ -0,0 +1,25 @@
|
|||
///////////////////////////////////////////
|
||||
// Functionality: Counter with asynchronous reset
|
||||
// Author: Xifan Tang
|
||||
////////////////////////////////////////
|
||||
|
||||
module counter (
|
||||
clk,
|
||||
reset,
|
||||
result
|
||||
);
|
||||
|
||||
input clk;
|
||||
input reset;
|
||||
output [127:0] result;
|
||||
|
||||
reg [127:0] result;
|
||||
|
||||
always @(posedge clk or posedge reset)
|
||||
begin
|
||||
if (reset)
|
||||
result = 0;
|
||||
else
|
||||
result = result + 1;
|
||||
end
|
||||
endmodule
|
|
@ -0,0 +1,25 @@
|
|||
module counter_tb;
|
||||
|
||||
reg clk, reset;
|
||||
wire [127:0] result;
|
||||
|
||||
counter DUT(
|
||||
.clk(clk),
|
||||
.reset(reset),
|
||||
.result(result)
|
||||
);
|
||||
|
||||
initial begin
|
||||
#0 reset = 1'b1; clk = 1'b0;
|
||||
#100 reset = 1'b0;
|
||||
end
|
||||
|
||||
always begin
|
||||
#10 clk = ~clk;
|
||||
end
|
||||
|
||||
initial begin
|
||||
#5000 $stop;
|
||||
end
|
||||
|
||||
endmodule
|
|
@ -0,0 +1,25 @@
|
|||
///////////////////////////////////////////
|
||||
// Functionality: Counter with asynchronous reset
|
||||
// Author: Xifan Tang
|
||||
////////////////////////////////////////
|
||||
|
||||
module counter (
|
||||
clk,
|
||||
resetb,
|
||||
result
|
||||
);
|
||||
|
||||
input clk;
|
||||
input reset;
|
||||
output [127:0] result;
|
||||
|
||||
reg [127:0] result;
|
||||
|
||||
always @(posedge clk or negedge resetb)
|
||||
begin
|
||||
if (~resetb)
|
||||
result = 0;
|
||||
else
|
||||
result = result + 1;
|
||||
end
|
||||
endmodule
|
|
@ -0,0 +1,25 @@
|
|||
module counter_tb;
|
||||
|
||||
reg clk, resetb;
|
||||
wire [127:0] result;
|
||||
|
||||
counter DUT(
|
||||
.clk(clk),
|
||||
.resetb(resetb),
|
||||
.result(result)
|
||||
);
|
||||
|
||||
initial begin
|
||||
#0 reset = 1'b0; clk = 1'b0;
|
||||
#100 reset = 1'b1;
|
||||
end
|
||||
|
||||
always begin
|
||||
#10 clk = ~clk;
|
||||
end
|
||||
|
||||
initial begin
|
||||
#5000 $stop;
|
||||
end
|
||||
|
||||
endmodule
|
|
@ -0,0 +1,22 @@
|
|||
//-------------------------------------------------------
|
||||
// Functionality: A 18-bit multiply-acculumate circuit
|
||||
// Author: Xifan Tang
|
||||
//-------------------------------------------------------
|
||||
|
||||
module mac_18(a, b, c, out);
|
||||
parameter DATA_WIDTH = 18; /* declare a parameter. default required */
|
||||
input [DATA_WIDTH - 1 : 0] a, b, c;
|
||||
output [DATA_WIDTH - 1 : 0] out;
|
||||
|
||||
assign out = a * b + c;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
//-------------------------------------------------------
|
||||
// Functionality: A 20-bit multiply-acculumate circuit
|
||||
// Author: Xifan Tang
|
||||
//-------------------------------------------------------
|
||||
|
||||
module mac_20(a, b, c, out);
|
||||
parameter DATA_WIDTH = 20; /* declare a parameter. default required */
|
||||
input [DATA_WIDTH - 1 : 0] a, b, c;
|
||||
output [DATA_WIDTH - 1 : 0] out;
|
||||
|
||||
assign out = a * b + c;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
//-------------------------------------------------------
|
||||
// Functionality: A 36-bit multiply-acculumate circuit
|
||||
// Author: Xifan Tang
|
||||
//-------------------------------------------------------
|
||||
|
||||
module mac_36(a, b, c, out);
|
||||
parameter DATA_WIDTH = 4; /* declare a parameter. default required */
|
||||
input [DATA_WIDTH - 1 : 0] a, b, c;
|
||||
output [DATA_WIDTH - 1 : 0] out;
|
||||
|
||||
assign out = a * b + c;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
//-------------------------------------------------------
|
||||
// Functionality:
|
||||
// - A 8-bit multiply-acculumate circuit
|
||||
// - A 9-bit multiply-acculumate circuit
|
||||
// Author: Xifan Tang
|
||||
//-------------------------------------------------------
|
||||
|
||||
module mac_8_9(a, b, c, out);
|
||||
parameter DATA_WIDTH = 18; /* declare a parameter. default required */
|
||||
input [DATA_WIDTH - 1 : 0] a, b, c;
|
||||
output [DATA_WIDTH - 1 : 0] out;
|
||||
|
||||
assign out[8:0] = a[8:0] * b[8:0] + c[8:0];
|
||||
assign out[17:9] = a[17:9] * b[17:9] + c[17:9];
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
//-------------------------------------------------------
|
||||
// Functionality: A 9-bit multiply-acculumate circuit
|
||||
// Author: Xifan Tang
|
||||
//-------------------------------------------------------
|
||||
|
||||
module mac_9(a, b, c, out);
|
||||
parameter DATA_WIDTH = 9; /* declare a parameter. default required */
|
||||
input [DATA_WIDTH - 1 : 0] a, b, c;
|
||||
output [DATA_WIDTH - 1 : 0] out;
|
||||
|
||||
assign out = a * b + c;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue