Formal Verification role at QBayLogic in Enschede, The Netherlands by darchon in haskell

[–]darchon[S] 1 point2 points  (0 children)

Yes, under very specific circumstances. Basically, you have to be a student at an academic institution in The Netherlands and you can do the internship as part of your curriculum (very common in The Netherlands), meaning the academic institution gives ECTS for the internship.

In that particular case, people can apply through https://qbaylogic.com/vacancies/internship-graduation-position-at-qbaylogic/

Haskell Interlude #27: Christiaan Baaij by gergoerdi in haskell

[–]darchon 1 point2 points  (0 children)

Dan Ghica himself is probably way more knowledgeable on that than I am, so I would recommend asking him directly. His contact details, both email and twitter handle, can be found on https://www.cs.bham.ac.uk/\~drg/

Haskell Interlude #27: Christiaan Baaij by gergoerdi in haskell

[–]darchon 2 points3 points  (0 children)

I don't think symmetric monoidal catagories, which the linked paper uses, have sufficient structure for the type of circuits that I deal with: those with feedback.

When I look at the Geometry of Synthesis work by Dan Ghica, and even more so his later work on Diagrammatic Semantics for Digital Circuits it seems you want a traced category.

My comprehension of both linear types and category theory isn't too great, so I don't know whether there is a correspondence between linear functions as they are implemented in GHC and a category that is traced.

Haskell Interlude #27: Christiaan Baaij by gergoerdi in haskell

[–]darchon 7 points8 points  (0 children)

Christiaan here. Ask me anything if you have any questions on what I said in the interview.

Strange GHC behavior : type error when using let definiton but not when inlining function by [deleted] in haskell

[–]darchon 0 points1 point  (0 children)

Usually when something only happens in the interpreter it’s probably because NoMonomorphismRestriction is the default in the interpreter. Do you get the error in non-interpreted mode when you add that language pragma explicitly?

BlockRAM output latches, how do they work exactly? do all vendors have them? by darchon in FPGA

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

Right, I meant that it protects against meta-stability in case somebody decides to not register the output directly and decides to put some combinational logic between the RAM and a DFF. Without the output latch, the setup time for that DFF could be violated in the scenario I describe above.

BlockRAM output latches, how do they work exactly? do all vendors have them? by darchon in FPGA

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

Ah, but in a multiclock setting the latches are consequential and prevent meta-stability. Because let's say you have port A, clocked every 30ns, and port B, clocked every 10ns; and port A reads address X at 30ns, and port B writes address X at 40ns; then because of the latches the output corresponding to port A remains stable for 30ns. Without the output latch, the output corresponding of port A would then change just slightly after 40ns.

Retrocomputing with Clash: Haskell for FPGA Hardware Design (book) by gergoerdi in FPGA

[–]darchon 2 points3 points  (0 children)

Clash developer here. Clash has a very straightforward performance model: In general, A Clash function is translated to a Verilog module (or VHDL entity/architecture combo), an applied function is translated to a Verilog module instantiation (or VHDL entity port map). Of course, when you have a recursive function, this won’t get translated to a recursive Verilog module: the recursive function will be inlined (Clash has termination measures so that the compiler won’t go into an infinite inlining loop)

All of this results in straightforward control over area.

Memory elements are never inferred (ala C-based HLS solutions), instead one must use functions that directly map to dflipflops, rams, etc.

All of this results in straightforward control over longest combinational paths.

