Verilog bit change location - EDA Playground
Warning! This exercise has been opened in another tab; autosave has been disabled. Close this tab or refresh to reactivate.

 Languages & Libraries

 Tools & Simulators

 Examples

208


35
 
1
// Code your testbench here
2
module test;
3
  logic [15:0]  my_reg1=16'b0001011011010111, 
4
                my_reg2=16'b1111011011010111, 
5
                my_reg1_diff, my_reg2_diff;
6
  integer my_reg1_diff_pos, my_reg2_diff_pos;
7
8
//Synthesizable Implementation of floor of log2 function:
9
function integer flog2;
10
  input [31:0] value;
11
  integer i;
12
  for (i=31; i>=0; i--)
13
    if (value[i]) return i;
14
endfunction
15
16
  
17
  always_comb begin
18
    my_reg1_diff = (my_reg1 ^ (my_reg1 << 1))>>1 ;
19
    my_reg2_diff = (my_reg2 ^ (my_reg2 << 1))>>1 ;
20
    my_reg1_diff_pos = flog2(my_reg1_diff);             //floor of log2 of my_reg1_diff (Synthesizable version)
21
    my_reg2_diff_pos = $floor($ln(my_reg2_diff)/$ln(2));//floor of log2 of my_reg2_diff
22
    
23
  end
24
  
25
  initial begin
26
    $monitor ("my_reg1_diff=%b, my_reg1_diff_pos=%d, my_reg2_diff=%b, my_reg2_diff_pos=%d", 
27
                my_reg1_diff, my_reg1_diff_pos, 
28
                my_reg2_diff, my_reg2_diff_pos);
29
    #100 $finish;
30
  end
31
  
32
  
33
34
endmodule
35
xxxxxxxxxx
1
 
1
// Code your design here
2
276 views and 0 likes     
 
http://stackoverflow.com/questions/24166295/verilog-bit-change-location/
190:0