Материал: ВКР_Соболев

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

17. АО ПКК «Миландр». ТСКЯ.431281.002СП. Сигнальный процессор со статической суперскалярной архитектурой 1967ВН028, К1967ВН028, К1967ВН028К, 1967ВН02Н4, К1967ВН02Н4.

18. Altera. Analog Devices Link-Port Reference Design. – https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/an/an332.pdf

19. Altera. Design Guidelines for Implementing LVDS Interfaces in Cyclone Series Devices.– https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/an/an479.pdf

20. Денисов А. О документировании проектов для ПЛИС // Компоненты и технологии. 2010, вып. № 9. С. 70–72.

21. ГОСТ 19.101–77. Единая система программной документации (ЕСПД). Виды программ и программных документов (с Изменением N 1). М.: Стандартинформ, 2010.

22. ГОСТ 19.103–77. ГОСТ 19.103-77 ЕСПД. Обозначения программ и программных документов. М.: Стандартинформ, 2010

Приложение а. Система hps-SoC в Platform Designer

Рисунок А.1 – Начало системы, HPS и первые два блока памяти

Рисунок А.2 – Остальные используемые блоки памяти и служебные блоки сиcтемы

Рисунок А.3 – Конец системы

Приложение б. Код программы arm-сервера

/* Creates a datagram server. The port

number is passed as an argument. This

server runs forever */

#include <sys/types.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <string.h>

#include <netdb.h>

#include <stdio.h>

#include <sys/mman.h>

#include <fcntl.h>

#include "hwlib.h"

#include "socal/socal.h"

#include "socal/hps.h"

#include "socal/alt_gpio.h"

#include "hps_0.h"

volatile uint8_t * ocm_service = NULL ;

volatile uint16_t* ocm_input_re = NULL ;

volatile uint16_t* ocm_input_im = NULL ;

volatile uint32_t * ocm_output_re = NULL ;

#define LOW_ADDRESS 0x0000FFFF

#define HIGH_ADDRESS 0xFFFF0000

#define HW_REGS_BASE ( ALT_STM_OFST )

#define HW_REGS_SPAN ( 0x04000000 )

#define HW_REGS_MASK ( HW_REGS_SPAN - 1 )

void error(const char *msg) {

perror(msg);

exit(0);

}

int main(int argc, char *argv[]) {

//for ocm mapping

void *virtual_base;

int fd;

int addr;

//for UDP

int serviceSuccess, dataSuccess;

int sock, length, n;

socklen_t fromlen;

struct sockaddr_in server;

struct sockaddr_in from;

uint8_t dgramService[5];

uint32_t dgramData[256];

uint32_t dgramOutput[512];

uint16_t dataLength = 0x0;

char ack_buffer[256];

if (argc < 2) {

fprintf(stderr, "error: no port provided\n");

exit(0);

}

//opening dev/mem

if( ( fd = open( "/dev/mem", ( O_RDWR | O_SYNC ) ) ) == -1 ) {

printf( "error: could not open \"/dev/mem\"...\n" );

return( 1 );

}

//mapping

virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, HW_REGS_BASE );

if( virtual_base == MAP_FAILED ) {

printf( "error: mmap() failed...\n" );

close( fd );

return( 1 );

}

//initializing ocm base address

ocm_service = (uint8_t*)(virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + OCM_SERVICE_BASE) & (unsigned long)(HW_REGS_MASK)));

ocm_input_re = (uint16_t*)(virtual_base + (( unsigned long)(ALT_LWFPGASLVS_OFST + OCM_DATA_INPUT_RE_BASE) & (unsigned long)(HW_REGS_MASK)));

ocm_input_im = (uint16_t*)(virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + OCM_DATA_INPUT_IM_BASE) & (unsigned long)(HW_REGS_MASK)));

ocm_output_re = (uint32_t*)(virtual_base + (( unsigned long)(ALT_LWFPGASLVS_OFST + OCM_DATA_OUTPUT_RE_BASE) & (unsigned long)(HW_REGS_MASK)));

//opening socket, initializing server

sock = socket(AF_INET, SOCK_DGRAM, 0);

if (sock < 0)

error("error: opening socket");

length = sizeof(server);

bzero(&server,length);

server.sin_family=AF_INET;

server.sin_addr.s_addr=INADDR_ANY;

server.sin_port=htons(atoi(argv[1]));

if (bind(sock,(struct sockaddr *)&server,length)<0)

error("binding");

fromlen = sizeof(struct sockaddr_in);

//clearing the buffers

for (n = 0; n < 5; n++) dgramService[n] = 0x00;

for (n = 0; n < 256; n++) dgramData[n] = 0x00000000;

