Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Lawrie Griffiths
    @lawrie
    @sylefeb I am familiar with languages that have different semantics to Verilog. In migen and nmigen you have to be explicit about whether every statement in synchronous or combinatorial (by adding them to the appropriate domain). In SpinalHDL you have to be explicit about which signals are flip-flops (Reg) and it then generates synchronous code for the registers. But Silice has different semantics that doesn't really conform to the combinatorial/synchronous distinction, so I think some of the references to combinatorial logic in your manual are confusing.
    Rob S
    @rob-ng15
    @lawrie @sylefeb The modified ps2.ice that I integrated into PAWS is here: https://github.com/rob-ng15/Silice-Playground/blob/master/PAWS/common/ps2.ice the main change being to remove from main and input the data and clock lines rather than the whole gpio.
    PAWS is now caught up with the Silice WIP branch :)
    Lawrie Griffiths
    @lawrie
    @rob-ng15 Yes, those are sensible changes. My version was just to test if it works. That PS/2 algorithm is from @hoglet67 (David Banks) and his Ice40Beeb and Ice40Atom projects. A version that produces an 11-bit ps2_key value in the Mist/Mister format might also be useful. That has extra bits to say whether an event has occurred, whether it is a press or release and whether it is an extended scan code, so requires processing the F0 and E0 values from the keyboard.
    Rob S
    @rob-ng15
    That's good. I'll put appropriate credits in the file.
    Lawrie Griffiths
    @lawrie
    It gets hard to know how to credit this stuff when it gets modified and rewritten in different languages.
    emard
    @emard
    https://github.com/emard/oberon/blob/master/hdl/PS2.v oberon has also some PS/2 core with only few lines of verilog
    sylefeb
    @sylefeb
    @lawrie thanks for the feedback on the documentation - I'll revise and improve!
    great news for PS/2
    Rob S
    @rob-ng15
    @sylefeb do you have an example of goto in Silice? I may have a use for it... I'll bleach the keyboard if I do! (Sadly, the softfloat c code uses gotos, and it is hard enough converting it as it is, without having to change the control flow logic).
    sylefeb
    @sylefeb
    Rob S
    @rob-ng15
    Cheers, exactly what I am unfortunately looking for!
    Lawrie Griffiths
    @lawrie
    @sylefeb One thing that I notice that you don't have with Silice is reading and writing flash memory. It can be more convenient to load risc-v programs into flash memory rather than having to write raw images to the sd card. Most risc-v implementations include the ability to run code in-place from flash memory (XIP).
    Another feature which would be useful is a read-write spi memory slave that worked with @emard's micropython code for an on-screen display (OSD) and for remote ram access. That can be very convenient for loading programs from a formatted SD card. It is used by many of the retro computer implementations on the Ulx3s.
    emard
    @emard
      assign sd_d  = R_prog_release[C_prog_release_timeout] ? 4'hz : { 3'b101, S_prog_out[0] }; // does NOT work
      assign sd_d  = R_prog_release[C_prog_release_timeout] == 0 ? { 3'b101, S_prog_out[0] } : 4'hz; // works
    I have above strange issue with yosys
    splinedrive
    @splinedrive
    @emard and this?
      assign sd_d  = &R_prog_release[C_prog_release_timeout] ? 4'hz : { 3'b101, S_prog_out[0] };
    Radu Stoichita
    @radu_stoichita_gitlab
    Good evening guys, is there any trick to speed up the yosys/nextpnr synthesis for the SaxonSoc project ? Everytime making a small change it takes a few minutes to complete. Do you iterate often or is there any performance tweak i am missing somewhere. Thanks and have a great day, Radu
    Btw, i have notice the whole process uses only one CPU thread :-(
    splinedrive
    @splinedrive
    @radu_stoichita_gitlab Vivado has the feature synthesized Out-Of-Context (OOC) but it seems yosys hasn't such feature implemented. More infos under https://forums.xilinx.com/t5/Adaptable-Advantage-Blog/High-Impedance-and-Out-of-Context-OOC-Synthesis/ba-p/664110
    Radu Stoichita
    @radu_stoichita_gitlab
    @splinedrive thanks for your feedback, i am experimenting with Lattice and ULX3S therefore i think Vivado is not compatible with Lattice is it?
    splinedrive
    @splinedrive
    You have to check diamond lattice has something similar - it is free. I have no idea, I have only a little bit experience with yosys.http://www.latticesemi.com/en/Products/FPGAandCPLD/ECP5
    emard
    @emard
    After changing other unrelated lines this yosys bug disappears and now works what before didnt work
    Radu Stoichita
    @radu_stoichita_gitlab
    @splinedrive i come from Diamond and i used it for a few days but it really lacks ooen source tooling for building SOCs. Their IP cores and LatticeMico SOC doesn't fit with the board
    splinedrive
    @splinedrive
    Which ulx3s you have?
    Radu Stoichita
    @radu_stoichita_gitlab
    Euh... The 12F version from Mouser
    I wanted the 85F but made a mistake when ordering
    Anyway I love thie board
    With all the colourful LEDs it's so cute
    Just expected a little more RAM onboard like 128MB
    But for my lack of skills it is already a masterpiece
    emard
    @emard
    For practically all projects 12F is enough and it even accepts slightly faster clocks than 85F because of less routing, also projects compiles faster for 12F than 85F
    RAM had to be 32MB for cost about 3$. There's pin compatible 64MB but for around 12$
    sylefeb
    @sylefeb
    @lawrie agreed on spi-flash ; I have a bit banging version to boot my risc-v cores (https://github.com/sylefeb/Silice/blob/wip/projects/fire-v/smoke/mylibc/spiflash.c) and it is very convenient indeed. Doing a hardware version is on my TODO list! (also would like to investigate QSPI ...). Was not aware of @emard loader - sounds great - any recommended doc/example?
    Radu Stoichita
    @radu_stoichita_gitlab
    @emard sure thanks for the tip
    splinedrive
    @splinedrive
    You can buy hyperram pmod https://1bitsquared.com/products/pmod-hyperram to extend your memory.
    Lawrie Griffiths
    @lawrie
    @sylefeb I am not sure that between us, @emard and I, have documented the OSD and rom loader very well. There are lots of versions of the code in different projects. This is the spi slave from my Z80 template project - https://github.com/lawrie/ulx3s_z80_template/blob/main/src/osd/spirw_slave_v.v
    The rest of the code is in that osd directory.
    This is a version of the micropython code that reads and writes memory and controls the cpu remotely from the esp32 - https://github.com/lawrie/ulx3s_z80_template/blob/main/esp32/spiram.py
    The rest of the esp32 code including osd.py is in that directory.
    Here is a youtube video that shows the osd and loader being used - https://www.youtube.com/watch?v=YE7pSuZiN9Y&t=8s
    The latest version of the osd look a bit nicer.
    Lawrie Griffiths
    @lawrie
    This is my TRS 80 Model 1 implementation that has a short description on using the OSD - https://github.com/lawrie/ulx3s_z80_trs80
    Perhaps @emard knows of a better description of all this.
    Lawrie Griffiths
    @lawrie
    The OSD and loader is used by many Ulx3s projects including the Apple II, C64, ZX Spectrum, Mac Plus, QL, TI-99/4A, Amiga (OSD only), Vic 20, NES, SNES, Sega Master System, Orao, etc.
    This is a good video by @Speccery that shows the OSD used on the TI-99/4A - https://www.youtube.com/watch?v=zdST3wz00KU
    I don't think there is a Risc-V implementation on the Ulx3s that uses the OSD yet.
    sylefeb
    @sylefeb
    @lawrie thanks for the links!
    sylefeb
    @sylefeb
    (uart_echo is fixed in 'wip' branch)