I have Nexys2 Spartan 3E board and I am running Ken Chapman's UART IP core, I need to transmit data to another device at a baude rate of 460800. I was successful in sending data at 115200 and 9600 using 50MHz clock of my board, but when it comes to 460800 I get garbage values. I even tried with 100MHz clock (using DCM) but it did not really work.

Any ideas why I am having these issues?

  • 1
    \$\begingroup\$ If your UART module requires a 16x clock, that would be 7.3728 MHz. The closest you can get using integer division from a 50 MHz clock is 50/7 = 7.1429 MHz, which is an error of a little over 3%, which really should work, as long as the receiving system has less than 1-2% error. Perhaps your driver isn't up to doing that speed. Are you using TTL or RS-232 levels? \$\endgroup\$ – Dave Tweed Apr 3 '15 at 11:28
  • \$\begingroup\$ Can you scope the UART signal? \$\endgroup\$ – Turbo J Apr 3 '15 at 13:19
  • \$\begingroup\$ @DaveTweed I am interfacing my FPGA board directly to a 3.3V PIC controller, PIC24fJ64Gb004. And yes I can scope the UART signal and still not getting anything to the controller, that is the confusing part. \$\endgroup\$ – alexhilton Apr 3 '15 at 17:15
  • \$\begingroup\$ bring the internal 16x baud clock out to an FPGA pin so you can scope it. and double-check your toplevel pin assignments. Tx output of fpga should drive Rx input if PIC. \$\endgroup\$ – MarkU Apr 3 '15 at 20:55
  • \$\begingroup\$ Is your PIC capable of handling such high baudrates? The UART6 can be used with up to 200 MHz [XAP223 from Ken Chapman [original paper, 2008]](xilinx.com/support/documentation/application_notes/xapp223.pdf) \$\endgroup\$ – Paebbels Apr 3 '15 at 21:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.