1
0
mirror of https://github.com/pConst/basic_verilog.git synced 2025-01-28 07:02:55 +08:00

170 lines
5.2 KiB
Coq
Raw Permalink Normal View History

2015-12-15 22:44:58 +03:00
// Copyright 2007 Altera Corporation. All rights reserved.
// Altera products are protected under numerous U.S. and foreign patents,
// maskwork rights, copyrights and other intellectual property laws.
//
// This reference design file, and your use thereof, is subject to and governed
// by the terms and conditions of the applicable Altera Reference Design
// License Agreement (either as signed by you or found at www.altera.com). By
// using this reference design file, you indicate your acceptance of such terms
// and conditions between you and Altera Corporation. In the event that you do
// not agree with such terms and conditions, you may not use the reference
// design file and please promptly destroy any copies you have made.
//
// This reference design file is being provided on an "as-is" basis and as an
// accommodation and therefore all warranties, representations or guarantees of
// any kind (whether express, implied or statutory) including, without
// limitation, warranties of merchantability, non-infringement, or fitness for
// a particular purpose, are specifically disclaimed. By making this reference
// design file available, Altera expressly does not recommend, suggest or
// require that this reference design file be used in combination with any
// other product not provided by Altera.
/////////////////////////////////////////////////////////////////////////////
module compare_tb ();
parameter WIDTH = 64;
parameter CONST_X = 64'h123456781234567a;
wire a,b,c,d,e;
reg [WIDTH-1:0] dat;
reg fail;
less_than_const ca (.dat(dat),.out(a));
defparam ca .WIDTH = WIDTH;
defparam ca .METHOD = 0;
defparam ca .CONST_VAL = CONST_X;
less_than_const cb (.dat(dat),.out(b));
defparam cb .WIDTH = WIDTH;
defparam cb .METHOD = 1;
defparam cb .CONST_VAL = CONST_X;
less_than_const cc (.dat(dat),.out(c));
defparam cc .WIDTH = WIDTH;
defparam cc .METHOD = 2;
defparam cc .CONST_VAL = CONST_X;
less_than_const cd (.dat(dat),.out(d));
defparam cd .WIDTH = WIDTH;
defparam cd .METHOD = 3;
defparam cd .CONST_VAL = CONST_X;
less_than_const ce (.dat(dat),.out(e));
defparam ce .WIDTH = WIDTH;
defparam ce .METHOD = 4;
defparam ce .CONST_VAL = CONST_X;
parameter WIDTH_2 = 9;
parameter CONST_Y = 9'b100101010;
wire q,r,s,t,u;
reg [WIDTH_2-1:0] dat_2;
less_than_const da (.dat(dat_2),.out(q));
defparam da .WIDTH = WIDTH_2;
defparam da .METHOD = 0;
defparam da .CONST_VAL = CONST_Y;
less_than_const db (.dat(dat_2),.out(r));
defparam db .WIDTH = WIDTH_2;
defparam db .METHOD = 1;
defparam db .CONST_VAL = CONST_Y;
less_than_const dc (.dat(dat_2),.out(s));
defparam dc .WIDTH = WIDTH_2;
defparam dc .METHOD = 2;
defparam dc .CONST_VAL = CONST_Y;
less_than_const dd (.dat(dat_2),.out(t));
defparam dd .WIDTH = WIDTH_2;
defparam dd .METHOD = 3;
defparam dd .CONST_VAL = CONST_Y;
less_than_const de (.dat(dat_2),.out(u));
defparam de .WIDTH = WIDTH_2;
defparam de .METHOD = 4;
defparam de .CONST_VAL = CONST_Y;
reg over;
wire w,x,y,z;
parameter UPPER = 9'b011001001;
parameter LOWER = 9'b000010010;
over_under oa (.dat(dat_2),.over(over),.out(w));
defparam oa .WIDTH = WIDTH_2;
defparam oa .METHOD = 0;
defparam oa .UPPER_BOUND = UPPER;
defparam oa .LOWER_BOUND = LOWER;
over_under ob (.dat(dat_2),.over(over),.out(x));
defparam ob .WIDTH = WIDTH_2;
defparam ob .METHOD = 1;
defparam ob .UPPER_BOUND = UPPER;
defparam ob .LOWER_BOUND = LOWER;
over_under oc (.dat(dat_2),.over(over),.out(y));
defparam oc .WIDTH = WIDTH_2;
defparam oc .METHOD = 2;
defparam oc .UPPER_BOUND = UPPER;
defparam oc .LOWER_BOUND = LOWER;
over_under od (.dat(dat_2),.over(over),.out(z));
defparam od .WIDTH = WIDTH_2;
defparam od .METHOD = 3;
defparam od .UPPER_BOUND = UPPER;
defparam od .LOWER_BOUND = LOWER;
wire ww,xx,yy,zz;
parameter UPPER_3 = 8'b11001001;
parameter LOWER_3 = 8'b00010010;
over_under pa (.dat(dat_2),.over(over),.out(ww));
defparam pa .WIDTH = WIDTH_2-1;
defparam pa .METHOD = 0;
defparam pa .UPPER_BOUND = UPPER_3;
defparam pa .LOWER_BOUND = LOWER_3;
over_under pb (.dat(dat_2),.over(over),.out(xx));
defparam pb .WIDTH = WIDTH_2-1;
defparam pb .METHOD = 1;
defparam pb .UPPER_BOUND = UPPER_3;
defparam pb .LOWER_BOUND = LOWER_3;
over_under pc (.dat(dat_2),.over(over),.out(yy));
defparam pc .WIDTH = WIDTH_2-1;
defparam pc .METHOD = 2;
defparam pc .UPPER_BOUND = UPPER_3;
defparam pc .LOWER_BOUND = LOWER_3;
over_under pd (.dat(dat_2),.over(over),.out(zz));
defparam pd .WIDTH = WIDTH_2-1;
defparam pd .METHOD = 3;
defparam pd .UPPER_BOUND = UPPER_3;
defparam pd .LOWER_BOUND = LOWER_3;
initial begin
dat = 0;
dat_2 = 0;
over = 0;
fail = 0;
#100000 if (!fail) $display ("PASS");
$stop();
end
always begin
#50 dat = {$random,$random};
dat_2 = $random;
over = $random;
#50 if (a !== b || a !== c || a !== d || a!= e) begin
$display ("Mismatch in cx series at time %d",$time);
fail = 1;
end
if (q !== r || q !== s || q !== t || q != u) begin
$display ("Mismatch in dx series at time %d",$time);
fail = 1;
end
if (w !== x || w !== y || w !== z) begin
$display ("Mismatch in ox series at time %d",$time);
fail = 1;
end
if (ww !== xx || ww !== yy || ww !== zz) begin
$display ("Mismatch in px series at time %d",$time);
fail = 1;
end
end
endmodule