OpenCores
URL https://opencores.org/ocsvn/ha1588/ha1588/trunk

Subversion Repositories ha1588

[/] [ha1588/] [trunk/] [sim/] [top/] [ptp_drv_bfm/] [ptp_drv_bfm.c] - Diff between revs 24 and 26

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 24 Rev 26
Line 2... Line 2...
 
 
#include "svdpi.h"
#include "svdpi.h"
#include "../dpiheader.h"
#include "../dpiheader.h"
int ptp_drv_bfm_c(double fw_delay)
int ptp_drv_bfm_c(double fw_delay)
{
{
  int cpu_addr_i;
  unsigned int cpu_addr_i;
  int cpu_data_i;
  unsigned int cpu_data_i;
  int cpu_data_o;
  unsigned int cpu_data_o;
 
 
  // LOAD RTC PERIOD AND ACC_MODULO
  // LOAD RTC PERIOD AND ACC_MODULO
  cpu_addr_i = 0x00000020;
  cpu_addr_i = 0x00000020;
  cpu_data_i = 0x8;
  cpu_data_i = 0x8;
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_wr(cpu_addr_i, cpu_data_i);
Line 32... Line 32...
  cpu_data_i = 0x0;
  cpu_data_i = 0x0;
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_addr_i = 0x00000000;
  cpu_addr_i = 0x00000000;
  cpu_data_i = 0xA10;
  cpu_data_i = 0xA10;
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_wr(cpu_addr_i, cpu_data_i);
 
  // READ RTC SEC AND NS
 
  cpu_addr_i = 0x00000000;
 
  cpu_data_i = 0x0;
 
  cpu_wr(cpu_addr_i, cpu_data_i);
 
  cpu_addr_i = 0x00000000;
 
  cpu_data_i = 0x1;
 
  cpu_wr(cpu_addr_i, cpu_data_i);
 
  do {
 
    cpu_addr_i = 0x00000000;
 
    cpu_rd(cpu_addr_i, &cpu_data_o);
 
    //printf("%08x\n", (cpu_data_o & 0x1));
 
  } while ((cpu_data_o & 0x1) == 0x0);
 
  cpu_addr_i = 0X00000040;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("\ntime: \n%08x\n", cpu_data_o);
 
  cpu_addr_i = 0X00000044;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("%08x\n", cpu_data_o);
 
  cpu_addr_i = 0X00000048;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("%08x\n", cpu_data_o);
 
  cpu_addr_i = 0X0000004C;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("%08x\n", cpu_data_o);
  // LOAD RTC SEC AND NS
  // LOAD RTC SEC AND NS
  cpu_addr_i = 0x00000010;
  cpu_addr_i = 0x00000010;
  cpu_data_i = 0x0;
  cpu_data_i = 0x0;
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_wr(cpu_addr_i, cpu_data_i);
  cpu_addr_i = 0x00000014;
  cpu_addr_i = 0x00000014;
Line 81... Line 105...
    cpu_rd(cpu_addr_i, &cpu_data_o);
    cpu_rd(cpu_addr_i, &cpu_data_o);
    //printf("%08x\n", (cpu_data_o & 0x1));
    //printf("%08x\n", (cpu_data_o & 0x1));
  } while ((cpu_data_o & 0x1) == 0x0);
  } while ((cpu_data_o & 0x1) == 0x0);
  cpu_addr_i = 0X00000040;
  cpu_addr_i = 0X00000040;
  cpu_rd(cpu_addr_i, &cpu_data_o);
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("\ntime: \n%08x\n", cpu_data_o);
  cpu_addr_i = 0X00000044;
  cpu_addr_i = 0X00000044;
  cpu_rd(cpu_addr_i, &cpu_data_o);
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("%08x\n", cpu_data_o);
  cpu_addr_i = 0X00000048;
  cpu_addr_i = 0X00000048;
  cpu_rd(cpu_addr_i, &cpu_data_o);
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  printf("%08x\n", cpu_data_o);
  cpu_addr_i = 0X0000004C;
  cpu_addr_i = 0X0000004C;
  cpu_rd(cpu_addr_i, &cpu_data_o);
  cpu_rd(cpu_addr_i, &cpu_data_o);
  // READ RTC SEC AND NS
  printf("%08x\n", cpu_data_o);
  cpu_addr_i = 0x00000000;
 
  cpu_data_i = 0x0;
 
  cpu_wr(cpu_addr_i, cpu_data_i);
 
  cpu_addr_i = 0x00000000;
 
  cpu_data_i = 0x1;
 
  cpu_wr(cpu_addr_i, cpu_data_i);
 
  do {
 
    cpu_addr_i = 0x00000000;
 
    cpu_rd(cpu_addr_i, &cpu_data_o);
 
    //printf("%08x\n", (cpu_data_o & 0x1));
 
  } while ((cpu_data_o & 0x1) == 0x0);
 
  cpu_addr_i = 0X00000040;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  cpu_addr_i = 0X00000044;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  cpu_addr_i = 0X00000048;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
  cpu_addr_i = 0X0000004C;
 
  cpu_rd(cpu_addr_i, &cpu_data_o);
 
 
 
  int i;
  int i;
  // POLL TSU RX STATUS
  // POLL TSU RX STATUS
  int rx_queue_num;
  int rx_queue_num;
  do {
  do {
Line 118... Line 126...
    cpu_rd(cpu_addr_i, &cpu_data_o);
    cpu_rd(cpu_addr_i, &cpu_data_o);
    rx_queue_num = cpu_data_o;
    rx_queue_num = cpu_data_o;
    //printf("%08x\n", rx_queue_num);
    //printf("%08x\n", rx_queue_num);
  } while (!(rx_queue_num > 0x2));
  } while (!(rx_queue_num > 0x2));
  // READ TSU RX FIFO
  // READ TSU RX FIFO
  for (i=rx_queue_num; i>=0; i--) {
  for (i=rx_queue_num; i>0; i--) {
      cpu_addr_i = 0x00000000;
      cpu_addr_i = 0x00000000;
      cpu_data_i = 0x0;
      cpu_data_i = 0x0;
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_addr_i = 0x00000000;
      cpu_addr_i = 0x00000000;
      cpu_data_i = 0x400;
      cpu_data_i = 0x400;
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_addr_i = 0x00000050;
      cpu_addr_i = 0x00000050;
      cpu_rd(cpu_addr_i, &cpu_data_o);
      cpu_rd(cpu_addr_i, &cpu_data_o);
 
      printf("\nRx stamp: \n%08x\n", cpu_data_o);
      cpu_addr_i = 0x00000054;
      cpu_addr_i = 0x00000054;
      cpu_rd(cpu_addr_i, &cpu_data_o);
      cpu_rd(cpu_addr_i, &cpu_data_o);
 
      printf("%08x\n", cpu_data_o);
  }
  }
  // POLL TSU TX STATUS
  // POLL TSU TX STATUS
  int tx_queue_num;
  int tx_queue_num;
  do {
  do {
    cpu_addr_i = 0x00000008;
    cpu_addr_i = 0x00000008;
    cpu_rd(cpu_addr_i, &cpu_data_o);
    cpu_rd(cpu_addr_i, &cpu_data_o);
    tx_queue_num = cpu_data_o;
    tx_queue_num = cpu_data_o;
    //printf("%08x\n", tx_queue_num);
    //printf("%08x\n", tx_queue_num);
  } while (!(tx_queue_num > 0x2));
  } while (!(tx_queue_num > 0x2));
  // READ TSU TX FIFO
  // READ TSU TX FIFO
  for (i=tx_queue_num; i>=0; i--) {
  for (i=tx_queue_num; i>0; i--) {
      cpu_addr_i = 0x00000000;
      cpu_addr_i = 0x00000000;
      cpu_data_i = 0x0;
      cpu_data_i = 0x0;
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_addr_i = 0x00000000;
      cpu_addr_i = 0x00000000;
      cpu_data_i = 0x100;
      cpu_data_i = 0x100;
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_wr(cpu_addr_i, cpu_data_i);
      cpu_addr_i = 0x00000058;
      cpu_addr_i = 0x00000058;
      cpu_rd(cpu_addr_i, &cpu_data_o);
      cpu_rd(cpu_addr_i, &cpu_data_o);
 
      printf("\nTx stamp: \n%08x\n", cpu_data_o);
      cpu_addr_i = 0x0000005C;
      cpu_addr_i = 0x0000005C;
      cpu_rd(cpu_addr_i, &cpu_data_o);
      cpu_rd(cpu_addr_i, &cpu_data_o);
 
      printf("%08x\n", cpu_data_o);
  }
  }
 
 
  // READ BACK ALL REGISTERS
  // READ BACK ALL REGISTERS
  for (;;)
  for (;;)
  {
  {

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.