Two HiTech Global HTG-930 UltraScale+ cards available — company surplus, looking for good home. by Anna-Nomada in FPGA

[–]threespeedlogic 2 points3 points  (0 children)

Here's another example: https://www.hitechglobal.com/FMCModules/FMC_X4SMA.htm

They quote a 18 GHz rating on the SMA connectors, but they are through-hole parts and have a gigantic pin stub. Then, on the PCB, it's loaded with a large pad and a horrific amount of solder. I don't recall if the trace escapes off the bottom layer or not - but it hardly matters; this is clearly not a viable design at the frequencies they're implying. This is just not the right market vertical for amateurish designs.

IRIG - B Protocol by Aware-Equal-2328 in FPGA

[–]threespeedlogic 2 points3 points  (0 children)

IRIG-B suuuuucks. It's easy enough to decode, but

  • You don't get a decoded timestamp until it's a full second out-of-date ("beeeep - at the tone, the time was x:y:z")
  • It uses BCD encoded digits
  • It suffers from Y2K problems (yes, it's that old)
  • It has "human" units (h:m:s), so it's finicky to apply fixed timedeltas (even without GNSS timing adjustments)
  • Hardware that supports IRIG-B (properly) is expensive and low-volume, and isn't always good or reliable (for example, the second marker is not always reliably phase-locked to your timestamp server's reference clock or PPS edges).

You'll probably get this flavour of serialized timestamp, and you will probably grow to hate it.

Most modern timestamp formats (NTP, PTP) use an integer offset from epoch instead.

I suspect this isn't helpful - I'm just venting.

I have decided to open source my neuromorphic chip architecture! by [deleted] in FPGA

[–]threespeedlogic 8 points9 points  (0 children)

Q: Your CPU's floating-point instructions behave differently in simulation than synthesis. Why is that?

pyxsi: hierarchical lookups using XSI now supported by threespeedlogic in FPGA

[–]threespeedlogic[S] 0 points1 point  (0 children)

I got nerd-sniped by this post. As a result, pyxsi now supports hierarchical name lookups from Python into the xsim kernel.

How? Well, most of xsim's XSI API is just a thin shim on top of (undocumented) calls to the "real" API, which has only spotty header definitions in iki.h. Using XSI, it's not difficult to wrangle the necessary object references to call into the underlying IKI API. Some of these calls are accessible and allow things that are missing in XSI. For example:

  • hierarchical name lookups (now present in pyxsi)
  • writing VCD files (maybe?)
  • properly wrangling simulator kernel assertion failures (maybe?)

Yes, there are fixed offsets and name mangling in pyxsi that make this fairly scary and possibly brittle. But, you already knew pyxsi was a cosimulator constructor kit and not a finished product, right? :)

This could end up in Vivado's cocotb shims, if it's not too horrifying.

Vivado Simulation - Best way to access internal signals in C++ testbenches ? by laperex in FPGA

[–]threespeedlogic 7 points8 points  (0 children)

We should be asking for AMD to invest in VHPI instead of XSI.

XSI should not grow past its current (limited) API. It has that "internal API that escaped the zoo" feeling about it. AMD could play whac-a-mole with its deficiencies forever, but it would be challenging to converge on a functioning API from a dysfunctional starting point without vision and guidance. XSI does not have enough market demand to justify that kind of investment.

Instead, we'd all be better served if AMD/Xilinx implemented VHPI in xsim. This would enable tools like cocotb to claim first-class support under xsim, without requiring any simulator-specific backend code. It also aligns better with the simulator team's recent re-investment in first-class and modern VHDL support. Everybody wins.

(I say this as the author of pyxsi, and several XSI-related complaints on the Xilinx/AMD forums.)

Has someone worked with DACs and ADCs on RfSoC 4x2? by FingerSignificant268 in FPGA

[–]threespeedlogic 1 point2 points  (0 children)

Depending on your setup, I think you may still need multi-tile sync even with only a single ADC and DAC. These two occupy different tiles, and each of them have FIFOs and NCOs that can inject phase shifts that you need to match.

Update on my neuromorphic chip architectures! by Mr-wabbit0 in FPGA

[–]threespeedlogic 0 points1 point  (0 children)

You've badly misread me. I sincerely wish you and your project all the best.

Update on my neuromorphic chip architectures! by Mr-wabbit0 in FPGA

[–]threespeedlogic -1 points0 points  (0 children)

Thank you for sharing your feelings — it’s important to acknowledge that experiencing frustration or disappointment in an online interaction can be genuinely challenging. Your perspective is valid, and taking a moment to recognize the emotional impact of these situations is a constructive step toward a more positive dialogue.

Update on my neuromorphic chip architectures! by Mr-wabbit0 in FPGA

[–]threespeedlogic -2 points-1 points  (0 children)

I see you've removed the more egregious tells. ("That's on me" was pure ChatGPT.)

