//-------------------------------------------------------------------------------------------------- // // Title : sort_4_tf.v // Design : Homework 1 // Author : Instructor // Company : // //------------------------------------------------------------------------------------------------- // // Description : Drives a network that sorts 4 numbers. A_sort will always be the // maximum while D_sort will always be the minimum // //------------------------------------------------------------------------------------------------- `timescale 1ns / 1ns module sort_4_tf ( A,B,C,D,A_sort,B_sort,C_sort,D_sort ); input [7:0] A_sort, B_sort, C_sort, D_sort ; output [7:0] A, B, C, D; reg [7:0] A, B, C, D; reg [7:0] A1,B1,C1,D1,A2,B2,C2,D2,B3,C3; parameter TESTSIZE = 1000; integer errors, count; function [7:0] max; input [7:0] X, Y; max = X > Y ? X : Y; endfunction // max function [7:0] min; input [7:0] X, Y; min = X < Y ? X : Y; endfunction // min initial begin errors = 0; for (count = 0; count < TESTSIZE; count = count + 1) begin A = $random & 2'hf; B = $random & 2'hf; C = $random & 2'hf; D = $random & 2'hf; #20 A1 = max(A,B); B1 = min(A,B); C1 = max(C,D); D1 = min(C,D); A2 = max(A1,C1); C2 = min(A1,C1); B2 = max(B1,D1); D2 = min(B1,D1); B3 = max(B2,C2); C3 = min(B2,C2); if((A_sort !== A2) && (B_sort !== B3) && (C_sort !== C3) && (D_sort !== D2)) begin errors = errors + 1; $display("Error: Inputs: %d,%d,%d,%d", A, B, C, D); $display(" Results: %d,%d,%d,%d", A_sort, B_sort, C_sort, D_sort); $stop; end end // for (count = 0; count < TESTSIZE; count = count + 1) $display("%d errors found",errors); $finish; end endmodule