while (1) {

//waiting for service datagram

puts("Waiting for service...");

//receiving service datagram

serviceSuccess = recvfrom(sock, dgramService,5,0,

(struct sockaddr *)&from, &fromlen);

if (serviceSuccess < 0) error("recvfrom, service");

puts("Received a service datagram: ");

for (n = 0; n < 5; n++) printf("%04X ", dgramService[n]);

putchar('\n');

//letting client know we received the service datagram

n = sendto(sock, "Got service", 11, 0, (struct sockaddr *)&from,fromlen);

if (n < 0) error("sendto service"); */

//waiting for data datagram

puts("Waiting for data...");

//receiving data datagram

dataSuccess = recvfrom(sock,dgramData,1024,0,

(struct sockaddr *)&from,&fromlen);

if (dataSuccess < 0) error("recvfrom, data");

//printing received data

puts("Received a data datagram: ");

for (n = 0; n < 256; n++) if (dgramData[n] & 0xFFFFFFFF)

printf("%08X ", dgramData[n]);

putchar('\n');

//letting client know we received the data datagram

n = sendto(sock, "Got data", 8, 0, (struct sockaddr *)&from,fromlen);

if (n < 0) error("sendto data");

puts("Press enter");

getchar();

//getting data length

dataLength = (uint16_t)((dgramService[3] << 8) & 0xFF00) | (uint16_t)((dgramService[4]) & 0x00FF);

printf("dataLength = %d %08X\n", dataLength, dataLength);

//putting info into ocm

for (addr = 0; addr < 5; addr++)

*(ocm_service+addr) = dgramService[addr];

for (addr = 0, n = 0; addr < 256; addr++) {

*(ocm_input_im+addr) = (uint16_t)(dgramData[n] & LOW_ADDRESS);

*(ocm_input_re+addr) = (uint16_t)((dgramData[n] & HIGH_ADDRESS) >> 16);

n++;

}

puts("Press enter to look at ocm");

getchar();

//looking at ocm

for (addr = 0; addr < 5; addr++)

printf("Service address: %d, content: %d %08X\n", addr, (*(ocm_service+addr)), (*(ocm_service+addr)));

for (addr = 0; addr < 256; addr++)

printf("Input address: %d, content: %d %08X\n", addr, (*(ocm_input_re+addr)), (*(ocm_input_re+addr)));

for (addr = 0; addr < 256; addr++)

printf("Input address: %d, content: %d %08X\n", addr, (*(ocm_input_im+addr)), (*(ocm_input_im+addr)));

for (addr = 0; addr < dataLength; addr++)

printf("Output address: %d, content: %d %08X\n", addr, (*(ocm_output_re+addr)), (*(ocm_output_re+addr)));

//waiting for signal to form output datagram

puts("Press enter to send output back to client");

getchar();

//forming the output datagram

for (addr = 0; addr < dataLength; addr++)

{

dgramOutput[addr] = (*(ocm_output+addr));

}

//sending the output datagram to client

n = sendto(sock,dgramOutput,dataLength*4,0, (struct sockaddr *)&from,fromlen);

if (n < 0) error("sendto output");

//getting an ack from the client that it received the datagram

n = recvfrom(sock, ack_buffer,256,0,

(struct sockaddr *)&from,&fromlen);

if (n < 0) error("recvfrom output");

write(1,"Got an ack: ",12);

write(1,ack_buffer,n);

puts("Press enter");

getchar();

}

return 0;

}

Приложение в. Rtl-диаграммы подмодулей модулей сопряжения

Рисунок В.1 – Подмодуль eth_service

Рисунок В.2 – Подмодуль eth_read

Рисунок В.3 – Подмодуль eth_write

Приложение г. Подробные результаты моделирования модуля сопряжения с Link

Рисунок Г.1 – Начало моделирования

Рисунок Г.2 – Появление первого квадрослова на FPGA-приемнике

Рисунок Г.3 – Начало выдачи квадрослов на имитации DSP-приемника

Рисунок Г.4 – Конец приема FPGA-приемника

Рисунок Г.5 – конец приема имитации DSP-приемника

Приложение д. Назначение контактов модуля сопряжения с Link

Таблица Д.1 – Назначение контактов модуля сопряжения с Link

Контакт разъема

Цепь на схеме

Номер pin ПЛИС

Сигнал Verilog

Сигнал

J10.1

GPIO0

L13

J10.2

GPIO1

L16

DI[3]

DI 3 n

J10.3

GPIO2

L15

gpio[2]

DI 3 p

J10.4

GPIO3

K16

J10.5

GPIO4

P16

CLKI

CLKI n

J10.6

GPIO5

R16

gpio[5]

CLKI p

J10.7

GPIO6

N16

CLKO

CLKO n

J10.8

GPIO7

N15

gpio[7]

CLKO p

J10.9

GPIO8

N14

J10.10

GPIO9

P15

J10.11

VCC_5V_GPIO

---

J10.12

GND

---

J10.13

GPIO10

N8

gpio[10]

ACKO

ACKO

J10.14

GPIO11

P8

gpio[11]

ACKI

ACKI

J10.15

GPIO12

M8

gpio[12]

BCMPI

BCMPI

J10.16

GPIO13

L8

BCMPO

BCMPO

J10.17

GPIO14

R7

gpio[14]

DO[0]

DO 0 p

J10.18

GPIO15

T7

gpio[13]

DO 0 n

J10.19

GPIO16

L7

J10.20

GPIO17

M7

J10.21

GPIO18

R6

gpio[18]

DO[1]

DO 1 p

J10.22

GPIO19

T6

DO 1 n

J10.23

GPIO20

T2

J10.24

GPIO21

M6

J10.25

GPIO22

R5

gpio[22]

DO[2]

DO 2 p

J10.26

GPIO23

T5

DO 2 n

J10.27

GPIO24

N5

gpio[24]

DO[3]

DO 3 p

J10.28

GPIO25

N6

DO 3 n

J10.29

VCC_3.3V

---

J10.30

GND

---

J10.31

GPIO26

R4

J10.32

GPIO27

T4

J10.33

GPIO28

N3

gpio[28]

DI[0]

DI 0 p

J10.34

GPIO29

P3

DI 0 n

J10.35

GPIO30

R3

gpio[30]

DI[1]

DI 1 p

J10.36

GPIO31

T3

DI 1 n

J10.37

GPIO32

P6

J10.38

GPIO33

P2

gpio[33]

DI[2]

DI 2 p

J10.39

GPIO34

P1

DI 2 n

J10.40

GPIO35

R1

Источник: https://studfile.net/preview/16673049/