data/full_repos/permissive/214858095/FPGA_Exploration/spartan6/B205mini/ISE_Project/lib/rfnoc/blocks/rfnoc_block_radio/sim_radio_gen.sv
 line:16: before: "NSPC"
1: b'%Error: data/full_repos/permissive/214858095/FPGA_Exploration/spartan6/B205mini/ISE_Project/lib/rfnoc/blocks/rfnoc_block_radio/sim_radio_gen.sv:73: Unsupported or unknown PLI call: $urandom_range\n      if ($urandom_range(100) < STB_PROB) begin\n          ^~~~~~~~~~~~~~\n%Error: Exiting due to 1 error(s)\n        ... See the manual and https://verilator.org for more assistance.\n'
module sim_radio_gen #(
  parameter int NSPC         = 1,
  parameter int SAMP_W       = 32,
  parameter int NUM_CHANNELS = 1,
  parameter int STB_PROB     = 50,
  parameter int INCREMENT    = 2,
  parameter int PPS_PERIOD   = 50
) (
  input  bit                                radio_clk,
  input  bit                                radio_rst,
  output bit [NUM_CHANNELS*SAMP_W*NSPC-1:0] radio_rx_data,
  output bit [            NUM_CHANNELS-1:0] radio_rx_stb,
  output bit [                        63:0] radio_time,
  output bit                                radio_pps
);

  localparam int RADIO_W = SAMP_W*NSPC;
  typedef bit [RADIO_W-1:0] radio_t;
  typedef bit [SAMP_W-1:0] sample_t;

  initial assert (PPS_PERIOD % INCREMENT == 0) else
    $fatal(1, "PPS_PERIOD must be a multiple of INCREMENT");



  function radio_t [NUM_CHANNELS-1:0] radio_init();
    radio_t [NUM_CHANNELS-1:0] ret_val;
   
    for (int n = 0; n < NUM_CHANNELS; n++) begin
      sample_t sample;


      sample = sample_t'((2.0 ** SAMP_W) / NUM_CHANNELS * n);


      for (int s = 0; s < NSPC; s++) begin
        ret_val[n][s*SAMP_W +: SAMP_W] = sample + s;
      end
    end

    return ret_val;
  endfunction : radio_init






  radio_t [NUM_CHANNELS-1:0] data = radio_init();

  assign radio_rx_data = data;

  always @(posedge radio_clk) begin : radio_data_count_reg
    if (radio_rst) begin
      data         <= radio_init();
      radio_rx_stb <= '0;
    end else begin
      radio_rx_stb <= '0;
      if ($urandom_range(100) < STB_PROB) begin
        for (int n = 0; n < NUM_CHANNELS; n++) begin
          for (int s = 0; s < NSPC; s++) begin
            data[n][s*SAMP_W +: SAMP_W] <= data[n][s*SAMP_W +: SAMP_W] + NSPC;
          end
        end
        radio_rx_stb <= '1;
      end
    end
  end : radio_data_count_reg






  always @(posedge radio_clk) begin
    if (radio_rst) begin
      radio_time <= 64'b0;
      radio_pps  <=  1'b0;
    end else begin
      radio_pps  <= 1'b0;
      if (radio_rx_stb[0]) begin
        radio_time <= radio_time + INCREMENT;
        if (radio_time % PPS_PERIOD == 0 && radio_time != 0) begin
          radio_pps <= 1'b1;
        end
      end
    end
  end

endmodule
module sim_radio_gen #(
  parameter int NSPC         = 1,
  parameter int SAMP_W       = 32,
  parameter int NUM_CHANNELS = 1,
  parameter int STB_PROB     = 50,
  parameter int INCREMENT    = 2,
  parameter int PPS_PERIOD   = 50
) (
  input  bit                                radio_clk,
  input  bit                                radio_rst,
  output bit [NUM_CHANNELS*SAMP_W*NSPC-1:0] radio_rx_data,
  output bit [            NUM_CHANNELS-1:0] radio_rx_stb,
  output bit [                        63:0] radio_time,
  output bit                                radio_pps
);


  localparam int RADIO_W = SAMP_W*NSPC;
  typedef bit [RADIO_W-1:0] radio_t;
  typedef bit [SAMP_W-1:0] sample_t;

  initial assert (PPS_PERIOD % INCREMENT == 0) else
    $fatal(1, "PPS_PERIOD must be a multiple of INCREMENT");



  function radio_t [NUM_CHANNELS-1:0] radio_init();
    radio_t [NUM_CHANNELS-1:0] ret_val;
   
    for (int n = 0; n < NUM_CHANNELS; n++) begin
      sample_t sample;


      sample = sample_t'((2.0 ** SAMP_W) / NUM_CHANNELS * n);


      for (int s = 0; s < NSPC; s++) begin
        ret_val[n][s*SAMP_W +: SAMP_W] = sample + s;
      end
    end

    return ret_val;
  endfunction : radio_init






  radio_t [NUM_CHANNELS-1:0] data = radio_init();

  assign radio_rx_data = data;

  always @(posedge radio_clk) begin : radio_data_count_reg
    if (radio_rst) begin
      data         <= radio_init();
      radio_rx_stb <= '0;
    end else begin
      radio_rx_stb <= '0;
      if ($urandom_range(100) < STB_PROB) begin
        for (int n = 0; n < NUM_CHANNELS; n++) begin
          for (int s = 0; s < NSPC; s++) begin
            data[n][s*SAMP_W +: SAMP_W] <= data[n][s*SAMP_W +: SAMP_W] + NSPC;
          end
        end
        radio_rx_stb <= '1;
      end
    end
  end : radio_data_count_reg






  always @(posedge radio_clk) begin
    if (radio_rst) begin
      radio_time <= 64'b0;
      radio_pps  <=  1'b0;
    end else begin
      radio_pps  <= 1'b0;
      if (radio_rx_stb[0]) begin
        radio_time <= radio_time + INCREMENT;
        if (radio_time % PPS_PERIOD == 0 && radio_time != 0) begin
          radio_pps <= 1'b1;
        end
      end
    end
  end

endmodule