Tutorial: Digital to FPGA 101
1:05:57
2 жыл бұрын
Пікірлер
@ArnCiS96
@ArnCiS96 7 күн бұрын
How to build Shader Unit? LIke those GPU who got just introduced shaders into computer graphics
@thematthew4246
@thematthew4246 16 күн бұрын
This was awesome!
@aldob5681
@aldob5681 17 күн бұрын
the "skip" flag is a little bit obscure. are you using a modeling tool that does not match the hardware?
@GreenNotebookGaming
@GreenNotebookGaming 24 күн бұрын
I just got reminded of you because I saw a video that used this software, and I saw you made some new videos. Nice to see you came back from the dead. lol
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!
@Zurenio
@Zurenio Ай бұрын
FANTASTICO....UNICO...GREAT...!!🥰😍🤩👍👌
@noaag
@noaag Ай бұрын
Wow this is seriously validating all those hours i spent in factorio
@Robbinsffxi
@Robbinsffxi Ай бұрын
I understand what you are doing. But I can't understand why. Why you make the choices you do makes me think I need to know how the CPU functions in order to get the most out of this course.
@TheRojo387
@TheRojo387 2 ай бұрын
ASCII = "American Standard Code for Information Interchange"
@baldwindiaz
@baldwindiaz 2 ай бұрын
Thanks for introducing to Digital....your videos are amazing i am learning from them, wish to see more. How about a video on GPU or NPU a simple basic one.
@Somfic
@Somfic 2 ай бұрын
i NEED the error handling video! i am really into pretty and graceful error handling, and am coincidentally also working with the pratt parsing algorithm
@stewartanderson6433
@stewartanderson6433 2 ай бұрын
I started this series a week ago, realized I had no idea what was happening, and spent the past week giving myself a crash course in ICs and coding languages. It makes a bit more sense now that I've returned to it, but I guess I'm just not quite there yet on my journey.
@user-py6zc5gx3l
@user-py6zc5gx3l 2 ай бұрын
@rj45Creates Why does the demux with input 1 lag (seen as light green wire) behind the PC out? Does it lag or is it wrong interpretation?
@user-py6zc5gx3l
@user-py6zc5gx3l 2 ай бұрын
I'm not following the lagging B output as well
@____________________________.x
@____________________________.x 3 ай бұрын
Great progress 👍
@rj45Creates
@rj45Creates 3 ай бұрын
Thanks :-)
@morthim
@morthim 3 ай бұрын
sometimes you seem quite a bit further than my skill level, and sometimes you seem a bit behind. so here is a suggestion and if you have engineered beyond it ignore the comment. instead of having an autosave, you may want to have two incase a crash occurs while saving. as in it might be possible for the save to be interrupted and the save corrupted. if you have a pair of files, then you can save over the older one, and have the newest loadable save load. there are three ways to do it, the one i just suggested. you could have the program detect if a save is corrupted, but that is just saying that a save is unrecoverable, and if you can do that you should be able to have a vallid working memory. the third way that springs to mind is to have alterations be an appended linked list, you could have it save every update instead of every seccond, that massively reduces the number of file updates. part of this is having a user action only count as an update if the user releases control. so they can drag a wire arround but only when they release the mouse does it update the file. if you do this the file can still be corrupted, but since you are saving a string of user inputs instead of computer state, what can be corrupted and lost will only be the last user action which will be corrupted. the combination of sequence of user operations, and objective circuit data structures, doubles the number of types of file but basicly eliminates the problem. if you fear partial corruption, due to like magnets not just power outage during save, the stack could have double the information technically necessary. lets say the file claims a user moved an 'or' gate from one position to another. if you save the starting position as part of the move, then you can have checks to see if there was such a component there. this gives better user recovery from a corrupted file. the file might say it was an 'or' initially, but the user's string of operations is saying it was an 'and'. this spreading of data across the file makes it grow a bit, but also a human reviewing it could make judgements about a corrupted file, which would mean there would be even less chance of irrecoverable data loss. if you have an objective data file and you try to minimize the file size then corruption can cause the entire file to become rubbish, like a checksum can tell you if a file got corrupted but it isnt really workable from there. but the more redundencies to data there are, the less capacity for catastrophic data loss. and data on disk is pretty cheap now. you could have files be 4 or 5 times the necessary size, but it may still be prefered if it means that the user loses 5 minutes of time instead of losing the entire project. again don't take this as personal criticism, maybe you went to this level and far beyond. i don't know. you mentioned you want this to be a tool. so another thing is to have save go to multiple places automatically without having to do raid. "what folder(s) do you want to save this in automatically". since my comment is about saving and fie size. being able to draw boxes on screen and give parts of circuits labels, which become new files with the label as the save name, and have those sub circuits to be able to be brought into your current project so you can both copy paste sections of circuits, and you can compress large portions of circuits when saving a file as "do this other file again here" would lead to some pretty extreme compression. a 'funny' way of using that would be to allow users to make circuits and if they are electrically identical, you can ask "is this a [half adder]" which would be one of the circuits saved in their file. this would allow people to test themselves if they can make a circuit by hand. another way the compression from having files link to one another can work, is you could have static references, which would be cross file copy paste, but you could also allow reworking the referenced file to also change the refering file, so you fix once and it applies everywhere once you open those files. the default would be the updates propagate situation as this is a cliche memory race, but you could also have the referenced circuit duplicated locally not just as the box being a reference, but something you can fiddle with and which get unlinked as a result. if you copy paste across files, and then you place any component in the box linked to any other component, it should unlink the reference from the save file turning [half adder] into [?] then when you delete the component restoring it to being a half adder it should say [half adder?] to indicate that it looks the same but is going to keep a local immutable copy of the circuit in this file with no external reference. compression for those who want it, and isolation for those who want it. pair having the abbility to reference designs you have in files with both having objective circuit descriptions and operation stacks which allow the reconstruction of save interupted corruptions, and higher detail saves as an option to allow in file corruptions to be manually corrected by users, and you have a strong base for the tool. is it a pain to have to do the single thing multiple different ways? absolutely, but not being able to lose your hard work on digital property would likely be pretty attractive to businesses. another kinda different thing you may want to consider is whether you can have multiple users. if you have the sequence of user operations save file, then you just need to put in tcp recognition, and also put in save points or restore points which are like every 5 minutes- whatever the tcp timeout is. and then put in a button which will restore current state from last known good file. this would balloon work, but it is one of those things which is easier to do if you decide to do it early on. making a single player game multiplayer is a pain late in development, but if you know you want that in the scope right away you wont optimize away from the requirement. if you want multi users for over the internet training, or for educators in conventional classes, that might justify using both saving and loading styles; files and data streams.
@rj45Creates
@rj45Creates 3 ай бұрын
So, the usual way it's done on unix systems is that you write to a new file, and then when the write is fully complete, you move the file on top of the old one. The move is guaranteed to be an atomic transaction in that the old file will be fully deleted and the new file fully linked to the old file's filename, or neither of those events will happen, and never any other permutation. Windows probably has something like this, but might involve special functions to do it. But this should eliminate corruption assuming the hardware and kernel are doing things correctly. But there's also value in having multiple autosaves and doing some sort of progressive elimination (like keep 5 1 minute backups, 5 1 hour backups, and 5 1 day backups for example). I'll see what user's want when I get that far. I did run the idea of doing transactions and write ahead logging by some friends but they said doing auto-saves is simpler, and I would agree. But eventually if this is used professionally, transactions and write ahead logging may be prudent. As for sub-circuits (or sheets as they are sometimes called in traditional EDA software) that is a feature I plan to add. You have some interesting ideas about drawing boxes around parts of the circuit to create them that's a really good idea I hadn't thought of. The auto-recognition of a pattern is interesting too. As for multi-user support: the algorithm required is very complex (operational transforms and related technologies) -- at least for text documents. Spatial documents may be simpler, I am not sure. In any case, I think that will be a stretch goal if it makes the list. It adds a large amount of complexity.
@0toleranz
@0toleranz 3 ай бұрын
One tip with the auto save though- don’t go to crazy with it. Having done the same a couple of years back I trashed the SSD in my MacBook at the time due to quickly wearing the flash cells. Luckily that one was still changeable then being m2 nowadays all ssds are soldered on chips makes this impossible. I would make autosave a tunable feature allowing to turn it on/off and set a time or amounts of changes to occur before saving to disk. On the routing bit - it seems the router often draws multiple vertical wires on the same grid up until they collide in a corner just to then divert back horizontally and by doing so you can’t distinguish them either crossing each other or just two nets touching with two corners in a single point which makes it really hard to spot what’s going on.
@rj45Creates
@rj45Creates 3 ай бұрын
Yeah, I don't want to trash SSDs, hence why I save only every second. Eventually there will be preferences and you can tune it. Another option is to append the undo stack since the last autosave to the end of the file, and then if the auto save is loaded, the undo events are played back.Then the auto save can happen every minute or longer without issue. Really, then the autosave process would be more compacting the file. As for routing, we aren't finished yet: we still don't have "nudging" which is what happens when two wires overlap. They are supposed to be nudged apart in a way that minimizes crossings. We'll get there.
@bradywb98
@bradywb98 3 ай бұрын
I recorded a video in Digital today and was thinking about how cool it’d be to use Digilogic on the cutting edge.
@rj45Creates
@rj45Creates 3 ай бұрын
Yeah I can't wait :-)
@y_x2
@y_x2 3 ай бұрын
I have a lot of experience with FPGA, the explanation is very confusing... An UART is very simple! When you know how things works it's easier to design from scratch...
@Thoughtflux
@Thoughtflux 3 ай бұрын
Can you point me to a resource you recommend? I'm just starting off with fpga..
@axnehashadman9993
@axnehashadman9993 3 ай бұрын
Can someone explain me what software is this ??
@rj45Creates
@rj45Creates 3 ай бұрын
It's Digital, link to it is in the description of the video
@Thasneem
@Thasneem 3 ай бұрын
I love this type of videos keep it up In the future you will definitely reach 1M ❤
@rj45Creates
@rj45Creates 3 ай бұрын
Thanks for the vote of confidence. We will see what the future holds.
@morthim
@morthim 3 ай бұрын
why do you want to make a game engine? some people like the problem solving aspect of it. others like the social membership aspect; they like making game engines or programming languages because it helps with self esteem. the different motives lead to different long term and intermediate goals. i have a vision for a game engine which would become the best on the market for prototyping. it would take most of the coding responsibility into the engine itself, and there would be far fewer options to fiddle to make it less overwhelming. let me know if you are interested in talking about the vision. digilogic is looking great.
@rj45Creates
@rj45Creates 3 ай бұрын
I kind of don't want to make game engines, I want to make products. I want to make something people can use. Hence digilogic. Under the hood it's essentially a game, and I am building a game engine for it, but it's meant to be a useful tool rather than a game. I think that suits me better.
@rj45Creates
@rj45Creates 3 ай бұрын
The bugs with area moving and undo seen in this video are fixed in version 0.0.8. I also got the linux build working.
@____________________________.x
@____________________________.x 3 ай бұрын
Real time bug finding, lol 😸 I’d love something that uses the old TTL chip images and not the incomprehensible IEEE block type definitions. Being able to select say a 74LS138 and drop it in there. Also to draw a bit pattern to feed into a circuit, rather than just toggle switches. I’ve tried one or two of these sims but felt frustrated at the abstraction, I just want to select a stock TTL part that I recognised and not be limited to a few gates and an ALU. Maybe a parts creator for say an obscure 64 bit RAM chip?
@lawrencemanning
@lawrencemanning 3 ай бұрын
Agree with all these ideas. Those IEEE symbols! Argh. You could really go to town and have a software system that would take you all the way to designing the breadboard layout. I definitely would love it if it had symbols for real parts, plus of course the ability to design your own, both the interiors and the external symbol.
@lawrencemanning
@lawrencemanning 3 ай бұрын
And of course: Verilog and VHDL output. I hope there’s even the slightest chance of any of these ideas being picked up and I’ll put in a donation. 😊
@____________________________.x
@____________________________.x 3 ай бұрын
@@lawrencemanning thinking about it, defining what any individual chip does, especially when there are stored states within that chip and say edge triggers, is a non trivial problem? I’m not sure what such a user definition would actually look like without just becoming VDHL?
@rj45Creates
@rj45Creates 3 ай бұрын
I will add it to the requirements list. I can't promise anything at this stage, but I do enjoy playing with TTL parts and I have ideas how it might be done.
@rj45Creates
@rj45Creates 3 ай бұрын
KZfaq replies are weird.... @lawrencemanning verilog generation (and perhaps vhdl) are on the list already. I like to build stuff in FPGA and without verilog export it's not going to be very useful to me. Building custom components with their symbols would also be nice -- then it would be a proper CAD / EDA program. You'd have to define those custom components in terms of built-in components, but I think that's okay. Or maybe some sort of plugin system.
@dothesick
@dothesick 3 ай бұрын
Ohh so it’s fake
@krishnakumarramanathan4214
@krishnakumarramanathan4214 3 ай бұрын
you are great!!
@rj45Creates
@rj45Creates 3 ай бұрын
Thanks!
@krishnakumarramanathan4214
@krishnakumarramanathan4214 4 ай бұрын
Most underrated channel. Great knowledge!!
@xy4611
@xy4611 4 ай бұрын
How did you learn
@jeanclaudejosephbadji5418
@jeanclaudejosephbadji5418 4 ай бұрын
Thank you for your video. But Please use black background on your future videos...
@fabianschuiki
@fabianschuiki 4 ай бұрын
This is a fantastic project! 🎉 Thanks for getting people excited for compilers 👍
@kuroikenjin7652
@kuroikenjin7652 4 ай бұрын
Pretty UI! The state machine with enums you heard about in Rust is probably something like this where you store your state info in the enum then match on that enum (exhaustively) and handle that state., but that's really only handy if you want to store data in a state. Otherwise, not much different. enum States<x,y,z>{ FirstState(x), SecondState(y), ThirdState(z) } ... let s = State::FirstState(0); match s { States::FirstState(data) => {}, States::SecondState(data) => {}, States::ThirdState(data) => {} }
@rj45Creates
@rj45Creates 4 ай бұрын
That's what I figured. But the person who mentioned it said it could replace the switch statements. Not sure how that would work, but then I have very little experience with rust.
@rj45Creates
@rj45Creates 4 ай бұрын
Join Discord Here: discord.gg/thzHEM3VH7
@markbrudnak7978
@markbrudnak7978 5 ай бұрын
Thank you for making these videos. I have been working on my own compiler as a hobby project and it is helpful to see how others tackle the different aspects, especially in C.
@rj45Creates
@rj45Creates 5 ай бұрын
Thanks for the encouragement! I decided to be motivated by people's gratitude because let's face it, this is kind of a niche community and I am not likely to have a huge number of subscribers or massive view numbers or anything like that. But whatever, I am interested in these topics and I want to learn how to share my interest and knowledge. And compilers are fun to build.
@markbrudnak7978
@markbrudnak7978 5 ай бұрын
@@rj45Creates I have a utf8 decoder, lexer and parser working. Kind of stuck on the next steps. Looking forward to following your videos.
@weirdboyjim
@weirdboyjim 5 ай бұрын
In my assembler something I added to the parser to help with error handling is code for generating an error message with a consistent prefix including a formatted string describing the current line / character being parsed. Makes most of the error messages a bit more consistent and useful.
@rj45Creates
@rj45Creates 5 ай бұрын
Yeah that's what I am intending the errErrorf() function to do eventually.... I just don't don't have files or line numbers yet. But I feel like it's important to get errors going through a central place sooner than later so it's easier to generate good error messages later.
@weirdboyjim
@weirdboyjim 5 ай бұрын
@@rj45CreatesExactly how I did it: "void Error(const char* _format,...); "
@artahir123
@artahir123 5 ай бұрын
brother plz help i want to be like you i also want to make things from scratch but i don't know how whats the roadmap to become like you what resources to follow ?
@rj45Creates
@rj45Creates 5 ай бұрын
It takes practice, much like learning the piano takes practice. As well, the person that makes a hundred pots will beat the person that tries really hard to make a single awesome pot every time. Pick something you're excited to make, preferably a small project that you can complete fairly quickly, and figure out how to build it. You'll suck at first, that is totally normal, I sucked really bad at first too. Just keep doing it. Don't give in to discouragement. As you get better you'll be able to take on larger and more difficult projects. Just keep going. It takes years to master anything, and the people who master things are the people that learn how to not give up and realize they can do anything they put their mind to. You're smarter than you think. You can achieve more than you think. Just give it the time it needs. Put in the practice.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
For digital simulator C is a bad choice, really. Digital circuits have millions objects to simulate. You will have to spend a lot of time fixing race conditions and memory leaks. I believe RUST could be a better choice. But you know digital kinda works already and there is a C++ verilator, I don't believe many people will want one more.
@rj45Creates
@rj45Creates 5 ай бұрын
C is totally fine for a simulator if I use data oriented design. I already have the simulation data structures mostly figured out. And for GUIs, rust is really bad (though the community is trying very hard to fix that). Go is worse (and very little support for fixing it). But people have been building GUIs in C for decades. So.... C kind of seems like the best option to me. As for demand, you may be right, perhaps there isn't any demand for it. I guess we will see.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
@@rj45Creates to simulate complex design you will need power of all CPU cores, half of hundred is very common server. Handling thread pool share data and synchronize them will require a lot of C macros and void*. Do you have a silver bullet?
@WaveSound123
@WaveSound123 4 ай бұрын
I don't usually engage with propaganda, but for some reason i am compeled to respond to this. C is a perfectly capable language to "handle millions of objects" and it allows you to use the "full power of the cpu", whatever you want to mean by these statements... Language and program design are orthogonal, if you are afraid of leaks and race conditions, don't be, you can have race free and leak free programs while using C, you just need to do what you would need to do in every programming language, use a function. If you can not see how a function solves all these issues, you might want to consider taking a couple of hours trying to solve these problems before telling people what to do and how to do it just because you can not do it. I hope i don't come off as rude, but from the video series @rj45Creates seems like a very capable programmer, please don't be condescending towards him just because you do not have the same skill set as he does.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
Does your assembler implement macros? If yes you can emit macro instead of function call...
@rj45Creates
@rj45Creates 5 ай бұрын
Yeah it does have powerful macro support. But a macro for multiply for example will clobber the contents of at least 3 registers. I could save those registers to the stack, but that requires a good chunk of effort as well since I don't have any stack management yet. I'd like to get register allocation done as soon as possible since it makes code generation a lot easier.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
Why do you invent your IR? If llvm ir is heavy /*and it pretty is*/ why not produce QBE IR? Even if you won't use it in final project. First using QBE you can fully test your front-end in development, and it's well designed and pretty easy to parse.
@rj45Creates
@rj45Creates 5 ай бұрын
Not sure if you mean this, but what I could do is pretty print to QBE IR, and that would give me the ability to run it through QBE to generate code for x86 and ARM and whatever else QBE supports.... If that's what you meant, that's a really good idea!
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
@@rj45Creates yep, so you can validate your frontend output by compiling BQE IR by QBE backend into a binary for your laptop. But then if you will develop QBE backend for your CPU you can use any frontend language. QBE IR is very logical and easy to parse.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
Lines numbers are needed not only for errors. They are necessary for debug build, for breakpoints and stepping in a debugger.
@rj45Creates
@rj45Creates 5 ай бұрын
Yeah, I don't plan to implement DWARF output or anything like that. DWARF is extremely complex. And for generating code for my CPU, since it's a 16 bit CPU with 128 kb address space, DWARF information is impractical. I suppose I could produce a separate debugger file for remote debugging via special support in my CPU though. But that's for far future me if I ever get that far.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
@@rj45Creates anyway you will need to produce debug information even it's in a separate file, debug build requires from parser to have/preserve source location for almost every source line.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
Write C compiler in C! This almost the only way it could be made self-hosted!
@rj45Creates
@rj45Creates 5 ай бұрын
Self hosting will be difficult for my cpu given its memory constraints, but if I take your QBE idea, I could self host on x86 or arm or something like that.
@alexloktionoff6833
@alexloktionoff6833 5 ай бұрын
@@rj45Creates why not? just add paging, a lot of FPGA dev boards have multi megabytes of DDR RAM.
@ostrov11
@ostrov11 5 ай бұрын
спасибо, хорошая работа.
@rj45Creates
@rj45Creates 5 ай бұрын
You're welcome :-)
@kuroikenjin7652
@kuroikenjin7652 5 ай бұрын
The Rust comment was mostly a joke... but I am porting my compiler building tools over to it from a single page angularjs/javascript.. you can imagine how interesting that's going. That'll support the software tools for my 8 and 16 bit cpu designs (on FPGA). That's also being used an an opportunity to get more into Rust. For digital logic, I use Logisim Evolution... it's also in Java, and slightly rough around the edges. It's very much geared to FPGA development. I have also thought of making my own digital logic sim, but I end up scrapping those projects when I get to concurrent and/or conflicting changes.
@rj45Creates
@rj45Creates 5 ай бұрын
I figured it was a joke. However, I know some people watching would be thinking Rust is better because ______. So I gave my reason why I don't bother with Rust. It's an awesome language for many people other than me. I prefer simplicity. Hence why I love Go (and prefer C over C++). Anyway, yeah a digital logic simulator is a very large project. The main reason I am considering it is that it would be the most useful to the community. And who knows, maybe if it's written in C people would want to contribute. I am pretty sure if I write it in Go people won't contribute to it. If enough people contribute maybe it would be possible to make it totally free and open source.
@morthim
@morthim 5 ай бұрын
about digital logic. i already bought one, and didnt find it at all useful. it wasnt bad, but ive never started the program. i liked the idea about it more than the opportunity. when i was starting out programming around 2005 i was considering a logical programming language. i found something but i dont recall the name. i think it was 'visual logic'. basicly a flowchart programming language. i wouldnt pay for another without major feature improvement. why would i use an emulator for logic evaluation if i know in my head what will happen? about propagation delay... if it doesnt link into verilog, fpga code, or asyc design directly, i dont think it will do well. in my first progaming class there was a dogmatic position that you build a mvp first showing a proof of concept and then you build it right in a completely different language. when it comes to writing verilog, you have to drop your comfortable language to write in a completely different style, and this creates a barrier to entry. if the logical circuit emulator you make doesnt have an export to popular format, meaning you can fix a problem in the simulation and that fix will cascade into the release product, it may face low adoption. if you make it free with ads, you might get some downloads. but to get large downloads you would need to make it into a puzzle game. you could have levels of partial circuits, and optional pieces to fit in set places. in another game mode you could have the pieces needed on the board and the user wires them up. if you make it premium, you wouldnt need to get as many sales, and the more it helps with workloads the more you could charge. charging $500 or $1000 for industrial software isnt uncommon. with charging you could some large supporters. you could start a crowdfund, and if you contact large companies they may also back you. and note that you wouldnt be distracted from your vision and goal. if you make it foss, you can fork an already open source repo, probably, this would reduce costs by reducing the size of teh problem. but it would also likely mean you cant directly profit from it. so, this would also mean that donations would become more prominent. related to foss, is to create a 501c3 charity corp, which would mean that you would have to give yourself a sallary with performance bonuses. this may reduce tax liability. if i was thinking of doing it i would put feelers out to companies in related industries and include that you are a youtuber with thousands of subs posting videos on related topics.
@rj45Creates
@rj45Creates 5 ай бұрын
Yeah, one thought I had was to make it interoperate with verilog. In other words, you could edit the verilog and it would change the circuit diagram, and vice versa, if you edit the diagram it would update the verilog. This would make it significantly more useful to people working in industry, and it would make it a very valuable teaching tool. Unfortunately it's also an order of magnitude more difficult to build. But without that, I can't imagine anyone working in industry would prefer anything other than verilog or VHDL.
@rj45Creates
@rj45Creates 5 ай бұрын
You can join Discord here: discord.gg/thzHEM3VH7