Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    splinedrive
    @splinedrive
    ~/hacking/ulx3s/fpga_pio $ git pull
    remote: Enumerating objects: 55, done.
    remote: Counting objects: 100% (55/55), done.
    remote: Compressing objects: 100% (26/26), done.
    remote: Total 109 (delta 36), reused 44 (delta 27), pack-reused 54
    Receiving objects: 100% (109/109), 29.51 KiB | 332.00 KiB/s, done.
    Resolving deltas: 100% (64/64), completed with 11 local objects.
    From github.com:lawrie/fpga_pio
       fcd4f20..6648b49  main       -> origin/main
    Updating fcd4f20..6648b49
    Fast-forward
     README.md                   | 104 ++++++++-
     asm/copybit.asm             |   4 +
     asm/pwm.asm                 |   1 -
     blackicemx/Makefile         |   2 +-
     blackicemx/pio.pcf          |   2 +
     sim/copybit.mem             |   2 +
     sim/copybit.v               | 129 ++++++++++
    Lawrie Griffiths
    @lawrie
    The PIO stuff is strange, but interesting. I wonder if any other microcontrollers will copy it.
    My attempt to implement it is far from complete.
    splinedrive
    @splinedrive
    I have seen something similiar in my job on a TI-VoIP-SOC.
    emard
    @emard
    I'm trying to make PLL to sync DDS with phase accumulator to 1PPS signal from GPS or similar for long term stability. I have tried https://github.com/MorrisMA/1PPS-DPLL but it doesn't work on ECP5. Anyone to recommend something not too big and that works
    emard
    @emard
    PLL here is custom LUT-generated, not real analog PLL
    emard
    @emard
    https://johnwickerson.github.io/papers/verismith_fpga20.pdf this is interesting paper about a tool that tests yosys, vivado and quartus against correct verilog and makes them expose bugs. According to their tests quartus is best performer
    gojimmypi
    @gojimmypi
    sorry I was away from gitter! I see I missed some @'s a some time ago.
    Ben Scherrey
    @scherrey
    Cool case/keyboard/screen to hold & operate your custom designs. Hoping the guy gets funded so I can get mine. https://www.kickstarter.com/projects/jlafleur/ready-model-100-portable-computer-kit?ref=d8pkdb
    splinedrive
    @splinedrive
    Hi, I have done a hdmi reimplementation for ulx3s and blackicemx (ice40) they have the same code base. I hope you like it. I learned from other projects to take the semantic (ulx3s-examples-dvi, fpga4fun, ...) . ulx3s has DDR and SRD support and blackicemx can only DDR. I used the pmod from Luke Wren. It works only with passive resistors and works with long hdmi cables without any problems. https://github.com/splinedrive/my_hdmi_device
    emard
    @emard
    @splinedrive woow, nice work! When you are "hot" after reading standard, is there some chance to add audio over hdmi using data "islands". Here is also some fresh project for this https://github.com/hdl-util/hdmi
    splinedrive
    @splinedrive

    @emard Good point! I have read something about audio in HDMI standard https://ez.analog.com/cfs-file/__key/telligent-evolution-components-attachments/00-317-00-00-00-05-21-37/HDMISpecification13a.pdf . The point is we have a dvi implementation and hdmi needs E-EDDID Data Structure. You can read in 8.3.3

    (DVI/HDMI Device Discrimintion) Any device with an E-EDID that does not contain a CEA Extension or does not contain an HDMI
    VSDB of any valid length shall be treated by the Source as a DVI device (see Appendix C).

    In 8.4.4 (Audio and Video Details) You can read:

    Sink audio characteristics and support are indicated in a series of Short Audio Descriptors located
    in the CEA Extension’s Data Block collection. This data includes a list of audio encodings
    supported by the Sink and parameters associated with each of those encodings, such as number
    of channels supported for that format.

    I have seen audio will transmitted in the blank cycles. The question is do we need the whole E-EDID stuff or not, or can work only with data island guards? I would say hardcoded 2 channels with 12-bit, lpcm is enough. The hdl-util/hdmi works with this data structures? How old gfx cards done audio? Do you have more infos?

    splinedrive
    @splinedrive
    I mean hdl-util works with these data-structures, I can't edit my text :(
    splinedrive
    @splinedrive
    http://www.latticesemi.com/~/media/51A75F0F6DDD4F74BE69738FC8B62F24.ashx
    Unlike the DVI link which only needs one DE signal to delineate the boundary between the Video Period and the
    Control Period, the HDMI link requires at least two indicators to delineate the boundaries between the Video Data
    Period, the Data Island Period and the Control Period.
    This design has defined two indicators, Video Data Enable (VDE) and Audio/auxiliary Data Enable (ADE). The
    VDE is compatible with Data Enable (DE) used for the DVI link. When VDE is high, the HDMI link operates in the
    Video Period; when ADE is high, the HDMI link operates in the Data Island Period; when both VDE and ADE are
    low, the HDMI link operates in the Control Period. The relationship between the VDE/ADE indicators and the HDMI
    operation periods is shown in Figure 5.
    splinedrive
    @splinedrive
    @emard HDMI supports one bit audio samples it is perfect for sigma-delta-modulation.
    splinedrive
    @splinedrive

    @emard first step:

    module terc4_coding(
      input D3,
      input D2,
      input D1,
      input D0,
      output [9:0] q_out
    );
    
    always @(*) begin
      case ({D3, D2, D1, D0})
        4'b0000: q_out[9:0] = 10'b1010_011100;
        4'b0001: q_out[9:0] = 10'b1001_100011;
        4'b0010: q_out[9:0] = 10'b1011_100100;
        4'b0011: q_out[9:0] = 10'b1011_100010;
        4'b0100: q_out[9:0] = 10'b0101_110001;
        4'b0101: q_out[9:0] = 10'b0100_011110;
        4'b0110: q_out[9:0] = 10'b0110_001110;
        4'b0111: q_out[9:0] = 10'b0100_111100;
        4'b1000: q_out[9:0] = 10'b1011_001100;
        4'b1001: q_out[9:0] = 10'b0100_111001;
        4'b1010: q_out[9:0] = 10'b0110_011100;
        4'b1011: q_out[9:0] = 10'b1011_000110;
        4'b1100: q_out[9:0] = 10'b1010_001110;
        4'b1101: q_out[9:0] = 10'b1001_110001;
        4'b1110: q_out[9:0] = 10'b0101_100011;
        4'b1111: q_out[9:0] = 10'b1011_000011;
      endcase
    end
    endmodule

    :)

    emard
    @emard
    Woow great thingy! 1-bit audio is just fine for us. EDID is possible, there is i2c hardware voltage shifter that read and write EDID but I don't think it is needed if we stick to some standard that most monitors should accept. I have long time ago tried some core that works only on altera and generates sound at HDMI monitor. It doesn't read EDID, just sends islands and monitor plays them
    splinedrive
    @splinedrive
    @emard I read after work a little bit hdmi standard and the hdl-util/hdmi. I will try to extend the code with audio. I hope my display can play audio. The good thing I have this hdl-util code. Maybe it is enough only to generate some packets for audio and type whatever. We will see what comes out. But I wanted to extend my framebuffer and to write hyperram controller that was my next projects :)
    emard
    @emard
    A strange effect appears on one of my display that is DVI-only and when audio islands are inserted picture is shrinked and audio islands become visible as some video noise at border. Samsung TV shows video and plays audio normally. If you can hack something quicky, I vote for minimal core maybe 1-bit that just beeps something.
    I guess hyperram controller is more useful project than audio over video :)
    splinedrive
    @splinedrive
    @emard Who knows who designed the decoder in the tv ;) Will we see, I will work on it but I have much work also on my daily job too :)
    But Lockdown in germany makes it possible :)
    emard
    @emard
    Just follow your intuition what you think to do, that should be done first. I also want to try some hacks I never had time for, while the Great Lock still holds :)
    splinedrive
    @splinedrive
    In the moment I extend the tmds encoder with terc4 and the guards. You have determine in the tmds encoder video and audio also you have to generate these guard bands. But I have good sources the standard and the work of hdl-util. But I I want really extend the current hdmi code only with 1 bit audio bitstream for 2 channels and not the crazy things they are written in the standard.
    emard
    @emard
    I always like the reductions of the complex standard to something minimal that works everywhere (almost :)
    splinedrive
    @splinedrive
    :) The people they write these standards have the solution to sell you :)
    emard
    @emard
    First create something simple that works, then hide it in the forest of complexity that will never get used, make 3-4 books about it and make sure it's difficult to understand but easy to pay :)
    splinedrive
    @splinedrive
    I agree!
    It is possible to speedup programming on ulx3s. I have tried fujprog with 3MBaud but I wanted it faster :0
    emard
    @emard
    https://github.com/emard/esp32ecp5 can program over wifi in few seconds, much faster than ft231x JTAG over USB. Supports ftp protocol, pc initiated upload, esp32 initiated, SD card, micropython scripting ...
    splinedrive
    @splinedrive
    ok..but the transfer to esp32 takes time. I tried one time it was too slow for me
    Or something with my network?
    emard
    @emard
    ftp can directly program from net to FPGA, no need to storage bit to esp32 and program in 2nd step
    splinedrive
    @splinedrive
    thanx I will try tommorow
    emard
    @emard
    ftp> put bitstream fpga
    lftp> put bitstream -o /fpga
    splinedrive
    @splinedrive
    ok
    emard
    @emard
    this should transfer bitstream directly over nework to fpga, no intermediate storage. Of course wifi router and esp32 may not sometimes pair well and this can be slower
    lftp 192.168.48.183:/> put ulx3s_85f_adxl355.bit -o /fpga
    289682 bytes transferred in 2 seconds (117.2 KiB/s)
    splinedrive
    @splinedrive
    Any idea:
    ~/hacking/contributions/my_hdmi_device $ lftp 192.168.2.38
    lftp 192.168.2.38:~> put chip_balls.bin -o fpga
    put: chip_balls.bin: Access failed: 550 Fail (fpga)
    lftp 192.168.2.38:/>
    emard
    @emard
    lftp needs "/fpga" instead of "fpga"
    Radu Stoichita
    @radu_stoichita_gitlab
    Hi there! Just got my hands on this board. Wonderful piece of craft you made, thank you!
    emard
    @emard
    Thanx for happy words, if you need some assistence we can help. I'll be away but during the days I'll check messages
    splinedrive
    @splinedrive
    If someone wants to run 24-bit rgb hdmi on icestick h1kx you can try this https://github.com/splinedrive/my_hdmi_device/tree/master/icestick_hack
    Dave Anderson
    @danderson
    Do the ulx3s boards from crowdsupply come with the ESP32 preprogrammed? I finally got an SD card, and it looks like an Espressif device joins my wifi, but nothing is listening on port 80
    Dave Anderson
    @danderson
    well, I have no idea, but I ran through the instructions at https://github.com/emard/esp32ecp5, and it works now :)
    emard
    @emard
    @danderson esp32 on ulx3s from CS should is programmed and work. New version at git has some small bugs fixed. Even if all is empty, or erased board won't brick and everything can be flashed again.
    Dave Anderson
    @danderson
    Yup, I don't know what I was doing wrong, but I reflashed from github and everything works now. Thanks for this great piece of hardware, it's a joy to use!
    splinedrive
    @splinedrive
    Yes! My fav. board configuring fpga over wifi is amazing fast :) Mostley I write verilog without simulation. Try and erorr and my logic analyzer to see the signals. This fast configuration makes the work much more comfortable.
    Rob S
    @rob-ng15
    Hi all. I'm really struggling with the PS2 support. I've tried the Jupiter Ace, but plugging in a PS2 keyboard results in no input! Any advice?
    Lawrie Griffiths
    @lawrie
    This is one of my PS2 Verilog examples. It uses slightly different code to the Jupiter Ace - https://github.com/lawrie/ulx3s_examples/tree/master/ps2