function integer clogb2;
input [31:0] value;
integer i;
begin
clogb2 = 0;
for(i = 0; 2**i < value; i = i + 1)
clogb2 = i + 1;
end
endfunction
module sample11(v,n_var);
input [15:0]v;
output [15:0]n_var;
wire [15:0] v;
reg [15:0]n_var;
reg [15:0]value;
always @ (v)
n_var = clogb2(v);
function integer clogb2;
input [31:0] value;
integer i;
begin
clogb2 = 0;
for(i = 0; 2**i < value; i = i + 1)
clogb2 = i + 1;
end
endfunction
endmodule
module test();
reg [15:0] v;
reg i;
wire [15:0] n_var;
sample11 s1(v,n_var);
initial
v = 2;
initial
#2000 $finish;
always
begin
#5 v = v+1;
end
always @ (v)
$monitor ("log%d = %d", v, n_var);
endmodule
module maxvalue(
b_array,
mxm,
reset
);
input [255:0] b_array;
input reset;
output [15:0] mxm;
reg [15:0] array [0:15];
integer i;
reg [15:0] mxm;
always @ (b_array)
begin
if (reset)
mxm = 0;
{array[15],array[14],array[13],array[12],array[11],array[10],array[9],array[8],array[7],array[6],array[5],array[4],array[3],array[2],array[1],array[0]}=b_array;
for (i=0;i<16;i=i+1)
if (array[i] > mxm)
mxm = array [i];
end
endmodule
module max11_tb();
reg [255:0] b_array;
wire [15:0] max;
reg reset;
maxvalue uut (
.b_array(b_array),
.mxm (max),
.reset (reset)
);
initial
begin
reset = 1;
#10 reset = 0;
end
initial
begin
#7 b_array = 255'd1;
#10 b_array = 255'd2;
#15 b_array = 255'd197879804;
#20 b_array = 255'd200000000000000000003;
end
always @ (b_array)
$monitor ($time, "maximum value component = %d", max );
endmodule
module maxvalue( b_array,mxm,reset,addrA,clkA);
input [255:0] b_array;
input reset;
output [15:0] mxm;
input clkA;
input [15:0] addrA;
Spiht_mem M1 (
.clka(clkA),
.wea(), // Bus [0 : 0]
.addra(addrA), // Bus [15 : 0]
.dina(), // Bus [15 : 0]
.douta(array)); // Bus [15 : 0]
reg [15:0] array [0:15];
integer i;
reg [15:0] mxm;
always @ (b_array)
begin
if (reset)
mxm = 0;
//[15:0] array[0:15]= b_array;
{array[15],array[14],array[13],array[12],array[11],array[10],array[9],array[8],array[7],array[6],array[5],array[4],array[3],array[2],array[1],array[0]}=b_array;
for (i=0;i<16;i=i+1)
if (array > mxm)
mxm = array ;
end
endmodule
reg [31:0] LIS5a [1023:0];
.
.
.
FiveA M1 (.douta(LIS5a));
meher81 said:Dear UFK
you can do this in a testbench. at first, store file content in an array using $readmemb. after that you can do, with the array elements, what you want.
module max_val(mxm,
reset
);
input reset;
output [31:0] mxm;
reg [31:0] Mem [0:3];
integer i;
reg [31:0] mxm;
initial $readmemh("D15.txt",Mem);
always @ *
begin
if (reset)
mxm = 0;
for (i=0;i<=3;i=i+1)
if (Mem > mxm)
mxm = Mem ;
end
endmodule
module max_val_tb;
// Inputs
reg reset;
// Outputs
wire [31:0] mxm;
// Instantiate the Unit Under Test (UUT)
max_val uut (
.mxm(mxm),
.reset(reset)
);
initial begin
// Initialize Inputs
reset = 0;
#100;
reset = 1;
end
endmodule
//D15 =
29B
043
FFFFFE72
FFFFFEE7
//667
//67
//-398
//-281
module max_val (
mxm,
in,
reset
);
input reset;
input [ 31 : 0 ] in;
output [ 31 : 0 ] mxm;
wire [ 31 : 0 ] in;
integer k;
integer i;
integer mxm;
always @ (in or reset)
begin
if (reset)
mxm = 0;
else
k=in;
if (k>mxm)
mxm <= k;
end
endmodule
module max_val_tb;
wire [31:0] mxm;
reg reset,clk;
reg [31:0] Mem [0:3];
integer i;
integer input_data;
max_val uut (
.mxm(mxm),
.in(input_data),
.reset(reset)
);
initial $readmemh("D15.txt",Mem);
initial
begin
reset = 1;
#2 reset = 0;
end
initial
clk =0;
always
#5 clk=~clk;
initial
i=0;
always @ (posedge clk)
begin
input_data = Mem[i];
i = i+1;
$monitor ("max = %d, input=%d", mxm, input_data);
end
endmodule
module max_val (
mxm,
in,
reset
);
input reset;
input [ 31 : 0 ] in;
output [ 31 : 0 ] mxm;
wire [ 31 : 0 ] in;
integer k;
integer i;
integer mxm;
always @ (in or reset)
begin
if (reset)
mxm = 32'h80000001;
else
k=in;
if (k>mxm)
mxm <= k;
end
endmodule
module max_val_tb;
wire [31:0] mxm;
reg reset,clk;
reg [31:0] Mem [0:3];
integer i,m;
integer input_data;
max_val uut (
.mxm(mxm),
.in(input_data),
.reset(reset)
);
initial $readmemh("D15.txt",Mem);
initial
begin
reset = 1;
#2 reset = 0;
end
initial
clk =0;
always
#5 clk=~clk;
initial
i=0;
always @ (posedge clk)
begin
input_data = Mem[i];
i = i+1;
m=mxm;
$monitor ("max = %d, input=%d", m, input_data);
end
endmodule
module Log_max(v,n_var,T);
input [31:0]v;
output [31:0]n_var;
output reg [31:0] T=0;
wire [31:0] v;
reg [31:0]n_var;
reg [3:0] base = 2;
always @ (v)
n_var = CLogB2(v);
always@(*)
begin
T = base ** n_var;
end
//ceil of the log base 2
function integer CLogB2;
input [31:0] Depth;
integer i;
begin
i = Depth;
for(CLogB2 = 0; i > 1; CLogB2 = CLogB2 + 1)
i = i >> 1;
end
endfunction
endmodule
module Log_max_tb;
// Inputs
reg [31:0] v;
// Outputs
wire [31:0] n_var;
wire [31:0] T;
// Instantiate the Unit Under Test (UUT)
Log_max uut (
.v(v),
.n_var(n_var),
.T(T)
);
initial begin
// Initialize Inputs
v = 32'h00000B43;
end
endmodule
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?