01:52 | aSobhy | Bertl where you set the Directory in "vivado.tcl" ?
| |
01:53 | Bertl | in the existing sources, the current directory is assumed
| |
01:53 | Bertl | (cd build.vivado && vivado -mode tcl -source ../vivado.tcl)
| |
01:54 | Bertl | will build in build.vivado subdirectory
| |
01:57 | aSobhy | I searched It sets the directory from the where it typed that command but on my side don't
| |
01:58 | aSobhy | It holds at the default path : C:/Users/Abd-ElRhman/AppData/Roaming/Xilinx/
| |
02:00 | aSobhy | I asked to see If their is a way to set the directory by command
| |
02:01 | aSobhy | also "set origin_dir 'path' " didn't work
| |
02:01 | Bertl | try setting 'DIRECTORY'
| |
02:02 | apurvanandan[m] | Bertl how de we remove negative slack in timing ananlysis
| |
02:02 | Bertl | i.e. set_property DIRECTORY [current_project] ...
| |
02:03 | Bertl | apurvanandan[m]: please share the timing path
| |
02:04 | Bertl | negative slack usually arises from either excessive path delay or from clock skew
| |
02:05 | apurvanandan[m] | How can I share it here?
| |
02:06 | Bertl | pastebin?
| |
02:06 | apurvanandan[m] | The trace reports right?
| |
02:07 | Bertl | well, specifically the timing path for one (or more) of the problematic ones (with negative slack)
| |
02:07 | Bertl | you can also commit/upload the project and I'll check for myself
| |
02:08 | apurvanandan[m] | https://pastebin.com/u8Kk8ixH
| |
02:08 | apurvanandan[m] | Ok, doing that
| |
02:08 | Bertl | the paste is rather unreadable btw :)
| |
02:09 | apurvanandan[m] | Yeah, don't know why formatting got lost
| |
02:09 | aSobhy | no It didn't accept it
| |
02:11 | Bertl | what exactly is the problem at the moment?
| |
02:12 | apurvanandan[m] | https://github.com/apurvanandan1997/BER_mesurement_x1
| |
02:12 | apurvanandan[m] | Sorry I am using GUI tools, no makefile rightnow
| |
02:14 | Bertl | so how do I build it?
| |
02:14 | apurvanandan[m] | Please teach me also how to analyze timing issues
| |
02:15 | apurvanandan[m] | Do you have Diamond 3?
| |
02:15 | Bertl | 3.11
| |
02:16 | apurvanandan[m] | Open the ber_measure.ldf in proj folder from open project in Diamond
| |
02:16 | apurvanandan[m] | *Please
| |
02:18 | aSobhy | I found a way :)
| |
02:21 | Bertl | apurvanandan[m]: okay, then?
| |
02:21 | Bertl | aSobhy: excellent! let's hear!
| |
02:22 | apurvanandan[m] | Generate bitsream from process, then please go to timing analysis view from tools menu
| |
02:22 | Bertl | there is no 'Generate bitsream' under 'Process'
| |
02:25 | apurvanandan[m] | Above the console there are three tabs, file list, process, herarchy
| |
02:25 | apurvanandan[m] | It is in process tab
| |
02:29 | Bertl | http://vserver.13thfloor.at/Stuff/GSoC2019/apurva_diamond.jpg
| |
02:30 | apurvanandan[m] | Yes the bitsream file under export files
| |
02:30 | apurvanandan[m] | Please double click on that
| |
02:32 | apurvanandan[m] | After that you want to go to Tools menu above in menu bar, then timing analysis view option
| |
02:34 | Bertl | not sure what it is doing right now, spinning on 'Export Files' atm
| |
02:35 | apurvanandan[m] | Yes, once it finish we can see timing analysis from the tools menu
| |
02:41 | Bertl | so how long is it supposed to work on the Bitstream File?
| |
02:42 | apurvanandan[m] | few seconds
| |
02:42 | apurvanandan[m] | :/
| |
02:43 | Bertl | http://vserver.13thfloor.at/Stuff/GSoC2019/apurva_diamond2.jpg
| |
02:43 | Bertl | it is in this state for quite some time now
| |
02:44 | Bertl | (no output, nothing, just spinning)
| |
02:44 | apurvanandan[m] | Nevermind, stop that process. Place and route is required only for timing option there
| |
02:45 | apurvanandan[m] | Rightclick and stop
| |
02:45 | Bertl | done
| |
02:45 | apurvanandan[m] | :)
| |
02:46 | Bertl | when I select Process -> Timing view
| |
02:46 | Bertl | diamond segfaults
| |
02:47 | apurvanandan[m] | Tools -> Timing Analysis View right?
| |
02:47 | Bertl | yep, sorry, Tools
| |
02:47 | Bertl | Use of deprecated SAXv1 function comment
| |
02:47 | Bertl | Segmentation fault (core dumped)
| |
02:47 | apurvanandan[m] | :/ Okay please wait I am sending the report by some means
| |
02:48 | Bertl | how about you switch the project to commandline build
| |
02:48 | Bertl | that works just fine and doesn't require messing with the GUI
| |
02:50 | apurvanandan[m] | I know how much useful it is, I am switching definitely once things work
| |
02:53 | apurvanandan[m] | https://pastebin.com/hMYQdaS2
| |
02:54 | apurvanandan[m] | https://pastebin.com/q2GiTUeC
| |
02:54 | apurvanandan[m] | Now they are formatted well
| |
03:04 | Bertl | why is the FIFO running at 300MHz?
| |
03:06 | Bertl | cdc_fifo_inst
| |
03:09 | Bertl | and regarding 'how much useful it is, I am switching definitely once things work' this is definitely the wrong approach, because you are now wasting (your and my) time with 'GUI problems' which would be better spent on 'actual problems'
| |
03:15 | aSobhy | finished it \o/
| |
03:16 | Bertl | top.tcl?
| |
03:19 | aSobhy | yes but I'll push the latest update now
| |
03:19 | aSobhy | just 1 min
| |
03:26 | aSobhy | https://github.com/aabdosobhy/Bi-Direction-packet-protocol/tree/master/Training/ZYNQ
| |
03:27 | aSobhy | Its the same link
| |
03:27 | Bertl | vivado -mode tcl -source top.tcl ?
| |
03:28 | aSobhy | yes and you didn't need to do "cd build.vivado "
| |
03:28 | Bertl | yes, I saw that
| |
03:29 | aSobhy | okay
| |
03:30 | aSobhy | Its giving an error didn't appear before sorry sorry
| |
03:31 | Bertl | yeah, DRC INBB-3
| |
03:32 | aSobhy | I didn't do that before
| |
03:33 | aSobhy | It*
| |
03:38 | Bertl | further hints are in the critical warnings ...
| |
03:38 | Bertl | [Project 1-486] Could not resolve non-primitive black box cell 'sh_2b_rg' instantiated as 'train_inst/word_8b_Reg'
| |
03:44 | aSobhy | yeah I found them
| |
03:45 | aSobhy | and running again to check it solved or not
| |
03:45 | aSobhy | I'm very sorry
| |
03:48 | aSobhy | Bertl how many cores I can specify to be run on any machine
| |
03:49 | aSobhy | don't tell me one please xD its very slow
| |
03:49 | Bertl | doesn't matter much, Vivado is terribly bad on using multiple cores
| |
03:49 | Bertl | but you can specify up to 10 for me
| |
03:51 | aSobhy | okay that's grade I'll make them 4
| |
03:51 | Bertl | if you do not specify it, it should use all available cores
| |
03:52 | Bertl | if you specify it as '4' it will be limited to that
| |
03:54 | aSobhy | no when I reduce it to 1 it didn't add "-jobs 4" -to the max- I think
| |
03:57 | aSobhy | the error is fixed
| |
04:01 | Bertl | mkdir: cannot create directory ‘build.vivado’: File exists :)
| |
04:01 | aSobhy | ah I delete that file before runing
| |
04:02 | aSobhy | folder*
| |
04:02 | Bertl | also you want to make sure that the case is correct
| |
04:03 | Bertl | Shift_2b_reg.vhd' does not exist
| |
04:03 | Bertl | shift_2b_reg.vhd does
| |
04:04 | aSobhy | no its exist !
| |
04:04 | Bertl | note the lower case 's' versus the upper case 'S'
| |
04:04 | Bertl | on most filesystems those are different
| |
04:06 | aSobhy | yeah I missed that
| |
04:06 | aSobhy | I changed it :)
| |
04:11 | Bertl | so for the set_property
| |
04:11 | aSobhy | yes
| |
04:11 | Bertl | set_property PACKAGE_PIN T9 [get_ports "lvds_p"]
| |
04:11 | Bertl | should work
| |
04:13 | Bertl | actually
| |
04:13 | Bertl | set_property PACKAGE_PIN T9 [get_ports {lvds_p}]
| |
04:13 | Bertl | is better
| |
04:13 | aSobhy | I tried that first It didn't change
| |
04:14 | aSobhy | set_property PACKAGE_PIN T9 [get_ports "lvds_p"] is running now
| |
04:15 | Bertl | it works on the tcl console (with your project) so it should be fine
| |
04:20 | aSobhy | maybe I missed something but finally \o/
| |
04:22 | Bertl | congratulations on your first Zynq bitstream! :)
| |
04:22 | Bertl | (I wish I would have said that six weeks ago :/)
| |
04:23 | aSobhy | I can't celebrate now Its still running
| |
04:26 | aSobhy | I need a time machine now :)
| |
04:26 | aSobhy | thanks Bertl for your help :) :)
| |
04:26 | Bertl | np
| |
04:27 | Bertl | you might also consider switching from the project based workflow to the non-project based as it is a lot faster
| |
04:40 | aSobhy | but It gives a warning that their is no T9 pin name
| |
04:40 | aSobhy | what part we are using
| |
04:40 | aSobhy | I used Zynq-7000
| |
04:41 | aSobhy | xc7z020clg484-1
| |
04:41 | aSobhy | is that right?
| |
04:41 | Bertl | xc7z020clg400-1
| |
04:42 | Bertl | it is defined in the BOARD_PART
| |
04:42 | Bertl | em.avnet.com:microzed_7020:part0:1.0
| |
04:42 | aSobhy | ok
| |
04:42 | Bertl | (or 1.1 if you have a more recent vivado)
| |
04:43 | aSobhy | I'll copy it from the vivado.tcl file its the same
| |
04:50 | aSobhy | the only part I have from em.avnet.com is xc7z020clg484-1
| |
04:52 | Bertl | did you install the MicroZed Board definition files?
| |
04:52 | Bertl | http://zedboard.org/support/documentation/1519
| |
04:52 | aSobhy | actually I didn't remember
| |
04:53 | aSobhy | OK I'll see that link
| |
06:05 | Bertl | off to bed now ... have a good one!
| |
06:05 | Bertl | changed nick to: Bertl_zZ
| |
06:09 | aSobhy | Good night :)
| |
06:13 | BAndiT1983|away | changed nick to: BAndiT1983
| |
10:03 | Y_|G | joined the channel | |
11:09 | illwieckz__ | joined the channel | |
11:12 | illwieckz_ | left the channel | |
12:21 | BAndiT1983 | changed nick to: BAndiT1983|away
| |
13:07 | Bertl_zZ | changed nick to: Bertl
| |
13:07 | Bertl | morning folks!
| |
13:08 | apurvanandan[m] | Good morning Bertl
| |
13:08 | apurvanandan[m] | I was waiting for you
| |
13:09 | apurvanandan[m] | Sorry, I fell asleep today in morning
| |
13:09 | Bertl | what's up?
| |
13:10 | apurvanandan[m] | Is there a way we can skip a clock cycle every 5 cycles, like 10101010001010101000...
| |
13:11 | apurvanandan[m] | Without using falling_edge trigger
| |
13:11 | Bertl | a gated clock can do that
| |
13:12 | apurvanandan[m] | Basically I want to leave one repeated 10b data due to 4:5 gearing in DDRX4 without using falling edges
| |
13:12 | Bertl | not sure what you mean
| |
13:13 | apurvanandan[m] | You told that falling edge creates timing issues, so I am eliminating those
| |
13:14 | apurvanandan[m] | So when you group 5 8bits words into 4 10bits, one clock cycle is only used for sampling new data right?
| |
13:14 | apurvanandan[m] | Sampling the first 8 bits every cycle
| |
13:14 | Bertl | falling edges do not create more timing issues than rising edges but mixing them or alternating them will
| |
13:15 | apurvanandan[m] | Yeah, all my design has rising edge except one process that eliminates a clock cycle
| |
13:15 | Bertl | why would you modify the clock?
| |
13:16 | apurvanandan[m] | So in DDR x4 when first 8 bits are received, you don't have a 10b word, so you wait for next clock cyles and then send 10b from 16b received
| |
13:17 | apurvanandan[m] | So on reception of first 8b , not data output clock is given
| |
13:18 | apurvanandan[m] | You told me this remember?
| |
13:18 | Bertl | yes, but I didn't tell you to mess with the clock
| |
13:18 | Bertl | it's just that one of the five clock cycles does not produce new data
| |
13:19 | Bertl | what do you do with the data?
| |
13:19 | Bertl | i.e. what is the next step after the 5x8:4x10 gearing?
| |
13:20 | apurvanandan[m] | Send it to decoder with same clock and then to fifo with same clock
| |
13:20 | Bertl | so where is the problem?
| |
13:21 | Bertl | you do not need to use every decoded value
| |
13:21 | apurvanandan[m] | If I use the same clock, it will take it as new data ?
| |
13:21 | Bertl | there are 4 clock cycles where the 10bit values are correct and one where you need to wait
| |
13:22 | apurvanandan[m] | Okay, my approach was wrong here
| |
13:22 | Bertl | the decoder has to run at the speed of the clock anyway, so it will produce 5 'decoded' values
| |
13:22 | Bertl | one of them will be incorrect, because it is from the wait cycle
| |
13:23 | Bertl | at the FIFO, you only add the 4 correct ones
| |
13:23 | Bertl | and simply ignore the fifth cycle
| |
13:23 | Bertl | this only requires a simple counter which you already have to adjust the mux to combine the 8bit words
| |
13:25 | apurvanandan[m] | Okay, so I can do that by making write enable '0' of the fifo at that cycle?
| |
13:25 | Bertl | precisely
| |
13:25 | apurvanandan[m] | Ok nice, my problem solved :)
| |
13:26 | Bertl | you can also avoid that the decoder gets a wrong word
| |
13:26 | apurvanandan[m] | By introducing an enable signal in decoder?
| |
13:27 | Bertl | yep
| |
13:27 | Bertl | if the decoder has a state
| |
13:27 | Bertl | i.e. if it tracks what was decoded, then you want to do that
| |
13:28 | Bertl | if it doesn't care and just decodes the word, then you can either send the old (valid) word or a bad word depending how your logic around error and comma detection works
| |
13:28 | apurvanandan[m] | Decoder samples data at both rising and falling edge
| |
13:29 | Bertl | that sounds wrong
| |
13:29 | apurvanandan[m] | It is the one taken from FreeCores.org
| |
13:30 | apurvanandan[m] | Sorry opencores.org
| |
13:30 | Bertl | what is the purpose of 'sampling' at both edges when you only provide data at rising edge?
| |
13:32 | apurvanandan[m] | The encoder uses both edges but the decoder uses only negedge
| |
13:32 | apurvanandan[m] | https://github.com/freecores/8b10b_encdec/blob/master/8b10_dec.vhd
| |
13:34 | Bertl | odd choice ... will certainly cause some timing issues
| |
13:34 | apurvanandan[m] | :/
| |
13:34 | apurvanandan[m] | Will try to correct that also
| |
13:36 | apurvanandan[m] | Also one more question
| |
13:37 | apurvanandan[m] | DLLDEL: deser_inst/ddrx1_inst/Inst4_DLLDELC CLKI has no preference. A preference is required that provides the period of the clock to calculate the 90 degree delay.
| |
13:38 | apurvanandan[m] | I get this warning when I don't write FREQUENCY PORT "CLK_LANE" 300.000000 MHz ; in constraints file
| |
13:38 | apurvanandan[m] | But when I do I get lot of negative slack
| |
13:39 | Bertl | this is like saying: it's all fine when I do not do timing checks, but it suddenly gives timing errors when I check :)
| |
13:39 | apurvanandan[m] | oh, sorry :/
| |
13:39 | Bertl | if you do not specify the clock/phase information to the tools, they will not report problems
| |
13:40 | apurvanandan[m] | :O
| |
13:40 | Bertl | you need to have a number of timing constraints, not just for clocks, also for input/output delays for static timing analysis to make any sense
| |
13:40 | apurvanandan[m] | So is mentioning FREQUENCY PORT "CLK_LANE" 300.000000 MHz ; correct?
| |
13:41 | Bertl | if your CLK_LANE has 300MHz then yes
| |
13:42 | apurvanandan[m] | Where can I learn how to write constraints?
| |
13:43 | Bertl | http://www.latticesemi.com/~/media/LatticeSemi/Documents/UserManuals/RZ/Timing_Closure_Document.pdf?document_id=45588
| |
13:44 | apurvanandan[m] | Thanks Bertl, that was a great help
| |
13:44 | Bertl | you're welcome!
| |
14:25 | Bertl | off for now .. bbl
| |
14:25 | Bertl | changed nick to: Bertl_oO
| |
14:26 | danieel | apurvanandan[m]: maybe you are looking for a "data valid" signal, which will take shape of 01111 over the time, that creates 4 used states in 5 periods of higher freq clock
| |
14:27 | danieel | having just 8 bit in the 10bit bus is the 0, and after that, you have 4 periods of full 10bits (and extra register prepares the remainder to be used with the newly coming 8bits)
| |
14:43 | apurvanandan[m] | Exactly danieel , thanks
| |
15:59 | Fares | joined the channel | |
16:24 | Umori | left the channel | |
16:28 | Umori | joined the channel | |
16:57 | illwieckz__ | changed nick to: illwieckz
| |
17:14 | apurvanandan[m] | Bertl, DDR x4 gearing also worked
| |
17:14 | apurvanandan[m] | Now I am able to receive counter correctly
| |
17:15 | apurvanandan[m] | There could be two reasons it wasn't working, one can be using gated clock other can be using 40 bits reg and read and writing at same time
| |
17:16 | apurvanandan[m] | for 4 to 5 gearing
| |
17:17 | apurvanandan[m] | I am now just using a 10 bit reg and rearranging the 8 bits on the spot to form the 10 bit word
| |
17:17 | apurvanandan[m] | Now I am going to overclock and lets see what happens
| |
17:20 | apurvanandan[m] | Also both word alignment methods ie the internal one in IDDRX4B and one made by me both are working :)
| |
17:26 | BAndiT1983|away | changed nick to: BAndiT1983
| |
17:36 | Bertl_oO | sounds good
| |
18:38 | BAndiT1983 | changed nick to: BAndiT1983|away
| |
18:39 | BAndiT1983|away | changed nick to: BAndiT1983
| |
19:41 | aSobhy | Bertl how do I reset the ZYNQ?
| |
19:42 | aSobhy | and for the reset I chosed the signal called "pB22B_W" that conneted to the PIC16
| |
19:43 | aSobhy | Is that fine ?
| |
19:47 | aSobhy | **and for the RFW reset**
| |
20:07 | apurvanandan[m] | Bertl, The DDRX4 is also working only till 300 MHz, at 375MHz there are lot of bit errors
| |
20:07 | apurvanandan[m] | Unmet timing constraints should be the issue right?
| |
20:12 | davidak | joined the channel | |
20:26 | BAndiT1983 | changed nick to: BAndiT1983|away
| |
20:44 | davidak | left the channel | |
20:57 | BAndiT1983|away | changed nick to: BAndiT1983
| |
21:03 | Bertl_oO | aSobhy: you probably do not want to 'reset' the Zynq
| |
21:03 | Bertl_oO | because that will reboot the Beta
| |
21:04 | Bertl_oO | apurvanandan[m]: very likely, you need to make sure your design passes all timing checks with proper constraints
| |
21:10 | aSobhy | ok I mean to reset my modules
| |
21:11 | Bertl_oO | you can do that in many ways, for example via one of the EIOs
| |
21:13 | aSobhy | like what?
| |
21:13 | Bertl_oO | you mean, what other ways except for an EIO?
| |
21:14 | Bertl_oO | AXI Bus (register mapping), JTAG Bus, via the fclk reset interface ...
| |
21:16 | aSobhy | no I mean the EIOs, how can I do that
| |
21:17 | Bertl_oO | you simply use them, they are a direct connection between fabric and arm cores
| |
21:17 | Bertl_oO | Linux supports them as GPIO interface
| |
21:18 | Bertl_oO | (but you can also access the registers directly)
| |
21:18 | Bertl_oO | EMIO* on the fabric side (part of the PS)
| |
21:24 | apurvanandan[m] | Bertl, Most of the timing errors are in the soft ip RX_SYNC
| |
21:24 | apurvanandan[m] | I mean all the errors
| |
21:25 | apurvanandan[m] | As it was mentioned that it can be given any slow clock for reset sync, I divided the fast edge clock and gave it
| |
21:26 | Bertl_oO | well, fix it
| |
21:27 | aSobhy | Is that what we are talking about ?
| |
21:27 | aSobhy | MIO
| |
21:27 | aSobhy | Eight PS MIOs (0, 9-15) are shared between the Pmod connector on-board the MicroZed and
| |
21:27 | aSobhy | the JX2 MicroHeader. When plugged into a Carrier, it is intended that the PS MIO Pmod on the
| |
21:27 | aSobhy | MicroZed would not be used.
| |
21:28 | Bertl_oO | the MIOs are GPIOs too, but they are only connected to the PS side and are used for PS peripherials
| |
21:28 | Bertl_oO | what you want to use are the EMIOs which are connected to the fabric
| |
21:29 | Bertl_oO | they do not have a physical connection outside the ZYNQ
| |
21:31 | apurvanandan[m] | Bertl, all timing errors solved
| |
21:31 | Bertl_oO | good, what was the issue?
| |
21:31 | Bertl_oO | (or the solution :)
| |
21:31 | apurvanandan[m] | I used FT601 100MHz clock for reset syncronisation of DDR x4
| |
21:32 | Bertl_oO | that's the solution?
| |
21:32 | apurvanandan[m] | Earlier I had used the DDR input clock made it slow by counter
| |
21:32 | apurvanandan[m] | Now I am using FT601 clock
| |
21:33 | Bertl_oO | I'm pretty sure you just 'disabled' the timing checks
| |
21:33 | apurvanandan[m] | Yes that is the solution
| |
21:33 | Bertl_oO | double check that cross clock domain timing is checked
| |
21:34 | Bertl_oO | because you probably just made things worse :)
| |
21:34 | apurvanandan[m] | Do you want to have a look over timing report?
| |
21:34 | Bertl_oO | yes, especially the part related to the reset
| |
21:34 | apurvanandan[m] | I also know this at the back of mind :/
| |
21:35 | apurvanandan[m] | ahh, It isn't showing that rx part now
| |
21:50 | illwieckz_ | joined the channel | |
21:53 | apurvanandan[m] | Yes, Bertl I instantiated internal oscillator and now it is showing reset sync signals and they have timing closure correct, no negative slacks
| |
21:53 | apurvanandan[m] | Does it means the problem is fixed?
| |
21:53 | illwieckz | left the channel | |
21:54 | aSobhy | sorry Bertl I'm searching to understand more
| |
21:57 | Bertl_oO | http://vserver.13thfloor.at/Stuff/AXIOM/BETA/cmv_hdmi3/top.vhd
| |
21:57 | apurvanandan[m] | https://pastebin.com/tcqeWUye
| |
21:57 | Bertl_oO | search for emio there, you'll find the ps7 connections
| |
21:58 | aSobhy | OK that's great :)
| |
21:59 | apurvanandan[m] | https://pastebin.com/Lb9qfQ93
| |
21:59 | apurvanandan[m] | Here are the timing report for rx_sync reset sync module
| |
22:00 | Bertl_oO | Constraints cover 3152 paths, 7 nets, and 2140 connections (96.22% coverage)
| |
22:01 | Bertl_oO | what about the missing 3.88% ?
| |
22:02 | apurvanandan[m] | :o
| |
22:02 | Bertl_oO | (roughly about 120 pathes seems to have no constraints)
| |
22:03 | Bertl_oO | might be worth checking what those are
| |
22:05 | apurvanandan[m] | Trying that now, never did anything like this before :)
| |
22:07 | apurvanandan[m] | Ok found, It is a normal signal whose rising edge syncs the prngs and it happens only once
| |
22:08 | apurvanandan[m] | So it is routed using generic clock resource and can suffer from delays
| |
22:08 | Bertl_oO | okay, you might want to add an input constraint for that
| |
22:09 | Bertl_oO | or put it through a synchronizer
| |
22:10 | apurvanandan[m] | Okay
| |
22:10 | Bertl_oO | so just to recap, you now have DDR x1 and x4 running on virtex-5 to machxo2
| |
22:11 | apurvanandan[m] | yupp
| |
22:11 | Bertl_oO | and you get similar issues at about the same clock rate
| |
22:11 | apurvanandan[m] | Both at 300 MHz
| |
22:11 | apurvanandan[m] | not working at 375 or 400 MHz
| |
22:11 | Bertl_oO | and what is the datarate?
| |
22:11 | apurvanandan[m] | Yes similar issues
| |
22:11 | Bertl_oO | because 300 Mhz x1 means 600Mbit
| |
22:12 | Bertl_oO | but 300MHz x4 would be way above that :)
| |
22:12 | apurvanandan[m] | Yes 8/10 of that
| |
22:12 | apurvanandan[m] | means 480 Mbit
| |
22:12 | Bertl_oO | so the slow clock on x4 is actually 75MHz
| |
22:13 | apurvanandan[m] | Yes
| |
22:13 | Bertl_oO | okay
| |
22:13 | apurvanandan[m] | But in x4 the bandwitdh is 600 MBits only
| |
22:13 | Bertl_oO | so let's assume this is a problem of the connection
| |
22:13 | Bertl_oO | and let's try the same on the Beta
| |
22:14 | apurvanandan[m] | Nice idea
| |
22:14 | apurvanandan[m] | Is the usb module plugged there?
| |
22:14 | Bertl_oO | nobody has been at the hub, but as I said, I have one here
| |
22:14 | apurvanandan[m] | I will need to install D3XX on ZBox
| |
22:15 | Bertl_oO | another option would be to use the Main Board MachXO2
| |
22:15 | Bertl_oO | which is probably simpler to monitor (via the PIC)
| |
22:15 | apurvanandan[m] | I don't have much idea how PIC works
| |
22:16 | Bertl_oO | doesn't matter much, you can program the MachXO2 via the PIC
| |
22:16 | aSobhy | I want attend that process
| |
22:16 | apurvanandan[m] | XD
| |
22:16 | Bertl_oO | and you have two LVDS pairs on the RFE
| |
22:16 | Bertl_oO | so you can use one for clock and one for data for a test
| |
22:17 | Bertl_oO | aSobhy: yeah, you should have done this in the first two weeks ...
| |
22:17 | apurvanandan[m] | But how will I get FT601 data?
| |
22:17 | Bertl_oO | not at all
| |
22:18 | Bertl_oO | the simplest way to get the counter values (and that is basically all you want to know for BER) is via JTAG
| |
22:18 | apurvanandan[m] | I would prefer the USB module Bertl please
| |
22:19 | apurvanandan[m] | I can work with multiple channels till then
| |
22:19 | Bertl_oO | aSobhy: so it seems you still have some time to get BER running :)
| |
22:21 | apurvanandan[m] | Bertl, why is baudrate 600MBit in both cases?
| |
22:21 | Bertl_oO | hmm?
| |
22:21 | apurvanandan[m] | Is x1 and x4 just about bit grouping for output word
| |
22:22 | apurvanandan[m] | Both are just DDR
| |
22:22 | aSobhy | :/
| |
22:26 | apurvanandan[m] | One genuine question, DDRX4 offers data width parameters also, ie I can have 5 LVDS lanes make it [5:0] data bus input. Other thing that I can do is instantiate 5 DDR x4 modules and join 5 FIFOs and then to FTDI
| |
22:27 | apurvanandan[m] | Which method seems better to you?
| |
22:28 | Bertl_oO | the difference between x1, x2 and x4 DDR (and also the 7:1 gearing) is that you get a lower clock rate with a wider bus
| |
22:29 | Bertl_oO | i.e. x1 gives you halve of the DDR rate which is equal to your high speed clock
| |
22:29 | Bertl_oO | x2 gives you a quarter (i.e. half the high speed clock)
| |
22:29 | Bertl_oO | and x4 gives you one eight (i.e. a quarter of the high speed clock)
| |
22:33 | apurvanandan[m] | Thanks, the small doubt due to naming got cleared
| |
22:34 | apurvanandan[m] | And what should I prefer one single DDRx4 for all five lanes or five different DDRx4 instantiated one each for each lane
| |
22:35 | illwieckz_ | changed nick to: illwieckz
| |
22:35 | Bertl_oO | ideally you get rid of the IPexpress wrappers and use the ODDRX4
| |
22:36 | Bertl_oO | s/ODDR/IDDR/
| |
22:36 | apurvanandan[m] | There isn't any part of IPexpress left, its just module instantiation
| |
22:37 | apurvanandan[m] | But IDDR can take data as busses
| |
22:37 | Bertl_oO | so how would you do five lanes with one IDDR4?
| |
22:38 | apurvanandan[m] | Ok, sorry my bad
| |
22:38 | apurvanandan[m] | I got my answer
| |
22:39 | Bertl_oO | the 'bus' feature is something IPexpress adds to the wrapper
| |
22:39 | Bertl_oO | anyway, you might want to check what lanes can support x4
| |
22:39 | apurvanandan[m] | Yeah I realized that just now
| |
22:39 | Bertl_oO | because IIRC, it's not available on all pins
| |
22:40 | Bertl_oO | so you might need to use x2 or x1 after all and do the gearing yourself
| |
22:40 | apurvanandan[m] | The ones you joint to LVDS must be having that no?
| |
22:40 | apurvanandan[m] | *joined
| |
22:52 | apurvanandan[m] | Okay all the lanes have it mp as per schematics
| |
22:55 | Bertl_oO | the IDDRX4B primitive can only be used on A/B pairs of the I/O cells at the bottom side of the device
| |
22:55 | apurvanandan[m] | Yupp
| |
22:55 | Bertl_oO | now I knew that it has to be the bottom side, so that is covered
| |
22:55 | apurvanandan[m] | Yes
| |
22:57 | Fares | Hi, as update, I pushed a draft report please check it and advise me what other thing I need to add to the report. And also I run the random test on the FPGA for 4 days and tested more that 23k RAW12 frames with all validated successfully.
| |
22:57 | Bertl_oO | but LVDS_3 is on PB11C/D
| |
22:57 | Bertl_oO | Fares: url?
| |
22:58 | Bertl_oO | apurvanandan[m]: and LVDS_0 is on PB18C/D
| |
22:59 | Bertl_oO | we might be able to move LVDS_3 to PB11A/B in a future revision, but that is not an option for LVDS_0
| |
22:59 | apurvanandan[m] | So should I go back to DDR x1?
| |
23:00 | Bertl_oO | also I didn't check the pinout differences between MachXO2 1200 and 2000
| |
23:00 | Bertl_oO | it might be a non-issue on the 2000
| |
23:02 | Bertl_oO | aSobhy: what are you currently working on, maybe I can help you a little
| |
23:03 | aSobhy | I switched to RFE to overcome the rest problem
| |
23:03 | Bertl_oO | s/rest/reset/?
| |
23:04 | aSobhy | I will use jx1_SE_0 to be the reset for both (ZYNQ, MachXO2)
| |
23:05 | aSobhy | and one lvds is clock and the other is the data
| |
23:05 | aSobhy | is that right ?
| |
23:05 | aSobhy | reset problem*
| |
23:05 | Bertl_oO | should work, but it would probably be better the other way round in the future
| |
23:06 | BAndiT1983 | changed nick to: BAndiT1983|away
| |
23:06 | Bertl_oO | i.e. use the 'clock pin' for a common clock
| |
23:07 | Bertl_oO | also regarding reset, a simple but effective way to generate a reset is to have a special line state for this
| |
23:07 | Fares | sorry for the delay, it is currently on github https://github.com/FaresMehanna/JPEG-1992-lossless-encoder-core/blob/master/Report.pdf
| |
23:07 | Bertl_oO | aSobhy: e.g. if you are sending PRNG data, you have a forbidden state (all '0' or all '1')
| |
23:08 | Bertl_oO | so assuming you are sending 8bit data, you will never enounter 16 zeros or 16 ones in a row (depending on the LFSR type)
| |
23:10 | Bertl_oO | (let's assume zeros for now) which means that you just need to count 16 clock cycles while the signal is '0' and then you can assume a reset
| |
23:10 | Bertl_oO | more importantly, on the first non zero, you can resume operation
| |
23:11 | Bertl_oO | but as I said, it's fine to use the shared clock for a test
| |
23:13 | aSobhy | that's another way to reset the receiver
| |
23:13 | aSobhy | but in my case now the ZYNQ is the sender
| |
23:14 | Bertl_oO | does that make any difference for the reset?
| |
23:17 | Bertl_oO | Fares: what's the status of the integration with the Beta?
| |
23:17 | aSobhy | nope
| |
23:20 | Fares | well, I have not work on integrating it into beta, but the core has two axi stream interfaces which will make it quite easy to integrate
| |
23:20 | Fares | when I looked into how hdmi is working, it was reader -> fifo -> hdmi_logic
| |
23:21 | Fares | the LJ92 will be quite similar, but should I integrate it with the current beta VHDL files?
| |
23:22 | Bertl_oO | it would be great to try an integration with the existing beta firmware, for example just use one HDMI output as data sink for the encoded image
| |
23:22 | apurvanandan[m] | Bertl, do you have schematics of machXO2 2000HC
| |
23:23 | Bertl_oO | once we get the USB 3 plugin working, it should then be easy to switch from HDMI to USB and have the full LJ92 functionality
| |
23:23 | Bertl_oO | apurvanandan[m]: you probably mean the pinout :)
| |
23:23 | apurvanandan[m] | Yupp sorry
| |
23:24 | Bertl_oO | pinouts can be downloaded from lattice
| |
23:24 | Bertl_oO | https://www.latticesemi.com/view_document?document_id=43047
| |
23:26 | Bertl_oO | ah yes, on 2000HC, all those are A/B
| |
23:26 | apurvanandan[m] | yes I saw :D
| |
23:26 | Bertl_oO | so x4 is no problem there for any of the LVDS pairs
| |
23:26 | apurvanandan[m] | happy
| |
23:27 | Fares | Ok I will do that, replacing hdmi logic with lj92 core logic. I will be using the beta's gateware that is currently hosted in the github, correct?
| |
23:27 | Bertl_oO | apurvanandan[m]: now the other question is the clock input
| |
23:27 | apurvanandan[m] | I didn't get
| |
23:27 | Bertl_oO | Fares: yes, that should be the most recent version
| |
23:27 | apurvanandan[m] | Clock is LVDS too?
| |
23:28 | Bertl_oO | Fares: but please double check that it builds correctly before starting the integration :)
| |
23:28 | Bertl_oO | apurvanandan[m]: well, you want to use one LVDS pair as clock
| |
23:29 | Bertl_oO | you definitely want to use a clock capable input for that :)
| |
23:29 | apurvanandan[m] | Currently I am on clock capable pin mp
| |
23:29 | Bertl_oO | hmm?
| |
23:30 | apurvanandan[m] | ie PB11A/B
| |
23:30 | Fares | can you please explain what exactly the component that "it builds correctly"?
| |
23:30 | apurvanandan[m] | pin 34,35
| |
23:30 | apurvanandan[m] | They are clock capable i think
| |
23:30 | Bertl_oO | ah, yes, the are PCLK*2_0
| |
23:30 | apurvanandan[m] | :)
| |
23:31 | Bertl_oO | and that is actually the only pair we have there
| |
23:31 | apurvanandan[m] | I remember I sorted this thing out initailly
| |
23:32 | Bertl_oO | good, then that's sorted
| |
23:32 | apurvanandan[m] | everything is sorted, now lets do it :)
| |
23:33 | Bertl_oO | go ahead, 3.2Gbit/s today! :)
| |
23:33 | Bertl_oO | I'll test it in the evening :)
| |
23:33 | apurvanandan[m] | Perfect
| |
23:40 | Fares | ?
| |
00:14 | Bertl_oO | what I meant is, just rebuild the entire thing to see that it 'still works'
| |
00:14 | apurvanandan[m] | By the way, DDR x1 is performing better than x4 in terms of BER
| |
00:15 | apurvanandan[m] | DDR x4 has BER of 10^-8
| |
00:15 | Bertl_oO | Fares: if you use a different Vivado version or if you are missing board definition files, etc, it might cause problems with the integration (better to sort them out beforehand)
| |
00:16 | Bertl_oO | apurvanandan[m]: might be related to the actual timing (placement/routing) or to the training
| |
00:16 | apurvanandan[m] | Hmm, I see
| |
00:17 | Bertl_oO | so it would be advised to test a few different implementations (with different optimizations, etc)
| |
00:17 | apurvanandan[m] | Okay
| |
00:17 | apurvanandan[m] | I am cleaning up the code
| |
00:37 | Fares | left the channel | |
00:53 | Fares | joined the channel | |
00:53 | Fares | Ok great, I will do, thank you for your time.
| |
00:53 | Bertl_oO | my pleasure!
|