How to see Transceiver received data on UART Terminal

Hi all,
Is it possible to see transceiver 8 bit received data on UART terminal. I am using cyclone V Arrrow sockit board.

Hi,

Yes, it is possible.
But, what are you trying to do? please give more details.

Based on your board i don’t know if you’re connecting your transceiver to HPS or FPGA…
Do you are running Linux on the HPS?
What kind of transceiver? a bus transceiver? You only need GPIO? or any SPL?

1 Like

@Mikernl
Hi. thank you for your reply. So I have arrow sockit board (cyclone V) board. Transceiver is connected to FPGA. I am running Linux on HPS.
Here are my design details.

  1. My HDL design consists of a simple counter (modulus 15; counts from 0 to 14).

  2. A constant (8’hBC) which serves as word alligment control character for the transceiver.

  3. A mux. Whenever rx_syncstatus output of the transceiver goes high, the mux allows counter output to go to transciever 8 bit tx_parallel data input. Otherwise, constant 8’hBC will go to tx_paralleldata input.

  4. A pll generating 100MHz for transceiver tx_clkout generation and transciever pll and internal clocks.

  5. Below you can see the transceiver settings.


  6. A top level HDL module where I am simply stating that my 8 bit rx_received data goes into a register at every positive edge of tx_clkout. NOW THIS REGISTER VALUE I AM PLANNING TO SEE ON PUTTY TERMINAL: Below is the setup for my qsys where I connect my HPS to this top level register module.

Here is the HDL code for that top level register module that I made:

module xcvrputtysim(
input clk,
input reset,
input read,
output [7:0] readdata,
output tx_serial_data,
input rx_serial_data,
output rx_syncstatus,
output tx_serial_data1,
input rx_serial_data1,
output tx_clkout
);

reg [7:0] Regreaddata;
wire [7:0]rx_parallel_data;
wire outclk; 

assign readdata=Regreaddata;

xcvrtop u8(
.clk(clk),
.reset(reset),
.tx_serial_data(tx_serial_data),
.rx_serial_data(rx_serial_data),
.rx_parallel_data(rx_parallel_data),
.rx_syncstatus(rx_syncstatus),
.tx_serial_data1(tx_serial_data1),
.rx_serial_data1(rx_serial_data1),
.tx_clkout(tx_clkout)
);
always @(posedge tx_clkout)
	begin
		if(reset)
			begin
				Regreaddata<=0;
			end
		else if(read)
			begin
				Regreaddata<=rx_parallel_data;
			end
	end
endmodule

Can you please help me what can I do? My main system clock (clk) is 50 MHz. I tried but on putty terminal I am seeing strange words like 1129933, 85609, 998812 etc etc. Here is my C code that I tried for HPS:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h> 
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "C:\altera\15.1\embedded\ip\altera\hps\altera_hps\hwlib\include\hwlib.h"
#include "C:\altera\15.1\embedded\ip\altera\hps\altera_hps\hwlib\include\soc_cv_av\socal\socal.h"
#include "C:\altera\15.1\embedded\ip\altera\hps\altera_hps\hwlib\include\soc_cv_av\socal\hps.h" 
#include "C:\altera\15.1\embedded\ip\altera\hps\altera_hps\hwlib\include\soc_cv_av\socal\alt_gpio.h"
#include "D:\masterarbeit3\XCVRHWPutty - Copy\hps_0.h"

#define REG_BASE 0xFF200000 /*LWFPGA SLAVE Address*/
#define REG_SPAN 0x00200000

volatile unsigned int *reg_addr; /*this is the pointer that writes to the register. This is our write input*/
void* virtual_base; /*pointer to open device memory file*/

int main ()
{
	
int fd = EXIT_FAILURE;	

fd=open("/dev/mem",(O_RDWR|O_SYNC));
if (fd < 0) {
		perror("open");
		exit(EXIT_FAILURE);
			}			
printf("fd is ok\n");

virtual_base=mmap(NULL,REG_SPAN,(PROT_READ|PROT_WRITE),MAP_SHARED,fd,REG_BASE);
printf("virtual base pointer to open device memory file is ok\n");

reg_addr = (unsigned int *) (virtual_base+NEW_COMPONENT_0_BASE); /*accessing base address of register*/
while(1)
{
printf("pointer value is %d\n", *reg_addr);
}
return 0;
}