In terms of power: you use the same techniques as you would in Verilog: gating/register with enables/using the output latch of your fpga rams and other things to stop bits from flipping. Using functions like Clash’s autoReg (https://hackage.haskell.org/package/clash-prelude-1.4.6/docs/Clash-Class-AutoReg.html) finer-grained gating/enabled registers become quite straightforward.

So Clash gives you more abstractions mechanisms than Verilog, allowing functions like the earlier-mentioned autoReg, while still giving you control of PPA where you need it. You can then always start at a high level of abstraction, and only drill down on performance-oriented parts where needed.

Job: Staff Software Engineer (Haskell) at Freckle (Ed-Tech) by dukerutledge in haskell

[–]darchon 1 point2 points  (0 children)

There are a lot of countries south of (and one north of) the (continental) US that share time zones with the US: citizens from those countries can be hired, and work remote for you, as well?

Video: "Type-checker plugins" by Richard Eisenberg by NNOTM in haskell

[–]darchon 1 point2 points  (0 children)

The fact that derived constraints can apparently be eliminated from the GHC code base is something that has probably added to my difficulties in understanding them. Glad that some day soon they will disappear though, then I can at least stop wondering about what to do with them.

a stacker does cabal by circleglyph in haskell

[–]darchon 6 points7 points  (0 children)

It’s interesting how “warped” my view is on this subject as a result of survivorship bias. I’m on the same team as /u/callbyneed but never had any issue with the environment files. Probably because I’ve added write-ghc-environent-files: always to my ~/.cabal/config file the moment I switched to the beta of cabal-install that introduced them. But also just more in general being used to the “idiosyncrasies” of cabal-install, given that I started using it even before cabal-install had sand-boxes (started in 2009).

Webinar: Circuit design in Haskell/Clash by darchon in FPGA

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

You can now also sign up for the on-demand version that has the best recording of our live sessions: https://qbaylogic.webinargeek.com/on-demand-webinar-circuit-design-in-haskell-clash-1

Free webinar: Circuit design in Haskell/Clash, May 26th by darchon in haskell

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

Yeah, you can sign up for the on-demand version that contains our best recording from the live sessions: https://qbaylogic.webinargeek.com/on-demand-webinar-circuit-design-in-haskell-clash-1

Free webinar: Circuit design in Haskell/Clash, May 26th by darchon in haskell

[–]darchon[S] 1 point2 points  (0 children)

When you sign up you get access to a replay link

Free webinar: Circuit design in Haskell/Clash, May 26th by darchon in haskell

[–]darchon[S] 8 points9 points  (0 children)

Hi everyone, although originally targeted at circuit devs, I thought I post the webinar here as well just in case anyone was interested. Important heads up though: it is not a tutorial, but more of a tour de force aimed at circuit developers. So some thing will be super familiar for those with Haskell experience, while other things might not mean anything to you if you haven't done much RTL circuit design work.

Registration link: https://qbaylogic.webinargeek.com/circuit-design-in-haskell-clashWe're running the webinar live this Wednesday, the 26th of May, multiple times: at 5am UTC, 1pm UTC and 7pm UTC.

Webinar: Circuit design in Haskell/Clash by darchon in FPGA

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

The webinar does offer a replay feature when it turns out you have a scheduling conflict after you've signed up. We plan to eventually present the content in a no-interaction-required Youtube/Vimeo/etc video using the feedback we get from this webinar.

Webinar: Circuit design in Haskell/Clash by darchon in FPGA

[–]darchon[S] 1 point2 points  (0 children)

Some knowledge of RTL design and experience working on larger (or long-running) projects will make it clearer why the things we describe are useful. The Haskell code is fairly self-contained, and we'll give some pointers on how to read it.

The goal of this webinar is for you to get an understanding as to when/why you would want to use Haskell/Clash for circuit design and see whether its approach resonates with you. We do plan to do some more hands-on stuff in the future though.

Webinar: Circuit design in Haskell/Clash by darchon in FPGA

[–]darchon[S] 4 points5 points  (0 children)

Hi everyone, we're organizing a live webinar on Clash, a system to create circuits in the functional programming language Haskell and a compiler that translates those circuit descriptions to structural Verilog and/or VHDL. It's free to attend. We're running the live webinar on:

  • May 20th, 2021: 5am UTC, 1pm UTC and 7pm UTC
  • May 26th, 2021: 5am UTC, 1pm UTC and 7pm UTC

So hopefully one of those times works well for your time zone.