Quantcast
Channel: UVM SystemVerilog Discussions Forum RSS Feed
Viewing all articles
Browse latest Browse all 410

Any better way to serialize the data, please give suggestion?

$
0
0

Hello all,

I am working on piso(parallel in serial out). I am receiving the 10bits byte properly upto foreach loop, But after that data is not being shifted properly in shift register and its not getting serialized. Following is the code for the piso task.

 
task piso(encodrout1); 
        bit[9:0]encodrout1[]; 
        $display("san355- Display of the bytes array received inside the PISO %p",encodrout1); //%h
                uvm_report_info(get_full_name(),"Received All 10bits into the PISO...",UVM_LOW); 
              
      uvm_report_info(get_full_name(),"Driving 10bits and converting into serial bitstream.....",UVM_NONE);
     
      foreach (encodrout1[k]) 
         begin
          // automatic 
          reg [9:0] load;
          //automatic bit [9:0] load; // =0;
           reg [4:0] counter_d = 0;
           
           dut_vi.reset <= 0; 
    
       load = encodrout1[k];
     
                         $display("san340- Display of the load %b",load); 
                         $display("san340- Display of the load %h",load); 
                    
     @(posedge dut_vi.clock) 
     
     //for (int i = 0; i < 10 ; i++) //I guess this line is not needed
     begin
                  // repeat(10)@(posedge dut_vi.clock)
                 // @(posedge dut_vi.clock) 
                   counter_d = counter_d + 1;    
                  
                   load[9:0] <= {load[8:1] & load[0]} ; //THIS LINE DOESNT WORK, GIVES ERROR: Error: driver72.sv(269): LHS in non-blocking assignment may not be an automatic variable
    
     load[9] = load[8];
                   $display("san370- Display of the load %b",load); 
                   // @(posedge dut_vi.clock)
                   dut_vi.data <= load[9];
             load[8] = load[7];
             $display("san371- Display of the load %b",load); 
             // @(posedge dut_vi.clock)
             dut_vi.data <= load[8];
                   load[7] = load[6];
                   $display("san372- Display of the load %b",load); 
                   // @(posedge dut_vi.clock)
                   dut_vi.data <= load[7];
             load[6] = load[5];
             $display("san373- Display of the load %b",load); 
             //  @(posedge dut_vi.clock)
             dut_vi.data <= load[6];
             load[5] = load[4];
             $display("san374- Display of the load %b",load); 
             //  @(posedge dut_vi.clock)
             dut_vi.data <= load[5];
             load[4] = load[3];
             $display("san375- Display of the load %b",load); 
            // @(posedge dut_vi.clock)
             dut_vi.data <= load[4];
             load[3] = load[2];
             $display("san376- Display of the load %b",load); 
            // @(posedge dut_vi.clock)
             dut_vi.data <= load[3];
             load[2] = load[1];
             $display("san377- Display of the load %b",load); 
            // @(posedge dut_vi.clock)
             dut_vi.data <= load[2];
             load[1] = load[0];
             $display("san378- Display of the load %b",load); 
            // @(posedge dut_vi.clock)
             dut_vi.data <= load[1];
                   load[0] = load[9]; 
                   $display("san379- Display of the load %b",load); // */                   
                   dut_vi.data <= load[0];
            
      // repeat(10)@(posedge dut_vi.clock)
       counter_d = counter_d + 1;
       $display("san365- Display of the counter_d %d",counter_d); //%h
       $display("san369- Display of the load %h",load); //%h
       $display("san369- Display of the load %b",load); //%h
     
               uvm_report_info(get_full_name(),"Display of load inside PISO2222.....",UVM_NONE);
     end  
     //ser_OUTPUT=load[9]; // this needs to be connected to the serial line of DUT It works here
     /*@(posedge dut_vi.clock) 
     dut_vi.data <= load[9]; //serial data goes out
     @(posedge dut_vi.clock) 
     dut_vi.data <= load[8];
     @(posedge dut_vi.clock) 
     dut_vi.data <= load[7]; //*/
     $display("san384- Display of the load[9] %b",load[9]); //%h
     //dut_vi.data <= ser_OUTPUT; //
     $display("san385- Display of the dut_vi.data %b",dut_vi.data); //%h It works here
     //end
         end
                    
       endtask : piso 
 

 

Any help will be appreciated, thanks


Viewing all articles
Browse latest Browse all 410

Trending Articles