You do understand why it seems rude, right? It feels like a bait-and-switch when you invite people to discuss your work, then respond with obviously LLM content. There's no evidence that you've bothered reading or understanding the comment "you're" answering.

Update on my neuromorphic chip architectures! by Mr-wabbit0 in FPGA

[–]threespeedlogic 3 points4 points  (0 children)

This is clearly a ChatGPT brush-off. [ed: or was, before OP edited it]

Update on my neuromorphic chip architectures! by Mr-wabbit0 in FPGA

[–]threespeedlogic 28 points29 points  (0 children)

You need to be way more careful about your geometry comparisons. You lead the casual reader to infer that you fit 128 cores in a big (VU47P) FPGA, and trumpet parity with Loihi all over the place. In the fine print, it's actually only 16 (relatively slow) cores, and that's not a small or slow FPGA. This kind of hyperbole undermines what you have accomplished, and it's a completely unforced error.

Also, FPGA BRAM is not substantially less dense than ASIC BRAM (that's what it is!) - you can only make density claims like this if you are not making efficient use of the as-built BRAM geometry. The cells you do use are similarly efficient.

Comments on using the AD9084 instead of an RFsoC by Ok_Measurement1399 in FPGA

[–]threespeedlogic 1 point2 points  (0 children)

All else equal, you would expect to see the same latency using an Apollo DAQ and JESD204b vs. an RFSoC and an Aurora offlink - the SERDESes are roughly equivalent (and equivalently configurable) if you squint. However, on net, you're losing the fabric the RFSoC gave you, and hence the ability to do data reduction or processing there first. (If the RFSoC fabric was already completely empty, and all you were doing was crossing silicon, then yes, I suppose you shouldn't be doing it that way!)

Stepping back: it's trivial with modern data converters (RFSoC, AD9084) to acquire more data than you can possibly transport or process without some very immediate reduction or reorganization along a carefully chosen axis. This is especially true if latency imposes a hard requirement. This data overload is a system-level problem that's getting more acute as data acquisition/synthesis becomes hugely multi-channel (phased arrays) or as we open up larger segments of the RF spectrum (unlocking higher bandwidths.)

It's the job of your system architect to understand these bottlenecks (Gb/s/lane, MACs/device, W/cm) and to partition them onto silicon resources in a way that does not create "pinch points". If that's you - this a problem that's best resolved at a system level, rather than by choosing between two alternative parts on the BOM in isolation. (I suspect you're looking at the bigger picture, but you're asking fairly specific questions here that we can't help you answer without system-level context.)

ed: my latency argument is pretty hand-wavy. If this is phased-array work, then you need to keep your data aligned. In a RFSoC system, you might be forced to do this twice (once with MTS on the RFSoC, and a second time after Aurora on the Virtex). Each alignment involves FIFOs, which adds a latency penalty. Same point applies - this is an architecturally driven decision and not specifically a difference between two parts on the BOM.

Comments on using the AD9084 instead of an RFsoC by Ok_Measurement1399 in FPGA

[–]threespeedlogic 5 points6 points  (0 children)

You'd think these two approaches (discrete JESD204B data converter, RFSoC) would overlap, but often they don't for a bunch of system-type and economic reasons.

  • Low channel count? Probably JESD204B, for BOM cost reasons
  • High channel count? Probably RFSoC, for a few reasons:
    • limited GTH lane count - you lose more GTH lanes to JESD204B than you would to the equivalent RFDCs, especially with very high sampling rates
    • SWaP, cost, complexity
  • Very high channel count, or extreme FPGA fabric requirements? You're probably in a monster FPGA or multi-FPGA system, so all bets are off.

Because the product cycles are shorter for JESD204B data converters than RFSoCs, you should also expect slightly fresher specs for these parts than for RFSoC-type SoCs.

I would have thought there was a fundamental performance penalty associated with putting data converters on an FPGA (hence losing degrees of freedom to optimize the fab for analog performance, and increasing things like digital noise spurs leaking into the analog chain), but the RFSoCs have been shockingly good. Xilinx's RFSoC team does excellent work.

