NotMyCupOfTea

Members
  • Content Count

    19
  • Joined

  • Last visited

  • Days Won

    1

NotMyCupOfTea last won the day on August 28

NotMyCupOfTea had the most liked content!

About NotMyCupOfTea

  • Rank
    Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Dear Zygot, Thank you for your answer. I didn't mean to upset you but as I have already tested for endianness and am using verilog, I wonder wheter the procedure you described allows to test something else. On top of that, I have been working on FPGA for only 4 months and am still very unexperienced ==> i.e. I was not able to implement your suggestion and have no one near by who can help me understanding what you wrote. This is why I share the code. Now, the question was what other problem can we think of. Thanks for your help,
  2. Hi Zygot, Thank you for your answer! However, I don't think the problem comes from endianness... As you can notice on the pictures of the previous post, the number of steps M and N are correctly transmitted to the board. Now I mght be wrong but I would expect a endianness problem to affect all the values sent between the PS and PL. Furthermore, I've also tested to compile a project where the PS is included but "not working". meaning that the parameters remained hard coded in the PL. and it also doesn't work. So I would think that the problem doesn't come from the communication PS-PL but from the PL itself... You'll find in the attached files the following codes : - The source codes and constraint file for the project "Galvo_cleaning" - The source codes, constraint files and SDK C code for the project "Galvo_packaging" and a pdf explaining how I package everything (maybe this is the issue...) - An Arduino code that outputs A_clock and ext_B_clk (see source code) Please note that you'll need 2 pmod DA3 and a Zybo Z7020 board to run this code I hope this can help to understand the problem further, Thanks a lot Sharing.zip
  3. True, I'm sorry... The project is meant to control Galvanometric mirrors to swipe a laser for a OCT microscopy system. These mirrors can be oriented in space by applying a voltage to their poles and by this means orient the laser beam where needed to proceed for the imaging. Now, acquiring an image requires to move the laser beam over the surface you want to acquire (for instance following the coordinates (0,0) - (0,1) - (0,2) ... (0,M) - (1,0) - (1,1) ... - (M,N)). The output is then rescaled and sent to a DAC. Please see attached file to see what it looks like (please note that here the green chanel is the x and yellow chanel is y, with M = 5 and N = 3) . Now the user must be able to set some parameters such as the number of steps on the x and y axis (M and N above), the position of the centre, the rotation angle around the centre... and this in real time. (For instance, imaging a living micro-organism can require to shift the centre fairly quickly). This is the reason why the code has been packaged into an IP and connected to a laptop using a serial port and a bare metal application. What happens then is that all the parameters are read correctly (number of steps, sine and cosine of the rotation angle, centre position...) but the result is different (see second caption below where M = 10 and N = 5). There is to notice that the x and y commands are evolving in the wrong direction, that the output voltage range is 10 times smaller and (not in this case but other tests) that the x and y axis are not correctly placed one in respect to the other. I will finish underlining that when the UART communication is not enabled, everything works fine. I have also tried to enable the UART comunication without sending parameters (I still used hard coded parameters) and it didn't work either. I'm starting to think that there is a compilation error when adding the UAART... I hope this helps a little bit more. Thank you for your answer
  4. Dear All, "I'm working with Vivado 2018.3 and a Zybo Z7020 board" I write here because I have a very strange problem in a project that I have been developing in the past months. Namely, I've been writing a verilog code to run on a Z7020 board. This code takes user input as parameters (that are hence hard-coded) and everything works fine with this project (no errors or not understandable warnings...) Now, my job is to make sure that these so-colled parameters can be changed through a serial connection from a laptop. Hence, I've packaged my module in an IP and connected it to the PS, programmed the SDK and here is the problem : Many things work but some don't. At the beginning, I thought that the SDK used a different convention to represent signed integers (two complement, only first bit changed...) and have thereby checked that the parameters sent by the SDK where equal to hard coded values in the PL... and they are! Every single bit.. I'm now out of option to understand my problem... Has anyone had similar issues in the passt? Does anyone have a clue for me? Thank you a lot, P.S. : Please do not hesitate to write a comment if you need any further infos.
  5. Hi everyone, I am currently working with a Zybo Z7010 board on Vivado 2018.3 and am trying to implement a memory access in both reading and writing modes. More precisely, I'd like to enable the user to enter a number of coordinates that define a random waveform (sine table...) and to store it somewhere so that the PL can access it in reading mode and display it through a DAC. Please note that it is essential that the reading process is fast for further applications. Now, have been reading many things but I'm a little confused about the "different types of memories that exist". I'm not sure if I should use the BRAM module, the DDR, SRAM... What are the differences of these components and which one would you suggest to use? Finally, would you have a tutorial that goes through the different steps of the implementation? Thanks a lot, NotMyCupOfTea
  6. Dear all, I'm using Vivado 2018.3 and a Zybo Z7010 board. I have finally finished my project (I actually owe this forum much), and I am now trying to use the board without having to open nor Vivado neither the SDK. Basically, I know that I can program the QSPI flash memory of the board so that the program can run without having to upload it. How this works is still unclear, is switching from JTAG to QSPI enough or should I do something on Vivado? However, I am also using the Zynq processor which runs an application that I start from the SDK. Can I avoid opening the SDK? The better thing would be if I could programm the FPGA through Matlab but I don't know if this is possible. Could you point me to some tutorials or the matlab functions (if they exist...). Thank you very much, NotMyCupOfTea
  7. Dear @jpeyron, Your help has been once again decisive to the success of the project I'm working on. Thank you ! For those who are interested, please find here the files for the blinky project I was able to build. From this point, it is only a matter of minutes to adapt it to your own customized project. Best regards to all, NotMyCupOfTea
  8. Dear @jpeyron, Thank you very much for your answer! I am now one step closer to achieving what I'm up to. I have managed to create my custom IP block which has one parameter (which led to switch on) and one output (the 4-bit signal connected to the leds). Now, I have set the parameter to 2 while building the project and the correct led is turned on. Is there a way to modify this parameter from an SDK application? Thank you, NotMyCupOfTea,
  9. Dear @jpeyron, Thank you for your answer. I already had the Digilent Board files installed but it looks like they are used correctly only if you select the board (and not the part) in the "Creat a Project" wizard... When I did that, everything worked as I wanted, the Hello World project as well. Concerning the "Blinky" project, I don't quite understand... is it enough to have the blinky.v file in the same project directory? I couldn't manage to package it as an IP... By the way, I have been following this tutorial until exercise 5 (where I am stuck because I don't know how bitmasks work...). I will try to do exercise 6 to read and write from memory from PS but I will have to do the same on PL. Thank you for your patience, NotMyCupOfTea
  10. Dear All, I have been working today and unfortunately did not manage to work out your instructions @jpeyron. Here are a few thoughts: - When I want to use the "Hello World" template, it says that I have no UART in my design and that I can't use it. I therefore went back to the design ==> customize IP and add UART1 port in the "MIO Configuration". This seems to solve the matter... - When I manage it through to point 6, running the application give me the following error : AP transaction error DAP status f0000021. My guess lies in a comment line of the Hello World that specifies that ps7 (==> Zynq PS) is not initialized by this particular example... Nevertheless, I have been looking around for another project meanwhile and I can successfully run the "Echo example project" you presented in this thread. There is just one little problem which is that when pressing the "ESC" key, it should print "Successfully..." and it prints "uccesfully...". I have checked the baud rate... Now, I will try to reproduce the architecture to apply it to a simple project (see attached files). I want to turn on one of the four leds of the board according to the parameter called "LED", giving the user the possibility to change this parameter from the serial terminal. I have tried turning the parameter into a reg input and packaging the project into an IP and replacing the GPIO module with it but when I package it only the "clk" appears as input of the module. I have looked around but am currently I little lost on how to proceed... Thank you for your patience and any tips you can give me, NotMyCupOfTea, blinky.zip
  11. Dear All, Thank you for your clear answers. @vicentiu : I think I understood the difference between bare metal and linux enbedded in the PS and as I don't need to do very complex operations in the PS I think bare metal will be enough for this time. (Though, I might change my mind in the future...) @jpeyron : Thank you so much for your detailed guidelines! I will follow those steps during the week-end but I won't be able to test it before Monday as I don't have the board with me. Starting with this simple project seems a good idea, now I have a question about step 4 for the project I described above. If I am not mistaken, the axi-m-gp0-aclk is the port used to connect PS and PL, how will I have to connect it in the future? Thank you very much and have a nice week-end, NotMyCupOfTea
  12. Hi @vicentiu, I don't really know the difference between "Linux" and "Bare metal" and am sorry if I have posted the question in the wrond repository... As I don't know the difference, I can't tell yet which of these options I'd prefer... Feel free however to move the discussion where it is most appropriate (or if I have to do it please let me know). Thank you,
  13. Dear All, I have currently finished a PL program for signal processing and hardware controlling on the Zybo Z7010 board. Now, I want to ensure that some parameters can be easily modified by the user on a computer. Thus, I would like to use the USB -- micro-USB cable to instaure a communication between the user and the board. After some reading, I understand that I have to use the PS if I want to go through the micro-USB UART port (I have not yet used the PS in my project...). Hence, I need two things: - Instantiating the UART interface and writing the C/C++ script to ensure communication between User and PS - Creating a write/read connection between PS and PL to modify the parameters after reception by the PS. How should I proceed? As usual, feel free to ask for any further information. P.S. : Until now, I have used only Verilog and VHDL code to make the whole project run and am very uncomfortable with the "Block design" tool, so please be as specific as possible if block design is required (or faster/simpler...) Thank you very much,
  14. Hi @jpeyron, Thank you for your answer. If I understand the thread you pointed out well, I need to build an external low-pass filter. Is it absolutely necessary ? Isn't there a way to use built-in components to do so ? If not, I will try implementing the filter. Bye,
  15. Dear Jon, Thank you for your answer. I have tried to instantiate de VHDL code from @hamster in my program as follows, after having added a VHDL source from the "add source" menu: pmod_da3 myDAC ( .clk(clk), .CSn(jc[0]), .LDACn(jc[2]), .SCLK(jc[3]), .SDAT(jc[1]), .level(dout) ); Where jc[0] is the correct CS pin, jc[1] data pin, jc[2] LDAC pin and jc[3] clock pin. This seems to work quite well, until I input a signal of 10kHZ. I have the same clock parameters as in @hamster XDC file. I think the problem could come from the ADC but I'm not sure how to fix it. Usually, as the XADC has a 1MSB it should be able to cope with signals until 500kHz if I am not mistaken. Thank you for your help, test.vhdl xadc_digilent_forum_2.v XADC_to_DAC.xdc.xdc