data/full_repos/permissive/447976230/fpga/usrp2/control_lib/pic.v
1: b"%Error: data/full_repos/permissive/447976230/fpga/usrp2/control_lib/pic.v:163: Cannot find file containing module: 'priority_enc'\n   priority_enc priority_enc ( .in(pending & ~mask), .out(live_enc) );\n   ^~~~~~~~~~~~\n        ... Looked in:\n             data/full_repos/permissive/447976230/fpga/usrp2/control_lib,data/full_repos/permissive/447976230/priority_enc\n             data/full_repos/permissive/447976230/fpga/usrp2/control_lib,data/full_repos/permissive/447976230/priority_enc.v\n             data/full_repos/permissive/447976230/fpga/usrp2/control_lib,data/full_repos/permissive/447976230/priority_enc.sv\n             priority_enc\n             priority_enc.v\n             priority_enc.sv\n             obj_dir/priority_enc\n             obj_dir/priority_enc.v\n             obj_dir/priority_enc.sv\n%Error: Exiting due to 1 error(s)\n"
module pic
  (input clk_i, input rst_i, input cyc_i, input stb_i,
   input [2:0] adr_i, 
   input we_i, 
   input [31:0] dat_i, 
   output reg [31:0] dat_o, 
   output reg ack_o, 
   output reg int_o,
   input [31:0] irq
   );

   reg [31:0] 	pol, edgen, pending, mask;
   reg [31:0] 	lirq, dirq;
   

   always @(posedge clk_i)
     lirq <=  irq;
   

   always @(posedge clk_i)
     dirq <=  lirq;


   function trigger;
      input 	edgen, pol, lirq, dirq;
      reg 	edge_irq, level_irq;
      begin
	 edge_irq  = pol ? (lirq & ~dirq) : (dirq & ~lirq);
	 level_irq = pol ? lirq : ~lirq;
	 trigger = edgen ? edge_irq : level_irq;
      end
   endfunction
   
   reg  [31:0] irq_event;
   integer     n;
   always @(posedge clk_i)
     for(n = 0; n < 32; n = n+1)
       irq_event[n] <=  trigger(edgen[n], pol[n], lirq[n], dirq[n]);


   wire        wb_acc = cyc_i & stb_i;
   wire        wb_wr  = wb_acc & we_i;

   always @(posedge clk_i)
     if (rst_i)
       begin
          pol   <=  0;
          edgen <=  0;
          mask  <=  0;
       end
     else if(wb_wr)
       case (adr_i)
         3'd0 : edgen <=  dat_i;
         3'd1 : pol   <=  dat_i;
         3'd2 : mask  <=  dat_i;
         3'd3 : ;
	 3'd4 : ;
       endcase


   always @(posedge clk_i)
     if (rst_i)
       pending <=  0;
     else if ( wb_wr & (adr_i == 3'd3) )
       pending <=  (pending & ~dat_i) | irq_event;
     else
       pending <=  pending | irq_event;

   wire [31:0] live_enc;
   priority_enc priority_enc ( .in(pending & ~mask), .out(live_enc) );
   
   always @(posedge clk_i)
      case (adr_i)
        3'd0 : dat_o <= edgen;
        3'd1 : dat_o <= pol;
        3'd2 : dat_o <= mask;
        3'd3 : dat_o <= pending;
	3'd4 : dat_o <= live_enc;
      endcase

   always @(posedge clk_i)
     ack_o <=  wb_acc & !ack_o;

   always @(posedge clk_i)
     if(rst_i)
       int_o <=  0;
     else
       int_o <=  |(pending & ~mask);
   
endmodule
module pic
  (input clk_i, input rst_i, input cyc_i, input stb_i,
   input [2:0] adr_i, 
   input we_i, 
   input [31:0] dat_i, 
   output reg [31:0] dat_o, 
   output reg ack_o, 
   output reg int_o,
   input [31:0] irq
   );


   reg [31:0] 	pol, edgen, pending, mask;
   reg [31:0] 	lirq, dirq;
   

   always @(posedge clk_i)
     lirq <=  irq;
   

   always @(posedge clk_i)
     dirq <=  lirq;


   function trigger;
      input 	edgen, pol, lirq, dirq;
      reg 	edge_irq, level_irq;
      begin
	 edge_irq  = pol ? (lirq & ~dirq) : (dirq & ~lirq);
	 level_irq = pol ? lirq : ~lirq;
	 trigger = edgen ? edge_irq : level_irq;
      end
   endfunction
   
   reg  [31:0] irq_event;
   integer     n;
   always @(posedge clk_i)
     for(n = 0; n < 32; n = n+1)
       irq_event[n] <=  trigger(edgen[n], pol[n], lirq[n], dirq[n]);


   wire        wb_acc = cyc_i & stb_i;
   wire        wb_wr  = wb_acc & we_i;

   always @(posedge clk_i)
     if (rst_i)
       begin
          pol   <=  0;
          edgen <=  0;
          mask  <=  0;
       end
     else if(wb_wr)
       case (adr_i)
         3'd0 : edgen <=  dat_i;
         3'd1 : pol   <=  dat_i;
         3'd2 : mask  <=  dat_i;
         3'd3 : ;
	 3'd4 : ;
       endcase


   always @(posedge clk_i)
     if (rst_i)
       pending <=  0;
     else if ( wb_wr & (adr_i == 3'd3) )
       pending <=  (pending & ~dat_i) | irq_event;
     else
       pending <=  pending | irq_event;

   wire [31:0] live_enc;
   priority_enc priority_enc ( .in(pending & ~mask), .out(live_enc) );
   
   always @(posedge clk_i)
      case (adr_i)
        3'd0 : dat_o <= edgen;
        3'd1 : dat_o <= pol;
        3'd2 : dat_o <= mask;
        3'd3 : dat_o <= pending;
	3'd4 : dat_o <= live_enc;
      endcase

   always @(posedge clk_i)
     ack_o <=  wb_acc & !ack_o;

   always @(posedge clk_i)
     if(rst_i)
       int_o <=  0;
     else
       int_o <=  |(pending & ~mask);
   
endmodule