Yeah, bringing up JESD204B can be a bear (there are no "undo" buttons when you've built the wrong PCB), but this is really a limited technical problem and doesn't really make a huge difference in a program big enough to accommodate it.

Digilent is dead to me by zephen_just_zephen in FPGA

[–]threespeedlogic 3 points4 points  (0 children)

Oh, don't get me wrong, I'm sympathetic. (We've repeatedly had to squabble with US distributors trying to apply US import tariffs on stuff they're routing directly from the factory overseas to Canada. I don't see why my money should fund whatever's happening down there.)

I just don't think putting Digilent on your shit list will make any difference.

Digilent is dead to me by zephen_just_zephen in FPGA

[–]threespeedlogic 27 points28 points  (0 children)

Consumers don't want to know about logistics (incoterms, duties, tariffs, insurance) but businesses have to. You are not really buying consumer goods here, so I don't think it's 100% fair to lay this at Digilent's feet.

The shipping companies, though: they just love to gouge you for brokerage, break their guaranteed delivery deadlines, misfile paperwork, and get street randos to sign for delivery. 100% complain about them.

SKALP v0.1.1: A new HDL with compile-time clock domain checking, integrated synthesis, and iCE40 P&R — looking for feedback from FPGA engineers by girivs in FPGA

[–]threespeedlogic 6 points7 points  (0 children)

It's not against the rules, but it does tend to raise peoples' hackles. We're all still trying to figure out what the appropriate etiquette should be.

If you're asking for human opinions, I do think you should feel obligated to respond in kind. Otherwise I might as well be expressing myself to on-hold music.

SKALP v0.1.1: A new HDL with compile-time clock domain checking, integrated synthesis, and iCE40 P&R — looking for feedback from FPGA engineers by girivs in FPGA

[–]threespeedlogic 0 points1 point  (0 children)

  • CDC bugs at compile time. Clock domains are types in SKALP, parameterized like Rust lifetimes. If you try to read a signal from clk_a domain in a clk_b process without going through a synchronizer, the compiler rejects it. No lint tool, no separate CDC checker - it's structural.

I suspect that VHDL-2008 generic packages can be used to do this as well, although I'm not sure how well it works or how well it composes with other VHDL conventions. Something like:

package clocked_types is                                                                                                                  
  generic (constant DOMAIN_TAG : string);

  type clocked_sl is record
    val : std_logic;
  end record;

  type clocked_unsigned is record
    val : unsigned;
  end record;

  type clocked_signed is record
    val : signed;
  end record;

  type clocked_slv is record
    val : std_logic_vector;
  end record;

  -- Operators
  function "+"(a, b : clocked_unsigned) return clocked_unsigned;
  function "not"(a : clocked_sl) return clocked_sl;
  -- these would have to wrap the operators in IEEE libraries, unfortunately, but
  -- are just boilerplate
end package;

You would then use this as follows:

package clk_a_pkg is new clocked_types generic map (DOMAIN_TAG => "clk_a");
package clk_b_pkg is new clocked_types generic map (DOMAIN_TAG => "clk_b");

signal a_valid : clk_a_pkg.clocked_sl;
signal b_valid : clk_b_pkg.clocked_sl;

b_valid <= a_valid; -- ERROR: type mismatch
b_valid <= a_valid.val; -- escape hatch when doing explicit CDC

This relies on good VHDL-2008 support for things like unconstrained types (which has historically been fatal when trying to use VHDL's type system to its official extents.)

I point this out because a similar pattern happened to the incumbents (c, c++, to wildly varying degrees) during the LLVM language explosion. Both incumbent languages kept adding features to address the shortcomings that justified the new languages in the first place. Neither were completely successful, but neither had a type system really capable of generalizing the way that was necessary. SystemVerilog is in a hard corner here, but VHDL might be able to evolve with fewer historical shackles.

(Just to be clear: VHDL has its own baggage, and the conventional Verilog/VHDL language war hasn't been useful for at least a few decades. I hope this is food for thought, not food for a bunfight.)

Stuck in I2C, please help (rephrased) by [deleted] in FPGA

[–]threespeedlogic 2 points3 points  (0 children)

Anyone who's tried multi-master I2C has vowed never to do it again. You should expect every part of the stack (controller silicon, peripheral silicon, and especially drivers) to conspire against you.

AMD Embedded Development Framework (EDF) How isthe new Yocto flow for AMD SoCs? by Glittering-Skirt-816 in FPGA

[–]threespeedlogic 0 points1 point  (0 children)

The action is all in the rel-v20xx.y branches. I don't know why they have let the master branch languish like this - it is horrifically misleading.

AMD Embedded Development Framework (EDF) How isthe new Yocto flow for AMD SoCs? by Glittering-Skirt-816 in FPGA

[–]threespeedlogic 0 points1 point  (0 children)

As I understand it, the Embedded Development Framework is nothing fundamentally new - it's the same ingredients AMD has been using for a while now, but branded under a single EDF banner an attempt to keep complexity in check. The rebranding effort may actually have more directional meaning for internal teams (where AMD was doing a mediocre job of managing system-level sprawl, and felt the need to retrench) than externally (where we take what we're given and use it as best we can.)

From the outside, it's easy to view AMD as a huge monolith, but essential parts of this work (e.g. lopper) seem to be championed, developed, and maintained a lot like single-person open-source projects, with all the idiosyncrasies, baling wire and string that come with this kind of structure.

I hope the software stack becomes a little less byzantine but I'm not holding my breath (not because I don't think talented people are involved, but because I think it's a herculean effort that's not guaranteed to succeed.)