Hi,

Ok, first thing…

Are we sure you are synthesizing correctly? i.e. you are properly loading your .rbf , how did you corroborate it?
We need to be sure that your IP core is working properly previous trying to interact with the HPS.

Does your IP core is connected to lwhps2fpga bridge?

Does your bridges are enabled? i.e. /sys/class/fpga-bridge/*

@Mikernl
Hi. Thank you so much for your message. I really needed help and I am really thankful that you are responding me.

  1. My design is synthesized correctly. I have also uploaded my .rbf onto my board. To be sure that my design is working, I connected the rx_sync_status output of the transceiver to one of the LED on board and the LED is light up. My simualtion results of all the IP cores are also working fine. I also simulated the whole design and simulation results are also fine.
  2. Yes I connected my IP core to lwhps2fpga bridge.
  3. Yes the bridges are enabled.
  4. I executed my .c file onto my board and the output that I was getting is strange like, I am expecting the counter sequence like 1,2,3,4,……,14,0,1,2,3…14,0,1,2,…
    and what I am getting is like 99865,1123498, 772355,…
    Another point I want to mention is that Avalon bus is operating at 50MHz clock while my transceiver is working at 100MHz (transceiver pll clock). I am stuck here.
    If you like I can also share my design files with you so that you can guide me what can I do?

Here you can see output from my putty terminal: I wana see my counter sequence here. What are these strange numbers. Can you please help me…!!

fd is ok
virtual base pointer to open device memory file is ok
pointer value is 185140997
pointer value is 151454979
pointer value is 17697802
pointer value is 84082958
pointer value is 235670024
pointer value is 151454979
pointer value is 201984006
pointer value is 235670024
pointer value is 854793
pointer value is 854793
pointer value is 84082958
pointer value is 17697802
pointer value is 201984006
pointer value is 134611970
pointer value is 134611970
pointer value is 218827015
pointer value is 151454979
pointer value is 185140997
pointer value is 84082958
pointer value is 235670024
pointer value is 100925952
pointer value is 100925952
pointer value is 50400780
pointer value is 100925952
pointer value is 235670024
pointer value is 100925952
pointer value is 134611970
pointer value is 84082958
pointer value is 168297988
pointer value is 185140997
pointer value is 117768961
pointer value is 117768961
pointer value is 84082958
pointer value is 218827015
pointer value is 185140997
pointer value is 67239949
pointer value is 17697802
pointer value is 50400780
pointer value is 33557771
pointer value is 168297988
pointer value is 50400780
pointer value is 168297988
pointer value is 134611970
pointer value is 168297988
pointer value is 134611970
pointer value is 17697802
pointer value is 100925952
pointer value is 151454979
pointer value is 84082958
pointer value is 854793
pointer value is 201984006
pointer value is 17697802
pointer value is 84082958
pointer value is 50400780
pointer value is 235670024
pointer value is 151454979
pointer value is 854793
pointer value is 185140997
pointer value is 33557771
pointer value is 67239949
pointer value is 235670024
pointer value is 185140997
pointer value is 151454979
pointer value is 100925952
pointer value is 218827015
pointer value is 854793
pointer value is 17697802
pointer value is 168297988
pointer value is 151454979
pointer value is 17697802
pointer value is 33557771
pointer value is 84082958
pointer value is 117768961
pointer value is 185140997
pointer value is 201984006
pointer value is 117768961
pointer value is 201984006
pointer value is 854793
pointer value is 168297988
pointer value is 67239949
pointer value is 185140997
pointer value is 67239949
pointer value is 201984006
pointer value is 84082958
pointer value is 201984006
pointer value is 235670024
pointer value is 151454979
pointer value is 168297988
pointer value is 100925952
pointer value is 33557771
pointer value is 117768961
pointer value is 151454979
pointer value is 84082958
pointer value is 235670024
pointer value is 84082958
pointer value is 134611970
pointer value is 100925952
pointer value is 67239949
pointer value is 50400780
pointer value is 17697802
pointer value is 201984006
pointer value is 854793
pointer value is 100925952
pointer value is 168297988
pointer value is 50400780
pointer value is 201984006
pointer value is 100925952
pointer value is 117768961
pointer value is 201984006
pointer value is 17697802
pointer value is 100925952
pointer value is 168297988
pointer value is 201984006
pointer value is 168297988
pointer value is 168297988
pointer value is 50400780
pointer value is 151454979
pointer value is 33557771
pointer value is 168297988
pointer value is 100925952
pointer value is 201984006
pointer value is 235670024
pointer value is 33557771
pointer value is 185140997
pointer value is 33557771
pointer value is 33557771
pointer value is 235670024
pointer value is 67239949
pointer value is 854793
pointer value is 134611970
pointer value is 17697802
pointer value is 33557771
pointer value is 201984006
pointer value is 201984006
pointer value is 134611970
pointer value is 151454979
pointer value is 151454979
pointer value is 235670024
pointer value is 100925952
pointer value is 117768961
pointer value is 168297988
pointer value is 235670024
pointer value is 17697802
pointer value is 67239949
pointer value is 117768961
pointer value is 67239949
pointer value is 185140997
pointer value is 218827015
pointer value is 134611970
pointer value is 218827015
pointer value is 854793
pointer value is 33557771
pointer value is 151454979
pointer value is 33557771
pointer value is 67239949
pointer value is 33557771
pointer value is 185140997
pointer value is 84082958
pointer value is 151454979
pointer value is 50400780
pointer value is 84082958
pointer value is 151454979
pointer value is 151454979
pointer value is 117768961
pointer value is 168297988
pointer value is 33557771
pointer value is 50400780
pointer value is 67239949
pointer value is 84082958
pointer value is 151454979
pointer value is 235670024
pointer value is 84082958
pointer value is 67239949
pointer value is 218827015
pointer value is 100925952
pointer value is 218827015
pointer value is 117768961
pointer value is 185140997
pointer value is 100925952
pointer value is 17697802
pointer value is 84082958
pointer value is 84082958
pointer value is 17697802
pointer value is 17697802
pointer value is 235670024
pointer value is 151454979
pointer value is 201984006
pointer value is 17697802
pointer value is 33557771
pointer value is 134611970
pointer value is 235670024
pointer value is 100925952
pointer value is 854793
pointer value is 201984006
pointer value is 17697802
pointer value is 185140997
pointer value is 185140997
pointer value is 33557771
pointer value is 168297988
pointer value is 134611970
pointer value is 117768961
pointer value is 235670024
pointer value is 50400780
pointer value is 854793
pointer value is 84082958
pointer value is 218827015
pointer value is 50400780
pointer value is 33557771
pointer value is 84082958
pointer value is 67239949
pointer value is 218827015
pointer value is 84082958
pointer value is 67239949
pointer value is 100925952
pointer value is 218827015
pointer value is 854793
pointer value is 151454979
pointer value is 854793
pointer value is 84082958
pointer value is 218827015
pointer value is 168297988
pointer value is 67239949
pointer value is 67239949
pointer value is 33557771
pointer value is 235670024
pointer value is 33557771
pointer value is 201984006
pointer value is 185140997
pointer value is 134611970
pointer value is 218827015
pointer value is 235670024
pointer value is 201984006
pointer value is 67239949
pointer value is 17697802
pointer value is 168297988
pointer value is 854793
pointer value is 67239949
pointer value is 100925952
pointer value is 218827015
pointer value is 134611970
pointer value is 17697802
pointer value is 168297988
pointer value is 67239949
pointer value is 168297988
pointer value is 17697802
pointer value is 117768961
pointer value is 17697802
pointer value is 151454979
pointer value is 33557771
pointer value is 100925952
pointer value is 185140997
pointer value is 168297988
pointer value is 134611970
pointer value is 218827015
pointer value is 185140997
pointer value is 854793
pointer value is 33557771
pointer value is 151454979
pointer value is 33557771
pointer value is 84082958
pointer value is 84082958
pointer value is 84082958
pointer value is 235670024
pointer value is 201984006
pointer value is 33557771
pointer value is 17697802
pointer value is 854793
pointer value is 151454979
pointer value is 33557771
pointer value is 854793
pointer value is 235670024
pointer value is 117768961
pointer value is 84082958
pointer value is 100925952
pointer value is 218827015
pointer value is 100925952
pointer value is 134611970
pointer value is 67239949
pointer value is 134611970
pointer value is 235670024
pointer value is 50400780
pointer value is 67239949
pointer value is 50400780
pointer value is 67239949
pointer value is 235670024
pointer value is 50400780
pointer value is 100925952
pointer value is 117768961
pointer value is 134611970
pointer value is 84082958
pointer value is 33557771
pointer value is 84082958
pointer value is 151454979
pointer value is 201984006
pointer value is 17697802
pointer value is 151454979
pointer value is 218827015
pointer value is 151454979
pointer value is 117768961
pointer value is 50400780
pointer value is 201984006
pointer value is 84082958
pointer value is 185140997
pointer value is 117768961
pointer value is 134611970
pointer value is 84082958
pointer value is 218827015
pointer value is 50400780
pointer value is 134611970
pointer value is 151454979
pointer value is 218827015
pointer value is 185140997
pointer value is 235670024
pointer value is 84082958
pointer value is 151454979
pointer value is 854793
pointer value is 854793
pointer value is 17697802
pointer value is 100925952
pointer value is 151454979
pointer value is 50400780
pointer value is 17697802
pointer value is 134611970
pointer value is 201984006
pointer value is 134611970
pointer value is 50400780
pointer value is 854793
pointer value is 117768961
pointer value is 17697802
pointer value is 168297988
pointer value is 151454979
pointer value is 168297988
pointer value is 134611970
pointer value is 151454979
pointer value is 235670024
pointer value is 33557771
pointer value is 50400780
pointer value is 151454979
pointer value is 117768961
pointer value is 17697802
pointer value is 67239949
pointer value is 33557771
pointer value is 84082958
pointer value is 117768961
pointer value is 67239949
pointer value is 100925952
pointer value is 854793
pointer value is 854793
pointer value is 117768961
pointer value is 134611970
pointer value is 235670024
pointer value is 84082958
pointer value is 17697802
pointer value is 100925952
pointer value is 854793
pointer value is 201984006
pointer value is 235670024
pointer value is 151454979
pointer value is 854793
pointer value is 134611970
pointer value is 33557771
pointer value is 100925952
pointer value is 117768961
pointer value is 185140997
pointer value is 134611970
pointer value is 218827015
pointer value is 117768961
pointer value is 84082958
pointer value is 218827015
pointer value is 117768961
pointer value is 854793
pointer value is 185140997
pointer value is 134611970
pointer value is 100925952
pointer value is 151454979
pointer value is 151454979
pointer value is 218827015
pointer value is 168297988
pointer value is 50400780
pointer value is 201984006
pointer value is 185140997
pointer value is 100925952
pointer value is 168297988
pointer value is 151454979
pointer value is 151454979
pointer value is 33557771
pointer value is 100925952
pointer value is 117768961
pointer value is 168297988
pointer value is 50400780
pointer value is 84082958
pointer value is 185140997
pointer value is 185140997
pointer value is 33557771
pointer value is 17697802
pointer value is 218827015
pointer value is 100925952
pointer value is 117768961
pointer value is 84082958
pointer value is 50400780
pointer value is 151454979
pointer value is 67239949
pointer value is 185140997
pointer value is 67239949
pointer value is 201984006
pointer value is 50400780
pointer value is 17697802
pointer value is 50400780
pointer value is 168297988
pointer value is 151454979
pointer value is 151454979
pointer value is 17697802
pointer value is 235670024
pointer value is 17697802
pointer value is 134611970
pointer value is 134611970
pointer value is 17697802
pointer value is 33557771
pointer value is 235670024
pointer value is 151454979
pointer value is 218827015
pointer value is 117768961
pointer value is 235670024
pointer value is 117768961
pointer value is 50400780
pointer value is 134611970
pointer value is 17697802
pointer value is 117768961
pointer value is 168297988
pointer value is 33557771
pointer value is 854793
pointer value is 17697802
pointer value is 151454979
pointer value is 854793
pointer value is 151454979
pointer value is 33557771
pointer value is 168297988
pointer value is 117768961
pointer value is 151454979
pointer value is 100925952
pointer value is 100925952
pointer value is 218827015
pointer value is 17697802
pointer value is 84082958
pointer value is 84082958
pointer value is 854793
pointer value is 50400780
pointer value is 50400780
pointer value is 33557771
pointer value is 201984006
pointer value is 168297988
pointer value is 168297988
pointer value is 50400780
pointer value is 151454979
pointer value is 235670024
pointer value is 67239949
pointer value is 17697802
pointer value is 854793
pointer value is 100925952
pointer value is 151454979
pointer value is 134611970
pointer value is 218827015
pointer value is 100925952
pointer value is 84082958
pointer value is 117768961
pointer value is 185140997
pointer value is 117768961
pointer value is 50400780
pointer value is 84082958
pointer value is 168297988
pointer value is 84082958
pointer value is 235670024
pointer value is 134611970
pointer value is 235670024
pointer value is 185140997
pointer value is 100925952
pointer value is 134611970
pointer value is 33557771
pointer value is 168297988
pointer value is 168297988
pointer value is 185140997
pointer value is 134611970
pointer value is 854793
pointer value is 50400780
pointer value is 168297988
pointer value is 854793
pointer value is 84082958
pointer value is 67239949
pointer value is 151454979
pointer value is 151454979
pointer value is 185140997
pointer value is 151454979
pointer value is 117768961
pointer value is 854793
pointer value is 117768961
pointer value is 50400780
pointer value is 117768961
pointer value is 117768961
pointer value is 151454979
pointer value is 168297988
pointer value is 33557771
pointer value is 50400780
pointer value is 168297988
pointer value is 17697802
pointer value is 134611970
pointer value is 100925952
pointer value is 67239949
pointer value is 100925952
pointer value is 854793
pointer value is 33557771
pointer value is 168297988
pointer value is 185140997
pointer value is 218827015
pointer value is 185140997
pointer value is 854793
pointer value is 33557771
pointer value is 84082958
pointer value is 84082958
pointer value is 17697802
pointer value is 84082958
pointer value is 117768961
pointer value is 201984006
pointer value is 50400780
pointer value is 168297988
pointer value is 854793
pointer value is 151454979
pointer value is 67239949
pointer value is 185140997
pointer value is 185140997
pointer value is 50400780
pointer value is 218827015
pointer value is 100925952
pointer value is 117768961
pointer value is 33557771
pointer value is 235670024
pointer value is 201984006
pointer value is 50400780
pointer value is 151454979
pointer value is 84082958
pointer value is 100925952
pointer value is 117768961
pointer value is 235670024
pointer value is 168297988
pointer value is 201984006
pointer value is 33557771
pointer value is 201984006
pointer value is 50400780
pointer value is 218827015
pointer value is 854793
pointer value is 201984006
pointer value is 50400780
pointer value is 218827015
pointer value is 50400780
pointer value is 185140997
pointer value is 84082958
pointer value is 218827015
pointer value is 67239949
pointer value is 854793
pointer value is 50400780
pointer value is 33557771
pointer value is 151454979
pointer value is 854793
pointer value is 84082958
pointer value is 168297988
pointer value is 50400780
pointer value is 100925952
pointer value is 185140997
pointer value is 168297988
pointer value is 17697802
pointer value is 100925952
pointer value is 854793
pointer value is 151454979
pointer value is 218827015
pointer value is 33557771
pointer value is 151454979
pointer
root@socfpga_cyclone5:~#

Hi, just figured it out. I was declaring my register variable to be printed to be as unsigned integer that is why I was seeing these long weird values onto putty. I had to declare my variable as unsigned character and now you can see below, I am having counter sequence. Now I just want to ask why I am not having perfect result like 0 1 2 3 4 5 6 ….14. is it because that my Avalon bus is operating at 50 MHz but my transceiver is running at pll clock of 100 MHz? Can I do something about it?

fd is ok
virtual base pointer to open device memory file is ok
pointer value is 12
pointer value is 13
pointer value is 13
pointer value is 13
pointer value is 14
pointer value is 9
pointer value is 13
pointer value is 1
pointer value is 13
pointer value is 0
pointer value is 13
pointer value is 14
pointer value is 14
pointer value is 0
pointer value is 10
pointer value is 10
pointer value is 9
pointer value is 10
pointer value is 5
pointer value is 6
pointer value is 14
pointer value is 13
pointer value is 3
pointer value is 13
pointer value is 4
pointer value is 6
pointer value is 6
pointer value is 13
pointer value is 10
pointer value is 11
pointer value is 2
pointer value is 12
pointer value is 13
pointer value is 12
pointer value is 13
pointer value is 8
pointer value is 9
pointer value is 9
pointer value is 4
pointer value is 13
pointer value is 13
pointer value is 7
pointer value is 2
pointer value is 14
pointer value is 14
pointer value is 11
pointer value is 13
pointer value is 7
pointer value is 0
pointer value is 5
pointer value is 1
pointer value is 10
pointer value is 0
pointer value is 7
pointer value is 0
pointer value is 4
pointer value is 10
pointer value is 11
pointer value is 14
pointer value is 10
pointer value is 7
pointer value is 6
pointer value is 10
pointer value is 5
pointer value is 5
pointer value is 7
pointer value is 12
pointer value is 4
pointer value is 2
pointer value is 13
pointer value is 0
pointer value is 2
pointer value is 7
pointer value is 8
pointer value is 7
pointer value is 2
pointer value is 6
pointer value is 4
pointer value is 14
pointer value is 4
pointer value is 13
pointer value is 0
pointer value is 1
pointer value is 11
pointer value is 14
pointer value is 4
pointer value is 13
pointer value is 2
pointer value is 13
pointer value is 11
pointer value is 7
pointer value is 5
pointer value is 4
pointer value is 1
pointer value is 2
pointer value is 9
pointer value is 12
pointer value is 11
pointer value is 13
pointer value is 12
pointer value is 0
pointer value is 12
pointer value is 11
pointer value is 13
pointer value is 6
pointer value is 2
pointer value is 4

@Muhammad_Atif

Great!
Didn’t know your transceiver sets the result in ASCII…

About the inconsistency of data:
At which rate you are increasing the counter?
That will determine how much time you have to read the next data, what i can say from your output is that your counter is increasing to fast that your App can’t read “properly”, maybe you can add a FIFO to your design if you need high speed acquisition that way you are always be reading(in App) the way data is coming in.

If not, you may need to syncronyze the read rate of your app, but you will need to take into count that you’re running over linux and other tasks need processor time, so the process should have a good priority level.

Avalon bus is operating at 50 MHz but my transceiver is running at pll clock of 100 MHz…

It depends, Avalon bus speed has nothing to do with the rate your data is changing, although it could turn in a bottleneck if you data are changing to fast.

1 Like

@Mikernl
Hi, thank you so much for the reply. Can you please also tell me following points.

  1. I didn’t get this point. I mean can you please guide me a little bit what can I do to synchronize the read rate with my app? Do you mean, I have to reduce my counter speed? Or is there something else that you meant? My counter clock is tx_clkout so almost same as transceiver pll clock (100MHz).
  1. Can you please give me an example for this point? So what I understood is that Avalon bus speed has nothing to do with how fast my transceiver is working or how fast is my counter running. is that right?

@Mikernl
hi. hope that you are fine and well.
I just tried to check out how counter speed effects results on putty. so I removed everything from my design and just connected a simple counter to my HPS and trying to print the counting sequence onto the putty. I wrote my own clock divider to convert 50 MHz clock to just 10 Hz clock and this 10 Hz clock is now running the counter. But I am getting all 0 at the putty terminal.

I then tried to run the counter at 50 MHz and I was getting the same inconsistent data like 12,12,6,124,1,2,44,55,…

Any ideas? What clock speed can I give the counter to see the consistent data?