FPGARelated.com
Forums

Tiny CPUs for Slow Logic

Started by Unknown March 18, 2019
On Tuesday, March 19, 2019 at 6:27:44 AM UTC-4, Tom Gardner wrote:
> > Yup. The hardware is easy. Programming is painful, but there > are known techniques to control it...
That is 'C' world, conventional thinking. If you can write a hello world program without using a JTAG debugger, you should be able to write and debug most programs for this core in the simulator with 100% correctness. We aren't talking about TCP/IP stacks.
> There's an existing commercially successful set of products in > this domain. You get 32-core 4000MIPS processors, and the IDE > guarantees the hard real-time performance.
And they are designed to provide MIPS, not logic functions. I don't want to go too far into the GA144 since this is not what I'm talking about inserting into an FPGA, but only as an analogy. One of the criticisms of that device is how hard it is to get all 144 processors cranking at full MIPS. But the chip is not intended to utilize "the full MIPS" possible. It is intended to be like an FPGA where you have CPUs available to do what you want without regard to squeezing out every possible MIPS. No small number of these processors will do nothing other than passing data and control to it's neighbors while mostly idling because that is the way they are wired together. The above mentioned 4000 MIPS processor is clearly intended to utilize every last MIPS. Not at all the same and it will be programmed very differently.
> Programming uses a techniques created in the 70s, first > implemented in the 80s, and which continually reappear, e.g. > TI's DSP engines, Rust, Go etc. > > Understand XMOS's xCORE processors and xC language, see how > they complement and support each other. I found the net result > stunningly easy to get working first time, without having to > continually read obscure errata!
But not at all relevant here since their focus is vastly different from providing logic functions efficiently. Rick C.
On Tuesday, March 19, 2019 at 6:56:42 AM UTC-4, already...@yahoo.com wrote:
> On Tuesday, March 19, 2019 at 2:13:38 AM UTC+2, gnuarm.del...@gmail.com wrote: > > Most of us have implemented small processors for logic operations that don't need to happen at high speed. Simple CPUs can be built into an FPGA using a very small footprint much like the ALU blocks. There are stack based processors that are very small, smaller than even a few kB of memory. > > > > If they were easily programmable in something other than C would anyone be interested? Or is a C compiler mandatory even for processors running very small programs? > > > > I am picturing this not terribly unlike the sequencer I used many years ago on an I/O board for an array processor which had it's own assembler. It was very simple and easy to use, but very much not a high level language. This would have a language that was high level, just not C rather something extensible and simple to use and potentially interactive. > > > > Rick C. > > It is clear that you have Forth in mind. > It is less clear why you don't say it straight.
Because this is not about Forth. It is about very small processors. I would not really bother with Forth as the programming language specifically because that would be a layer on top of what you are doing and to be efficient it would need to be programmed in assembly. That said, the assembly language for a stack processor is much like Forth since Forth uses a virtual stack machine as it's programming model. So yes, it would be similar to Forth. I most likely would use Forth to write programs for these, but that is just my preference since that is the language I program in. But the key here is to program the CPUs in their stack oriented assembly. That's not really Forth even if it is "Forth like". Is that what you wanted to know? Rick C.
On 19/03/19 11:00, gnuarm.deletethisbit@gmail.com wrote:
> On Tuesday, March 19, 2019 at 6:21:24 AM UTC-4, Tom Gardner wrote: >> On 19/03/19 00:13, gnuarm.deletethisbit@gmail.com wrote: >>> Most of us have implemented small processors for logic operations that >>> don't need to happen at high speed. Simple CPUs can be built into an >>> FPGA using a very small footprint much like the ALU blocks. There are >>> stack based processors that are very small, smaller than even a few kB of >>> memory. >>> >>> If they were easily programmable in something other than C would anyone >>> be interested? Or is a C compiler mandatory even for processors running >>> very small programs? >>> >>> I am picturing this not terribly unlike the sequencer I used many years >>> ago on an I/O board for an array processor which had it's own assembler. >>> It was very simple and easy to use, but very much not a high level >>> language. This would have a language that was high level, just not C >>> rather something extensible and simple to use and potentially >>> interactive. >> Who cares about yet another processor programmed in the same old language. >> It would not have a *U*SP. In fact it would be "back to the 80s" :) > > Sorry, I don't get what any of this means. > > >> However, if you want to make it interesting enough to pass the elevator >> test, ensure it can do things that existing systems find difficult. >> >> You should have a look at how the XMOS hardware and software complement >> each other, so that the combination allows hard real time operation >> programming in multicore systems. (Hard means guaranteed-by-design >> latencies between successive i/o activities) > > Yeah I think the XMOS model is way more complex than what I am describing. > The XMOS processors are actually very complex and use lots of gates. They > also don't run all that fast.
Individually not especially fast, aggregate fast.
> Their claim to fame is to be able to > communicate through shared memory as if the other CPUs were not there in the > good way.
Not just shared memory, *far* more interesting than that. Up to 8 cores in a "tile" share memory. Comms between tiles is via an interconnection network Comms with i/o is via the same interconnection network. At the program level there is *no* difference between comms via shared memory and comms via interconnection network. Nor is there any difference between comms with a i/o and comms with other cores. All comms is via channels. That's one thing that makes the hardware+software environment unique.
> Otherwise they are conventional processors, programmed in > conventional ways.
No. You are missing the key differentiating points... Conventional processors and programming treats multicore programming as an advanced add on library - explicitly so in the case of C. And a right old mess that is. xC+xCORE *start* by presuming multicore systems, and use a set of harmonious concepts to make multicore programming relatively easy and predictable.
> The emphasis here is for the CPU to be nearly invisible as a CPU and much > more like a function block.
Why bother? What would be the *benefit*? Yes, you can use a screw instead of a nail, but that doesn't mean there is a benefit. Unless, of course, you can't use a hammer.
> You just have to "configure" the operation by > writing a bit of code. That's why 'C' is not desirable, it would be too > cumbersome for small code blocks.
On Tuesday, March 19, 2019 at 6:26:37 AM UTC-4, David Brown wrote:
> On 19/03/2019 09:32, gnuarm.deletethisbit@gmail.com wrote: > > On Tuesday, March 19, 2019 at 4:15:47 AM UTC-4, David Brown wrote: > >> On 19/03/2019 01:13, gnuarm.deletethisbit@gmail.com wrote: > >>> Most of us have implemented small processors for logic > >>> operations that don't need to happen at high speed. Simple CPUs > >>> can be built into an FPGA using a very small footprint much like > >>> the ALU blocks. There are stack based processors that are very > >>> small, smaller than even a few kB of memory. > >>> > >>> If they were easily programmable in something other than C would > >>> anyone be interested? Or is a C compiler mandatory even for > >>> processors running very small programs? > >>> > >>> I am picturing this not terribly unlike the sequencer I used > >>> many years ago on an I/O board for an array processor which had > >>> it's own assembler. It was very simple and easy to use, but very > >>> much not a high level language. This would have a language that > >>> was high level, just not C rather something extensible and simple > >>> to use and potentially interactive. > >>> > >>> Rick C. > >>> > >> > >> If it is going to appeal to software developers, you need C. And > >> it has to be reasonable, standard C, even if it is for small > >> devices - programmers are fed up with the pains needed for special > >> device-specific C on 8051, AVR, PIC, etc. That does not > >> necessarily mean it has to be fast, but it should work with > >> standard language. Having 16-bit size rather than 8-bit size makes > >> a huge difference to how programmers feel about the device - aim > >> for something like the msp430. > >> > >> You might, however, want to look at extensions for CSP-style > >> communication between cpus - something like XMOS XC. > >> > >> If it is to appeal to hardware (FPGA) developers, C might not be > >> as essential. Some other kind of high level language, perhaps > >> centred around state machines, might work. > >> > >> But when I see "extensible, simple to use and potentially > >> interactive", I fear someone is thinking of Forth. People who are > >> very used to Forth find it a great language - but you need to > >> understand that /nobody/ wants to learn it. Most programmers would > >> rather work in assembler than Forth. You can argue that this > >> attitude is irrational, and that Forth is not harder than other > >> languages - you might be right. But that doesn't change matters. > > > > Certainly this would be like Forth, but the reality is I'm thinking > > of a Forth like CPU because they can be designed so simply. > > I appreciate that. > > I can only tell you how /I/ would feel here, and let you use that for > what you think it is worth. I don't claim to speak for all software > developers, but unless other people are giving you feedback too, then > this is the best you've got :-) Remember, I am not trying to argue > about the pros and cons of different designs or languages, or challenge > you to persuade me of anything - I'm just showing you how software > developers might react to your design ideas.
That alone is a misunderstanding of what I am suggesting. I see no reason to involve "programmers". I don't think any FPGA designer would have any trouble using these processors and "programmers" are not required. Heck, the last company I worked for designed FPGAs in the software department, so everyone writing HDL for FPGAs was a "programmer" so maybe the distinction is less that I realize.
> > The F18A stack processor designed by Charles Moore is used in the > > GA144 chip. There are 144 of them with unusual interconnections that > > allow the CPU to halt waiting for communications, saving power. The > > CPU is so small that it could be included in an FPGA as what would be > > equivalent to a logic element. > > Yes, but look how popular the chip is - it is barely a blip in the > landscape. There is no doubt that this is a technologically fascinating > device.
That's not the issue, I'm not proposing anyone use a GA144.
> However, it is very difficult to program such chips - almost no > one is experienced with such multi-cpu arrangements, and the design > requires a completely different way of thinking from existing software > design.
Again, that's not what I am proposing. They have hundreds of multipliers and DSP blocks in FPGAs with no one worrying about how they will tie together. These CPUs would be similar.
> Add to that a language that works backwards, and a syntax that > looks like the cat walked across the keyboard, and you have something > that has programmers running away.
Now you are interjecting your own thoughts. I never suggested that cats be used to program these CPUs.
> My experience with Forth is small and outdated, but not non-existent.
Too bad this isn't about Forth.
> I've worked with dozens of programming languages over the years - I've > studied CSP, programmed in Occam, functional programming languages, lots > of assemblies, a small amount of CPLD/FPGA work in various languages, > and many other kinds of coding.
There are many areas where a "little" knowledge is a dangerous thing. I think programming languages and especially FPGA design are among those areas.
> (Most of my work for the past years has > been C, C++ and Python.) I'm not afraid of learning new things. But > when I looked at some of the examples for the GA144, three things struck > me. One is that it was amazing how much they got on the device. > Another is to wonder about the limitations you get from the this sort of > architecture. (That is a big turn-off with the XMOS. It's > fantastically easy to make nice software-based peripherals using > hardware threads. And fantastically easy to run out of hardware threads > before you've made the basic peripherals you get in a $0.50 > microcontroller.) And the third thing that comes across is how totally > and utterly incomprehensible the software design and the programming > examples are. The GA144 is squarely in the category of technology that > is cool, impressive, and useless in the real world where developers have > to do a job, not play with toys.
I see why you started your comments with the big caveat. You seem to have a bone to pick with Forth and the GA144, neither of which are what I am talking about. You've gotten ahead of yourself.
> Sure, it would be possible to learn this. But there is no way I could > justify the investment in time and effort that would entail. > > And there is no way I would want to go to a language with less safety, > poorer typing, weaker tools, harder testing, more limited static > checking than the development tools I can use now with C and C++.
Yes, well good thing you would never be the person who wrote any code for this. No "programmers" allowed, only FPGA designers... and no amateurs allowed either. ;)
> > In the same way that the other functional logic elements like the > > block RAMs and DSP blocks are used for custom functionality which > > requires the designer to program by whatever means is devised, these > > tiny CPUs would not need a high level language like C. The code in > > them would be small enough to be considered "logic" and developed at > > the assembly level. > > The modern way to use the DSP blocks on FPGA's is either with ready-made > logic blocks, code generator tools like Matlab, or C to hardware > converters. They are not configured manually at a low level. Even if > when they are generated directly from VHDL or Verilog, the developer > writes "x = y * z + w" with the required number of bits in each element, > and the tools turn that into whatever DSP blocks are needed.
I guess I'm not modern then. I use VHDL and like it... Yes, I actually said I like VHDL. The HDL so many love to hate. I see no reason why these devices couldn't be programmed using VHDL, but it would be harder to debug. But then I expect you are the JTAG sort as well. That's not really what I'm proposing and I think you are overstating the case for "press the magic button" FPGA design.
> The key thing you have to think about here, is who would use these tiny > cpus, and why. Is there a reason for using a few of them scattered > around the device, programmed in assembly (or worse, Forth) ? Why would > the developer want to do that instead of just adding another software > thread to the embedded ARM processor, where development is so much more > familiar?
Because and ARM can't keep up with the logic. An ARM is very hard to interface usefully as a *part* of the logic. That's the entire point of the F18A CPUs. Each one is small enough to be dedicated to the task at hand (like in the XMOS) while running at a very high speed, enough to keep up with 100 MHz logic.
> Why would the hardware designer want them, instead of writing > a little state machine in the language of their choice (VHDL, Verilog, > System C, MyHDL, C-to-HDL compiler, whatever)?
That depends on what the state machine is doing. State machines are all ad-hoc and produce their own little microcosm needing support. You talk about the issues of programming CPUs. State machines are like designing your own CPU but without any arithmetic. Add arithmetic, data movements, etc. and you have now officially designed your own CPU when you could have just used an existing CPU. That's fine, if it is what you intended. Many FPGA users add their own soft core CPU to an FPGA. Having these cores would make that unnecessary. The question is why would an FPGA designer want to roll their own FSM when they can use the one in the CPU?
> I am missing the compelling use-cases here. Yes, it is possible to make > small and simple cpu units with a stack machine architecture, and fit > lots of them in an FPGA. But I don't see /why/ I would want them - > certainly not why they are better than alternatives, and worth the > learning curve.
Yes, but you aren't really an FPGA designer, no? I can see your concerns as a Python programmer.
> > People have mindsets about things and I believe this is one of them. > > Exactly. And you have a choice here - work with people with the > mindsets they have, or give /seriously/ compelling reasons why they > should invest in the time and effort needed to change those mindsets. > Wishful thinking is not the answer.
You are a programmer, not an FPGA designer. I won't try to convince you of the value of many small CPUs in an FPGA.
> > The GA144 is not so easy to program because people want to use it for > > the sort of large programs they write for other fast CPUs. > > It is not easy to program because it is not easy to program. > Multi-threaded or multi-process software is harder than single-threaded > code.
I can see that you don't understand the GA144. If you are working on a design that suits the GA144 (not that there are tons of those) it's not a bad device. If I were working on a hearing aid app, I would give serious consideration to this chip. It is well suited to many types of signal processing. I once did a first pass of an oscilloscope design for it (strictly low bandwidth). There are a number of apps that suit the GA144, but otherwise, yes, it would be a bear to adapt to other apps. But this is not about the GA144. My point was to illustrate that you don't need to be locked into the mindset of utilizing every last instruction cycle. Rather these CPUs have cycles to spare, so feel free to waste them. That's what FPGAs are all about, wasting resources. FPGAs have some small percentage of the die used for logic and most of the rest used for routing, most of which is not used. Much of the logic is also not used. Waste, waste, waste! So a little CPU that is only used at 1% of it's MIPS capacity is not wasteful if it saves a bunch of logic elsewhere in the FPGA. That's the point of discussing the GA144.
> The tools and language here for the GA144 - based on Forth - are two > generations behind the times. They are totally unfamiliar to almost any > current software developer.
And they are not relevant to this discussion.
> And yes, there is the question of what kind of software you would want > to write. People either want to write small, dedicated software - in > which case they want a language that is familiar and they want to keep > the code simple. Or they want bigger projects, reusing existing code - > in which case they /need/ a language that is standard.
Who is "they" again? I'm not picturing this being programmed by the programming department. To do so would mean two people would need to do a job for one person.
> Look at the GA144 site. Apart from the immediate fact that it is pretty > much a dead site, and clearly a company that has failed to take off, > look at the examples. A 10 Mb software Ethernet MAC ? Who wants /that/ > in software? A PS/2 keyboard controller? An MD5 hash generator running > in 16 cpus? You can download a 100-line md5 function for C and run it > on any processor.
Wow! You are really fixated on the GA144.
> > In an > > FPGA a very fast processor can be part of the logic rather than an > > uber-controller riding herd over the whole chip. But this would > > require designers to change their thinking of how to use CPUs. The > > F18A runs at 700 MIPS peak rate in a 180 nm process. Instead of one > > or two in the FPGA like the ARMs in other FPGAs, there would be > > hundreds, each one running at some GHz. > > > It has long been established that lots of tiny processors running really > fast are far less use than a few big processors running really fast. > 700 MIPS sounds marvellous, until you realise how simple and limited > each of these instructions is.
Again, you are pursuing a MIPS argument. It's not about using all the MIPS. The MIPS are there to allow the CPU to do it's job in a short time to keep up with logic. All the MIPS don't need to be used. "A few big processors" would suck in being embedded in the logic. The just can't switch around fast enough. You must be thinking of many SLOW processors compared to one fast processor. Or maybe you are thinking of doing work which is suited for a single processor like in a PC. Yeah, you can use one of the ARMs in the Zynq to run Linux and then use the other to interface to "real time" hardware. But this is a far cry from what I am describing.
> At each step here, you have been entirely right about what can be done. > Yes, you can make small and simple processors - so small and simple > that you can have lots of them at high clock speeds. > > And you have been right that using these would need a change in mindset, > programming language, and development practice to use them. > > But nowhere do I see any good reason /why/. No good use-cases. If you > want to turn the software and FPGA development world on its head, you > need an extraordinarily good case for it.
"On it's head" is a powerful statement. I'm just talking here. I'm not writing a business plan. I'm asking open minded FPGA designers what they would use these CPUs for. Rick C.
On Tuesday, March 19, 2019 at 1:14:56 PM UTC+2, gnuarm.del...@gmail.com wrote:
> On Tuesday, March 19, 2019 at 6:56:42 AM UTC-4, already...@yahoo.com wrote: > > On Tuesday, March 19, 2019 at 2:13:38 AM UTC+2, gnuarm.del...@gmail.com wrote: > > > Most of us have implemented small processors for logic operations that don't need to happen at high speed. Simple CPUs can be built into an FPGA using a very small footprint much like the ALU blocks. There are stack based processors that are very small, smaller than even a few kB of memory. > > > > > > If they were easily programmable in something other than C would anyone be interested? Or is a C compiler mandatory even for processors running very small programs? > > > > > > I am picturing this not terribly unlike the sequencer I used many years ago on an I/O board for an array processor which had it's own assembler. It was very simple and easy to use, but very much not a high level language. This would have a language that was high level, just not C rather something extensible and simple to use and potentially interactive. > > > > > > Rick C. > > > > It is clear that you have Forth in mind. > > It is less clear why you don't say it straight. > > Because this is not about Forth. It is about very small processors. I would not really bother with Forth as the programming language specifically because that would be a layer on top of what you are doing and to be efficient it would need to be programmed in assembly. > > That said, the assembly language for a stack processor is much like Forth since Forth uses a virtual stack machine as it's programming model. So yes, it would be similar to Forth. I most likely would use Forth to write programs for these, but that is just my preference since that is the language I program in. > > But the key here is to program the CPUs in their stack oriented assembly. That's not really Forth even if it is "Forth like". > > Is that what you wanted to know? > > Rick C.
I wanted to understand if there is PR element involved. Like, you afraid that if you say "Forth" then most potential readers immediately stop reading. I am not a PR consultant, but I was then I'd suggest to remove word "interactive" from description of the language that you have in mind. BTW, I agree that coding in HDLs suck for many sorts of sequential tasks. And I agree that having CPU that is *not* narrow in its data paths and optionally not narrow in external addresses, but small/configurable in everything else could be a good way to "offload" such parts of design away from HDL. I am much less sure that stack processor is a good choice for such tasks.
On Tuesday, March 19, 2019 at 7:46:44 AM UTC-4, Tom Gardner wrote:
> On 19/03/19 11:00, gnuarm.deletethisbit@gmail.com wrote: > > On Tuesday, March 19, 2019 at 6:21:24 AM UTC-4, Tom Gardner wrote: > >> On 19/03/19 00:13, gnuarm.deletethisbit@gmail.com wrote: > >>> Most of us have implemented small processors for logic operations that > >>> don't need to happen at high speed. Simple CPUs can be built into an > >>> FPGA using a very small footprint much like the ALU blocks. There are > >>> stack based processors that are very small, smaller than even a few kB of > >>> memory. > >>> > >>> If they were easily programmable in something other than C would anyone > >>> be interested? Or is a C compiler mandatory even for processors running > >>> very small programs? > >>> > >>> I am picturing this not terribly unlike the sequencer I used many years > >>> ago on an I/O board for an array processor which had it's own assembler. > >>> It was very simple and easy to use, but very much not a high level > >>> language. This would have a language that was high level, just not C > >>> rather something extensible and simple to use and potentially > >>> interactive. > >> Who cares about yet another processor programmed in the same old language. > >> It would not have a *U*SP. In fact it would be "back to the 80s" :) > > > > Sorry, I don't get what any of this means. > > > > > >> However, if you want to make it interesting enough to pass the elevator > >> test, ensure it can do things that existing systems find difficult. > >> > >> You should have a look at how the XMOS hardware and software complement > >> each other, so that the combination allows hard real time operation > >> programming in multicore systems. (Hard means guaranteed-by-design > >> latencies between successive i/o activities) > > > > Yeah I think the XMOS model is way more complex than what I am describing. > > The XMOS processors are actually very complex and use lots of gates. They > > also don't run all that fast. > > Individually not especially fast, aggregate fast. > > > > Their claim to fame is to be able to > > communicate through shared memory as if the other CPUs were not there in the > > good way. > > Not just shared memory, *far* more interesting than that. > > Up to 8 cores in a "tile" share memory.
Yes, I said that.
> Comms between tiles is via an interconnection network
Implementation details I don't really care about.
> Comms with i/o is via the same interconnection network.
Implementation details I don't really care about.
> At the program level there is *no* difference between comms > via shared memory and comms via interconnection network. > Nor is there any difference between comms with a i/o and > comms with other cores.
Implementation details I don't really care about.
> All comms is via channels. That's one thing that makes > the hardware+software environment unique.
Implementation details I don't really care about and it has no relevance to the topic of embedding in an FPGA.
> > Otherwise they are conventional processors, programmed in > > conventional ways. > > No. You are missing the key differentiating points... > > Conventional processors and programming treats multicore > programming as an advanced add on library - explicitly > so in the case of C. And a right old mess that is.
Irrelevant in this context since this would never be used in the same way of scattering many CPUs around an FPGA die.
> xC+xCORE *start* by presuming multicore systems, and > use a set of harmonious concepts to make multicore > programming relatively easy and predictable.
TL;DR
> > The emphasis here is for the CPU to be nearly invisible as a CPU and much > > more like a function block. > > Why bother? What would be the *benefit*?
Isn't that obvious? It could do the work of a lot of FPGA logic in the same way that MCUs are used rather than FPGAs. It's the same reason why multipliers, DSP blocks and even memory is included in FPGAs, because they are much more efficient than using the fabric logic.
> Yes, you can use a screw instead of a nail, but > that doesn't mean there is a benefit. Unless, of > course, you can't use a hammer.
I guess no one uses screws, eh? Rick C.
On Tuesday, March 19, 2019 at 7:53:48 AM UTC-4, already...@yahoo.com wrote:
> On Tuesday, March 19, 2019 at 1:14:56 PM UTC+2, gnuarm.del...@gmail.com wrote: > > On Tuesday, March 19, 2019 at 6:56:42 AM UTC-4, already...@yahoo.com wrote: > > > On Tuesday, March 19, 2019 at 2:13:38 AM UTC+2, gnuarm.del...@gmail.com wrote: > > > > Most of us have implemented small processors for logic operations that don't need to happen at high speed. Simple CPUs can be built into an FPGA using a very small footprint much like the ALU blocks. There are stack based processors that are very small, smaller than even a few kB of memory. > > > > > > > > If they were easily programmable in something other than C would anyone be interested? Or is a C compiler mandatory even for processors running very small programs? > > > > > > > > I am picturing this not terribly unlike the sequencer I used many years ago on an I/O board for an array processor which had it's own assembler. It was very simple and easy to use, but very much not a high level language. This would have a language that was high level, just not C rather something extensible and simple to use and potentially interactive. > > > > > > > > Rick C. > > > > > > It is clear that you have Forth in mind. > > > It is less clear why you don't say it straight. > > > > Because this is not about Forth. It is about very small processors. I would not really bother with Forth as the programming language specifically because that would be a layer on top of what you are doing and to be efficient it would need to be programmed in assembly. > > > > That said, the assembly language for a stack processor is much like Forth since Forth uses a virtual stack machine as it's programming model. So yes, it would be similar to Forth. I most likely would use Forth to write programs for these, but that is just my preference since that is the language I program in. > > > > But the key here is to program the CPUs in their stack oriented assembly. That's not really Forth even if it is "Forth like". > > > > Is that what you wanted to know? > > > > Rick C. > > I wanted to understand if there is PR element involved. Like, you afraid that if you say "Forth" then most potential readers immediately stop reading.
No, this is not about Forth.
> I am not a PR consultant, but I was then I'd suggest to remove word "interactive" from description of the language that you have in mind.
That is one of the advantages of this idea. Why is "interactive" a bad thing?
> BTW, I agree that coding in HDLs suck for many sorts of sequential tasks. > And I agree that having CPU that is *not* narrow in its data paths and optionally not narrow in external addresses, but small/configurable in everything else could be a good way to "offload" such parts of design away from HDL. > I am much less sure that stack processor is a good choice for such tasks.
Stack processors can be made very simply. That is the main reason to suggest them. There are simple register processors, but I find them more difficult to program. I do use Forth for programming this sort of task. I find it easy to develop in. I understand that many are so used to programming in more complicated languages... or I should say, using more complicated tools, so they aren't comfortable working closer to the hardware. But when the task you are programming up is so simple, then you don't need the training wheels. But that is not what I am talking about here. This is about a small processor that can be made very efficiently on the FPGA die. Would a small, hard core CPU likely run at GIPS in an FPGA? Rick C.
On 19/03/19 11:58, gnuarm.deletethisbit@gmail.com wrote:
> On Tuesday, March 19, 2019 at 7:46:44 AM UTC-4, Tom Gardner wrote: >> On 19/03/19 11:00, gnuarm.deletethisbit@gmail.com wrote: >>> On Tuesday, March 19, 2019 at 6:21:24 AM UTC-4, Tom Gardner wrote: >>>> On 19/03/19 00:13, gnuarm.deletethisbit@gmail.com wrote: >>>>> Most of us have implemented small processors for logic operations that >>>>> don't need to happen at high speed. Simple CPUs can be built into an >>>>> FPGA using a very small footprint much like the ALU blocks. There are >>>>> stack based processors that are very small, smaller than even a few kB of >>>>> memory. >>>>> >>>>> If they were easily programmable in something other than C would anyone >>>>> be interested? Or is a C compiler mandatory even for processors running >>>>> very small programs? >>>>> >>>>> I am picturing this not terribly unlike the sequencer I used many years >>>>> ago on an I/O board for an array processor which had it's own assembler. >>>>> It was very simple and easy to use, but very much not a high level >>>>> language. This would have a language that was high level, just not C >>>>> rather something extensible and simple to use and potentially >>>>> interactive. >>>> Who cares about yet another processor programmed in the same old language. >>>> It would not have a *U*SP. In fact it would be "back to the 80s" :) >>> >>> Sorry, I don't get what any of this means. >>> >>> >>>> However, if you want to make it interesting enough to pass the elevator >>>> test, ensure it can do things that existing systems find difficult. >>>> >>>> You should have a look at how the XMOS hardware and software complement >>>> each other, so that the combination allows hard real time operation >>>> programming in multicore systems. (Hard means guaranteed-by-design >>>> latencies between successive i/o activities) >>> >>> Yeah I think the XMOS model is way more complex than what I am describing. >>> The XMOS processors are actually very complex and use lots of gates. They >>> also don't run all that fast. >> >> Individually not especially fast, aggregate fast. >> >> >>> Their claim to fame is to be able to >>> communicate through shared memory as if the other CPUs were not there in the >>> good way. >> >> Not just shared memory, *far* more interesting than that. >> >> Up to 8 cores in a "tile" share memory. > > Yes, I said that. > >> Comms between tiles is via an interconnection network > > Implementation details I don't really care about. > > >> Comms with i/o is via the same interconnection network. > > Implementation details I don't really care about. > > >> At the program level there is *no* difference between comms >> via shared memory and comms via interconnection network. >> Nor is there any difference between comms with a i/o and >> comms with other cores. > > Implementation details I don't really care about. > > >> All comms is via channels. That's one thing that makes >> the hardware+software environment unique. > > Implementation details I don't really care about and it has no relevance to the topic of embedding in an FPGA. > > >>> Otherwise they are conventional processors, programmed in >>> conventional ways. >> >> No. You are missing the key differentiating points... >> >> Conventional processors and programming treats multicore >> programming as an advanced add on library - explicitly >> so in the case of C. And a right old mess that is. > > Irrelevant in this context since this would never be used in the same way of scattering many CPUs around an FPGA die. > > >> xC+xCORE *start* by presuming multicore systems, and >> use a set of harmonious concepts to make multicore >> programming relatively easy and predictable. > > TL;DR > > >>> The emphasis here is for the CPU to be nearly invisible as a CPU and much >>> more like a function block. >> >> Why bother? What would be the *benefit*? > > Isn't that obvious? It could do the work of a lot of FPGA logic in the same way that MCUs are used rather than FPGAs. It's the same reason why multipliers, DSP blocks and even memory is included in FPGAs, because they are much more efficient than using the fabric logic. > > >> Yes, you can use a screw instead of a nail, but >> that doesn't mean there is a benefit. Unless, of >> course, you can't use a hammer. > > I guess no one uses screws, eh?
It is clear that you want other people to validate your ideas, but you have no interest in - understanding what is available - understanding in what way your (vague) concepts would enable designers to do their job better than using existing technology - explaining your concept's USP The first of those is a cardinal sin in my book, since you are likely to waste your time (don't care) reinventing a square wheel, and waste other people's time (do care) figuring out that you aren't enabling anything new. Good luck.
Tom Gardner <spamjunk@blueyonder.co.uk> wrote:
> Understand XMOS's xCORE processors and xC language, see how > they complement and support each other. I found the net result > stunningly easy to get working first time, without having to > continually read obscure errata!
I can see the merits of the XMOS approach. But I'm unclear how this relates to the OP's proposal, which (I think) is having tiny CPUs as hard logic blocks on an FPGA, like DSP blocks. I completely understand the problem of running out of hardware threads, so a means of 'just add another one' is handy. But the issue is how to combine such things with other synthesised logic. The XMOS approach is fine when the hardware is uniform and the software sits on top, but when the hardware is synthesised and the 'CPUs' sit as pieces in a fabric containing random logic (as I think the OP is suggesting) it becomes a lot harder to reason about what the system is doing and what the software running on such heterogeneous cores should look like. Only the FPGA tools have a full view of what the system looks like, and it seems stretching them to have them also generate software to run on these cores. We are not talking about a multi- or many- core chip here, with the CPUs as the primary element of compute, but the CPUs scattered around as 'state machine elements' justs ups the complexity and makes it harder to understand compared with the same thing synthesised out of flip-flops. I would be interested to know what applications might use heterogenous many-cores and what performance is achievable. Theo
On 19/03/2019 12:52, gnuarm.deletethisbit@gmail.com wrote:
> On Tuesday, March 19, 2019 at 6:26:37 AM UTC-4, David Brown wrote: >> On 19/03/2019 09:32, gnuarm.deletethisbit@gmail.com wrote: >>> On Tuesday, March 19, 2019 at 4:15:47 AM UTC-4, David Brown >>> wrote: >>>> On 19/03/2019 01:13, gnuarm.deletethisbit@gmail.com wrote: >>>>> Most of us have implemented small processors for logic >>>>> operations that don't need to happen at high speed. Simple >>>>> CPUs can be built into an FPGA using a very small footprint >>>>> much like the ALU blocks. There are stack based processors >>>>> that are very small, smaller than even a few kB of memory. >>>>> >>>>> If they were easily programmable in something other than C >>>>> would anyone be interested? Or is a C compiler mandatory >>>>> even for processors running very small programs? >>>>> >>>>> I am picturing this not terribly unlike the sequencer I used >>>>> many years ago on an I/O board for an array processor which >>>>> had it's own assembler. It was very simple and easy to use, >>>>> but very much not a high level language. This would have a >>>>> language that was high level, just not C rather something >>>>> extensible and simple to use and potentially interactive. >>>>> >>>>> Rick C. >>>>> >>>> >>>> If it is going to appeal to software developers, you need C. >>>> And it has to be reasonable, standard C, even if it is for >>>> small devices - programmers are fed up with the pains needed >>>> for special device-specific C on 8051, AVR, PIC, etc. That >>>> does not necessarily mean it has to be fast, but it should work >>>> with standard language. Having 16-bit size rather than 8-bit >>>> size makes a huge difference to how programmers feel about the >>>> device - aim for something like the msp430. >>>> >>>> You might, however, want to look at extensions for CSP-style >>>> communication between cpus - something like XMOS XC. >>>> >>>> If it is to appeal to hardware (FPGA) developers, C might not >>>> be as essential. Some other kind of high level language, >>>> perhaps centred around state machines, might work. >>>> >>>> But when I see "extensible, simple to use and potentially >>>> interactive", I fear someone is thinking of Forth. People who >>>> are very used to Forth find it a great language - but you need >>>> to understand that /nobody/ wants to learn it. Most >>>> programmers would rather work in assembler than Forth. You can >>>> argue that this attitude is irrational, and that Forth is not >>>> harder than other languages - you might be right. But that >>>> doesn't change matters. >>> >>> Certainly this would be like Forth, but the reality is I'm >>> thinking of a Forth like CPU because they can be designed so >>> simply. >> >> I appreciate that. >> >> I can only tell you how /I/ would feel here, and let you use that >> for what you think it is worth. I don't claim to speak for all >> software developers, but unless other people are giving you >> feedback too, then this is the best you've got :-) Remember, I am >> not trying to argue about the pros and cons of different designs or >> languages, or challenge you to persuade me of anything - I'm just >> showing you how software developers might react to your design >> ideas. > > That alone is a misunderstanding of what I am suggesting. I see no > reason to involve "programmers". I don't think any FPGA designer > would have any trouble using these processors and "programmers" are > not required. Heck, the last company I worked for designed FPGAs in > the software department, so everyone writing HDL for FPGAs was a > "programmer" so maybe the distinction is less that I realize. >
FPGA designers already have at least one foot in the "programmer" camp. An increasing proportion (AFAIUI) of FPGA design is done from a software viewpoint, not a hardware viewpoint. People use C-to-HDL, Matlab, high-level languages (Scala, Python, etc.) for their FPGA designs. Thinking in terms of wires, registers, logic elements, etc., does not scale - the "hardware" part is often dominated by choosing and connecting the right modules. (Yes, there are other parts too, such as clock design, IO, etc.) I am not convinced that there really is a significant group of hardware designers who want to program small, limited cpus using low-level languages, but who don't want to be "mere programmers" working in C or other common programming languages. Again, I am failing to see the use-cases you have in mind. It's hard to guess what you might be talking about if you don't say.
> >>> The F18A stack processor designed by Charles Moore is used in >>> the GA144 chip. There are 144 of them with unusual >>> interconnections that allow the CPU to halt waiting for >>> communications, saving power. The CPU is so small that it could >>> be included in an FPGA as what would be equivalent to a logic >>> element. >> >> Yes, but look how popular the chip is - it is barely a blip in the >> landscape. There is no doubt that this is a technologically >> fascinating device. > > That's not the issue, I'm not proposing anyone use a GA144. >
Fair enough. It was an example you gave, so I ran with it.
> >> However, it is very difficult to program such chips - almost no one >> is experienced with such multi-cpu arrangements, and the design >> requires a completely different way of thinking from existing >> software design. > > Again, that's not what I am proposing. They have hundreds of > multipliers and DSP blocks in FPGAs with no one worrying about how > they will tie together. These CPUs would be similar. >
You don't need to program the multipliers or DSP blocks. Now, if you can find a way to avoid any programming of these tiny cpu cores, you might be on to something. When the VHDL or Verilog synthesis tool meets a calculation with a multiply, it automatically puts in the DSP blocks that are needed. When it meets a large array, it automatically infers ram blocks. If you can ensure that when it meets some complex sequential logic, or a state machine, that it infers a tiny cpu and the program for it, /then/ you will have something immediately useful.
> >> Add to that a language that works backwards, and a syntax that >> looks like the cat walked across the keyboard, and you have >> something that has programmers running away. > > Now you are interjecting your own thoughts. I never suggested that > cats be used to program these CPUs. >
I'm telling you how things look.
> >> My experience with Forth is small and outdated, but not >> non-existent. > > Too bad this isn't about Forth.
You say that, yet it seems to be entirely about Forth. Or at least, about programming cpus in assembly where the stack-based design means the assembly language is practically Forth. Of course, even though these devices might have a Forth-like assembly, it would be possible to have other languages on top. Do you have any existing ones in mind?
> > >> I've worked with dozens of programming languages over the years - >> I've studied CSP, programmed in Occam, functional programming >> languages, lots of assemblies, a small amount of CPLD/FPGA work in >> various languages, and many other kinds of coding. > > There are many areas where a "little" knowledge is a dangerous thing. > I think programming languages and especially FPGA design are among > those areas. >
And there are many areas where a little knowledge is a useful thing - programming languages and FPGA design are amongst them. I am aware of the limitations of my knowledge - but the breadth is a useful thing here.
> >> (Most of my work for the past years has been C, C++ and Python.) >> I'm not afraid of learning new things. But when I looked at some >> of the examples for the GA144, three things struck me. One is that >> it was amazing how much they got on the device. Another is to >> wonder about the limitations you get from the this sort of >> architecture. (That is a big turn-off with the XMOS. It's >> fantastically easy to make nice software-based peripherals using >> hardware threads. And fantastically easy to run out of hardware >> threads before you've made the basic peripherals you get in a >> $0.50 microcontroller.) And the third thing that comes across is >> how totally and utterly incomprehensible the software design and >> the programming examples are. The GA144 is squarely in the >> category of technology that is cool, impressive, and useless in the >> real world where developers have to do a job, not play with toys. > > I see why you started your comments with the big caveat. You seem to > have a bone to pick with Forth and the GA144, neither of which are > what I am talking about. You've gotten ahead of yourself. >
To sum up this conversation so far: Rick: What do people think about tiny processors in an FPGA? Will programmers like it even if it does not support C? Opinions, please. David: Programmers will want C, possibly with extensions. They won't want Forth. Rick: Look at the GA144, and how great it is, programmed in Forth. The programming world is bad because people are stuck in the wrong mindset of using existing major programming languages and existing major programming platforms. They should all change to this kind of chip because it can run at 700 MIPS with little power. David: I can only tell you my opinion as a software developer. The GA144 is technically interesting, but a total failure in the marketplace. No one wants to use Forth. The cpus may have high clock speeds, but do almost nothing in each cycle. If you want people to use tiny cpus, you have to have a good reason and good use-cases. Rick: If I want your opinion, I'll insult you for it. You are clearly wrong. This is nothing like the GA144 cpus - I mentioned them to confuse people. They won't be programmed in Forth - they will be programmed in an assembly that looks almost exactly like Forth. You should be basing your answers on reading my mind, not my posts. What is it you actually want here? Posts that confirm that you are on the right track, and you are poised to change the FPGA world? I am giving you /my/ opinions, based on /my/ experience and /my/ understanding of how programmers would likely want to work - including programmers who happen to do FPGA work. If those opinions are of interest to you, then great. If you want a fight, or a sycophant, then let me know so I can bow out of the thread. So let's get this straight. I don't have any "bones to pick" with the GA144, Forth, small cpus, or anything else. I don't have any biases against them. I have facts, and I have opinions based on experience. If your opinions and experiences are different, that's okay - but don't tell me I am ignorant, or have dangerously little knowledge, or that I have bones to pick.
> >> Sure, it would be possible to learn this. But there is no way I >> could justify the investment in time and effort that would entail. >> >> And there is no way I would want to go to a language with less >> safety, poorer typing, weaker tools, harder testing, more limited >> static checking than the development tools I can use now with C and >> C++. > > Yes, well good thing you would never be the person who wrote any code > for this. No "programmers" allowed, only FPGA designers... and no > amateurs allowed either. ;)
Feel free to rule out every other possible user too - especially those that are interested in code quality. There is a reason why software developers want good tools and good languages - and it's not laziness or incompetence.
> > >>> In the same way that the other functional logic elements like >>> the block RAMs and DSP blocks are used for custom functionality >>> which requires the designer to program by whatever means is >>> devised, these tiny CPUs would not need a high level language >>> like C. The code in them would be small enough to be considered >>> "logic" and developed at the assembly level. >> >> The modern way to use the DSP blocks on FPGA's is either with >> ready-made logic blocks, code generator tools like Matlab, or C to >> hardware converters. They are not configured manually at a low >> level. Even if when they are generated directly from VHDL or >> Verilog, the developer writes "x = y * z + w" with the required >> number of bits in each element, and the tools turn that into >> whatever DSP blocks are needed. > > I guess I'm not modern then. I use VHDL and like it... Yes, I > actually said I like VHDL. The HDL so many love to hate. >
Sure, there is nothing wrong with that. But if you want to make something that appeals to other people, you need to be looking for "better than the modern choices" - not "worse than the old choices".
> I see no reason why these devices couldn't be programmed using VHDL, > but it would be harder to debug. But then I expect you are the JTAG > sort as well. That's not really what I'm proposing and I think you > are overstating the case for "press the magic button" FPGA design. >
I use JTAG debugging when that is the appropriate choice. I use other types of debugging at other times, or simulations, testing on other platforms, etc. Dismissing JTAG debugging as a tool is just as bad as relying upon it for everything. When you are thinking of a new way of doing design here, then debugging and testing should be of prime concern. I don't think doing it all in VHDL will cut it. I can agree that JTAG debugging is not going to work well for multiple small processors - but you have to think about what /would/ work well, rather than what won't work.
> >> The key thing you have to think about here, is who would use these >> tiny cpus, and why. Is there a reason for using a few of them >> scattered around the device, programmed in assembly (or worse, >> Forth) ? Why would the developer want to do that instead of just >> adding another software thread to the embedded ARM processor, where >> development is so much more familiar? > > Because and ARM can't keep up with the logic. An ARM is very hard to > interface usefully as a *part* of the logic. That's the entire point > of the F18A CPUs. Each one is small enough to be dedicated to the > task at hand (like in the XMOS) while running at a very high speed, > enough to keep up with 100 MHz logic. >
The F18A devices don't keep up with the logic - not when you are doing something more than toggling a pin at high speed. They do so very little each clock cycle. But the big question here - the elephant in the room that you keep ignoring - is what you want these devices to /do/. Why are you trying to make them "keep up with the logic" ? Use hardware to do the things that hardware is good at - fast, predictable timing, wide data, parallel actions. Use software for what software is good at - flexible, sequential, conditional. Combine them appropriately - use software to control the hardware parts, use buffers to avoid the latency variations in the software. Use hardware state machines for the small, simple, fast sequential parts. Where do you see your new cpus being used? Give us some examples.
> >> Why would the hardware designer want them, instead of writing a >> little state machine in the language of their choice (VHDL, >> Verilog, System C, MyHDL, C-to-HDL compiler, whatever)? > > That depends on what the state machine is doing. State machines are > all ad-hoc and produce their own little microcosm needing support. > You talk about the issues of programming CPUs. State machines are > like designing your own CPU but without any arithmetic. Add > arithmetic, data movements, etc. and you have now officially designed > your own CPU when you could have just used an existing CPU. > > That's fine, if it is what you intended. Many FPGA users add their > own soft core CPU to an FPGA. Having these cores would make that > unnecessary.
Equally, having soft core CPUs makes your cores unnecessary. Sure, a real soft core CPU is usually bigger than the cpus you imagine - but they can do so much more. And they can do so /today/, using tools available /today/, that are familiar with programmers /today/. That massive benefit in developer efficiency outweighs the cost in logic cells (if it doesn't, you should not be using FPGA's except to prototype your ASICs).
> > The question is why would an FPGA designer want to roll their own FSM > when they can use the one in the CPU? >
Equally, why should they want a special purpose mini cpu core, when they can write their state machines as they always have done, using pure VHDL or Verilog, or additional state machine design software ?
> >> I am missing the compelling use-cases here. Yes, it is possible to >> make small and simple cpu units with a stack machine architecture, >> and fit lots of them in an FPGA. But I don't see /why/ I would >> want them - certainly not why they are better than alternatives, >> and worth the learning curve. > > Yes, but you aren't really an FPGA designer, no? I can see your > concerns as a Python programmer. > > >>> People have mindsets about things and I believe this is one of >>> them. >> >> Exactly. And you have a choice here - work with people with the >> mindsets they have, or give /seriously/ compelling reasons why >> they should invest in the time and effort needed to change those >> mindsets. Wishful thinking is not the answer. > > You are a programmer, not an FPGA designer. I won't try to convince > you of the value of many small CPUs in an FPGA. >
Pretend I am an FPGA designer, and then try to explain the point of them. As far as I can see, this whole thing is a solution in search of a problem. Convince me otherwise - or at least, convince me that /you/ think otherwise. (And while I would not classify myself as an FPGA designer, I have done a few FPGA designs. I am by no means an expert, but I am familiar with the principles and the technology.)
> >>> The GA144 is not so easy to program because people want to use it >>> for the sort of large programs they write for other fast CPUs. >> >> It is not easy to program because it is not easy to program. >> Multi-threaded or multi-process software is harder than >> single-threaded code. > > I can see that you don't understand the GA144. If you are working on > a design that suits the GA144 (not that there are tons of those) it's > not a bad device. If I were working on a hearing aid app, I would > give serious consideration to this chip. It is well suited to many > types of signal processing. I once did a first pass of an > oscilloscope design for it (strictly low bandwidth). There are a > number of apps that suit the GA144, but otherwise, yes, it would be a > bear to adapt to other apps.
I can see that you didn't understand what I wrote - or perhaps you don't understand programming and software development as much as you think. Let me try again - the GA144 is not easy to program. I didn't say anything about what apps it might be good for - I said it is not easy to program. That is partly because it is a difficult to make designs for such a many-processor system, partly because the language is awkward, and partly because the skill set needed does not match well with skill sets of most current programmers. I am basing this on having read through some of the material on their site, thinking that this is such a cool chip I'd like to find an excuse to use it on a project. But I couldn't find any application where the time, cost and risk could be remotely justified.
> > But this is not about the GA144. My point was to illustrate that you > don't need to be locked into the mindset of utilizing every last > instruction cycle. Rather these CPUs have cycles to spare, so feel > free to waste them.
Agreed. I am happy with that - and I am not locked into a mindset here. I can't see what might have given you that impression.
> That's what FPGAs are all about, wasting > resources. FPGAs have some small percentage of the die used for > logic and most of the rest used for routing, most of which is not > used. Much of the logic is also not used. Waste, waste, waste! So > a little CPU that is only used at 1% of it's MIPS capacity is not > wasteful if it saves a bunch of logic elsewhere in the FPGA.
FPGA development is usually about wasting space - you are using only a small proportion of the die, but using it hard. Software development is usually about wasting time - in most systems, the cpu is only doing something useful for a few percent of the time, but is running hard in that time spot. It is not actually that different in principle.
> > That's the point of discussing the GA144. >
I do understand that most of the cpus on a chip like that are "wasted" - they are doing very little. And that's fine.
> >> The tools and language here for the GA144 - based on Forth - are >> two generations behind the times. They are totally unfamiliar to >> almost any current software developer. > > And they are not relevant to this discussion. > > >> And yes, there is the question of what kind of software you would >> want to write. People either want to write small, dedicated >> software - in which case they want a language that is familiar and >> they want to keep the code simple. Or they want bigger projects, >> reusing existing code - in which case they /need/ a language that >> is standard. > > Who is "they" again? I'm not picturing this being programmed by the > programming department. To do so would mean two people would need to > do a job for one person. > > >> Look at the GA144 site. Apart from the immediate fact that it is >> pretty much a dead site, and clearly a company that has failed to >> take off, look at the examples. A 10 Mb software Ethernet MAC ? >> Who wants /that/ in software? A PS/2 keyboard controller? An MD5 >> hash generator running in 16 cpus? You can download a 100-line md5 >> function for C and run it on any processor. > > Wow! You are really fixated on the GA144. >
Again, /you/ brought it up. You are trying to promote this idea of lots of small, fast cpus on a chip. You repeatedly refuse to give any sort of indication what these might be used for - but you point to the existing GA144, which is a chip with lots of small, fast cpus. Can't you understand why people might think that it is an example of what you might be thinking about? Those examples and application notes are about the only examples I can find of uses for multiple small, fast cpus, since you refuse to suggest any - and they are /pointless/. So, please, tell us what you want to do with your cpus - and why they would be so much better than existing solutions (like bigger cpus, hard cores and soft cores, and ad hoc state machines generated by existing tools). I will happily leave the GA144 behind.
> >>> In an FPGA a very fast processor can be part of the logic rather >>> than an uber-controller riding herd over the whole chip. But >>> this would require designers to change their thinking of how to >>> use CPUs. The F18A runs at 700 MIPS peak rate in a 180 nm >>> process. Instead of one or two in the FPGA like the ARMs in >>> other FPGAs, there would be hundreds, each one running at some >>> GHz. >>> >> It has long been established that lots of tiny processors running >> really fast are far less use than a few big processors running >> really fast. 700 MIPS sounds marvellous, until you realise how >> simple and limited each of these instructions is. > > Again, you are pursuing a MIPS argument. It's not about using all > the MIPS. The MIPS are there to allow the CPU to do it's job in a > short time to keep up with logic. All the MIPS don't need to be > used.
I understand that - but you are missing the point. Even if all the cpu needs to do is take a 32-bit data item from /here/ and send it out /there/, a core like the F18A is lost. A 700 clock does /not/ let you keep up with the logic if you can't do anything useful without lots of clock cycles - then it is better to have a slower clock and real functionality.
> > "A few big processors" would suck in being embedded in the logic. > The just can't switch around fast enough. You must be thinking of > many SLOW processors compared to one fast processor. Or maybe you > are thinking of doing work which is suited for a single processor > like in a PC.
An ARM Cortex M1 at 100 MHz is going to do a great deal more than an F18A-style core at 700 MHz (though I don't expect it to get anything like that as a soft core on an FPGA). The SpinalHDL / VexRiscv RISC-V processor can run at 346 MHz from 481 LUT's on the Artix 7, in its smallest version. Bigger versions have slower clock speeds, but faster overall execution (with more variation in latency - which may not be what you want). And you can program these in a dozen different languages of your choice.
> > Yeah, you can use one of the ARMs in the Zynq to run Linux and then > use the other to interface to "real time" hardware. But this is a > far cry from what I am describing.
Yes, I know that is not what you are describing. (And "big cpu" does not mean "Linux" - you can run a real time OS like FreeRTOS, or pure bare metal.)
> > >> At each step here, you have been entirely right about what can be >> done. Yes, you can make small and simple processors - so small and >> simple that you can have lots of them at high clock speeds. >> >> And you have been right that using these would need a change in >> mindset, programming language, and development practice to use >> them. >> >> But nowhere do I see any good reason /why/. No good use-cases. If >> you want to turn the software and FPGA development world on its >> head, you need an extraordinarily good case for it. > > "On it's head" is a powerful statement. I'm just talking here. I'm > not writing a business plan. I'm asking open minded FPGA designers > what they would use these CPUs for. >
I am trying to be open minded, despite how often you tell me you think I am closed. But I am failing to see an overwhelming case for these sorts of cpus - I think they fall between too many chairs, and they fail to be a better choice than existing solutions. If you can give me use-cases where they are a big benefit, then I will be happy to reconsider - but if you are asking where I think they have a good use, then currently I can't think of an answer.