Hi,
Currently I'm working with Kintex 7, for random bit sequence function. I have created HLS IP for the function, integrated IP with vivado and exported it to SDK.
But in SDK, i am getting only "Single bit" value instead of sequence of random bits in Tera Terminal. I think its showing last bit of sequence in Hardware. Please anyone guide me. What`s wrong in my coding? Need help from anyone.
Hls Source code
Code C++ - [expand ] 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdint.h>
#include <stdio.h>
#include "ap_cint.h"
int PRBS_prj( )
{
#pragma HLS INTERFACE s_axilite port=return bundle=a
int start_state = 0xCD ;
int lfsr = start_state;
bool bit;
unsigned period = 0 ;
do
{
/* taps: 3, 2 and 1 ; feedback polynomial: x^3 + x^2 + 1 */
bit = ( ( lfsr >> 0 ) ^ ( lfsr >> 2 ) ^ ( lfsr >> 3 ) ^ ( lfsr >> 4 ) ) & 1 ;
printf ( "%d" , bit) ;
lfsr = ( lfsr >> 1 ) | ( bit << 7 ) ;
++ period;
} while ( lfsr ! = start_state) ;
return bit;
}
Test Bench
#include <stdint.h>
#include <stdio.h>
#include "ap_cint.h"
int main( )
{
int start_state = 0xCD ;
int lfsr = start_state;
bool bit;
unsigned period = 0 ;
PRBS_prj( ) ;
do
{
bit = ( ( lfsr >> 0 ) ^ ( lfsr >> 2 ) ^ ( lfsr >> 3 ) ^ ( lfsr >> 4 ) ) & 1 ;
printf ( "%d" , bit) ;
lfsr = ( lfsr >> 1 ) | ( bit << 7 ) ;
++ period;
} while ( lfsr ! = start_state) ;
return 0 ;
}
SDK Source Code
#include "xprbs_prj.h"
int main( )
{
init_platform( ) ;
bool Resulth;
xil_printf( "%c[2J" ,27 ) ;
XPrbs_prj PRBS;
XPrbs_prj * PRBSPTR= & PRBS;
XPrbs_prj_Initialize( PRBSPTR,XPAR_PRBS_PRJ_0_DEVICE_ID) ;
XPrbs_prj_Start( PRBSPTR) ;
while ( ! XPrbs_prj_IsDone( PRBSPTR) ) ;
Resulth= XPrbs_prj_Get_return( PRBSPTR) ;
xil_printf( "[hw] Resulth = %d \r \n " , Resulth) ;
cleanup_platform( ) ;
return 0 ;
}
************************** Function Prototypes *****************************/
#ifndef __linux__
int XPrbs_prj_Initialize( XPrbs_prj * InstancePtr, u16 DeviceId) ;
XPrbs_prj_Config* XPrbs_prj_LookupConfig( u16 DeviceId) ;
int XPrbs_prj_CfgInitialize( XPrbs_prj * InstancePtr, XPrbs_prj_Config * ConfigPtr) ;
#else
int XPrbs_prj_Initialize( XPrbs_prj * InstancePtr, const char * InstanceName) ;
int XPrbs_prj_Release( XPrbs_prj * InstancePtr) ;
#endif
void XPrbs_prj_Start( XPrbs_prj * InstancePtr) ;
u32 XPrbs_prj_IsDone( XPrbs_prj * InstancePtr) ;
u32 XPrbs_prj_IsIdle( XPrbs_prj * InstancePtr) ;
u32 XPrbs_prj_IsReady( XPrbs_prj * InstancePtr) ;
void XPrbs_prj_EnableAutoRestart( XPrbs_prj * InstancePtr) ;
void XPrbs_prj_DisableAutoRestart( XPrbs_prj * InstancePtr) ;
u32 XPrbs_prj_Get_return( XPrbs_prj * InstancePtr) ;
void XPrbs_prj_InterruptGlobalEnable( XPrbs_prj * InstancePtr) ;
void XPrbs_prj_InterruptGlobalDisable( XPrbs_prj * InstancePtr) ; [ ATTACH= CONFIG] 138437 ._xfImport[ / ATTACH] [ ATTACH= CONFIG] 138438 ._xfImport[ / ATTACH] [ ATTACH= CONFIG] 138439 ._xfImport[ / ATTACH]
void XPrbs_prj_InterruptEnable( XPrbs_prj * InstancePtr, u32 Mask) ;
void XPrbs_prj_InterruptDisable( XPrbs_prj * InstancePtr, u32 Mask) ;
void XPrbs_prj_InterruptClear( XPrbs_prj * InstancePtr, u32 Mask) ;
u32 XPrbs_prj_InterruptGetEnabled( XPrbs_prj * InstancePtr) ;
u32 XPrbs_prj_InterruptGetStatus( XPrbs_prj * InstancePtr) ;
#ifdef __cplusplus
}
#endif
Last edited by a moderator: May 2, 2017