Design mini cpu?

Started by potxoka3a March 25, 2009
hi

I´m new to VHDL and FPGA. I´m currently doing a design in an FPGA with VHDL, analyzing and changing a few signs of a data bus of 20 signals (transceiver). These signals often change protocol, as the team changes during the design in VHDL I changed 2 times.

To avoid having to always fpga programming, thought if there was any way to change the interpretation of these signals. My PCB has a flash memory to be managed from the FPGA, which currently do not use, but not how. Thought to implement a CPU in the FPGA and program it in flash memory, but know how to do this. Or some sort of an interpreter to read the flash and the second, change the drive and how to interpret the data bus. So only have to update the flash memory can remotely do this :-D. I´m new to this and that is why I ask help, can you guide?. thank you very much.

greetings
Antony



To post a message, send it to: f...
To unsubscribe, send a blank message to: fpga-cpu-unsubscribe
--- In f..., "potxoka3a" wrote:
>
> hi
>
> I´m new to VHDL and FPGA. I´m currently doing a design in an FPGA with VHDL, analyzing and changing a few signs of a data bus of 20 signals (transceiver). These signals often change protocol, as the team changes during the design in VHDL I changed 2 times.
>
> To avoid having to always fpga programming, thought if there was any way to change the interpretation of these signals. My PCB has a flash memory to be managed from the FPGA, which currently do not use, but not how. Thought to implement a CPU in the FPGA and program it in flash memory, but know how to do this. Or some sort of an interpreter to read the flash and the second, change the drive and how to interpret the data bus. So only have to update the flash memory can remotely do this :-D. I´m new to this and that is why I ask help, can you guide?. thank you very much.
>
> greetings
> Antony
>

Hello Anthony,

I had some trouble understanding your question, but let me try:
It sounds like you have a flash memory, an FPGA, a device that the HW team is designing while they are building it, and a HW team that can't make up its mind.

I don't advise adding a CPU unless you need it for something else. It will just make your life more complicated. If you really want a CPU, Xilinx has pico-blaze/micro-blaze, and Altera has Nios. See their websites.

You could implement a simple state machine that reads configuration words from flash, store it in a register, and use the output of that register to configure signal muxes - a programmable one-way crosspoint switch.

L



To post a message, send it to: f...
To unsubscribe, send a blank message to: fpga-cpu-unsubscribe

hi

Thanks for answering ;-).

The problem is that I am a newbie with VHDL and know how to do this. I have a design that has 8 data lines and 6 control, basically according to control signals, data about changes in the data bus and a control signal changes, but in the future may need to change the value data bus, and another is the value of the control signals other than original.Habia thought the mini-cpu to store a binary program (spi external memory) to change this to be more flexible updates.

Not know if I can get VHDL values from memory and checks the data bus and, if true, put other data on the bus, reading the SPI memory. could make a structure and make a determination, but for example if I have scheduled to take the memory of two possible values for tests and three are in the future?. I know how to do it in C, but not know to what extent can be done in VHDL. Thank you very much.

Greetings
Antony

--- In f..., "Luke Teyssier" wrote:
>
> --- In f..., "potxoka3a" wrote:
> >
> > hi
> >
> > I´m new to VHDL and FPGA. I´m currently doing a design in an FPGA with VHDL, analyzing and changing a few signs of a data bus of 20 signals (transceiver). These signals often change protocol, as the team changes during the design in VHDL I changed 2 times.
> >
> > To avoid having to always fpga programming, thought if there was any way to change the interpretation of these signals. My PCB has a flash memory to be managed from the FPGA, which currently do not use, but not how. Thought to implement a CPU in the FPGA and program it in flash memory, but know how to do this. Or some sort of an interpreter to read the flash and the second, change the drive and how to interpret the data bus. So only have to update the flash memory can remotely do this :-D. I´m new to this and that is why I ask help, can you guide?. thank you very much.
> >
> > greetings
> > Antony
> >
>
> Hello Anthony,
>
> I had some trouble understanding your question, but let me try:
> It sounds like you have a flash memory, an FPGA, a device that the HW team is designing while they are building it, and a HW team that can't make up its mind.
>
> I don't advise adding a CPU unless you need it for something else. It will just make your life more complicated. If you really want a CPU, Xilinx has pico-blaze/micro-blaze, and Altera has Nios. See their websites.
>
> You could implement a simple state machine that reads configuration words from flash, store it in a register, and use the output of that register to configure signal muxes - a programmable one-way crosspoint switch.
>
> L
>



To post a message, send it to: f...
To unsubscribe, send a blank message to: fpga-cpu-unsubscribe
--- In f..., "potxoka3a" wrote:
>
>
> hi
>
> Thanks for answering ;-).
>
> The problem is that I am a newbie with VHDL and know how to do this. I have a design that has 8 data lines and 6 control, basically according to control signals, data about changes in the data bus and a control signal changes, but in the future may need to change the value data bus, and another is the value of the control signals other than original.Habia thought the mini-cpu to store a binary program (spi external memory) to change this to be more flexible updates.
>
> Not know if I can get VHDL values from memory and checks the data bus and, if true, put other data on the bus, reading the SPI memory. could make a structure and make a determination, but for example if I have scheduled to take the memory of two possible values for tests and three are in the future?. I know how to do it in C, but not know to what extent can be done in VHDL. Thank you very much.
>
> Greetings
> Antony

VHDL is a hardware description language and not run-time executable in any sense. VHDL is used to define how hardware works in terms of registers, gates, state machines and things like that.

There are at least two approaches to modifying signals: build a hardware system that does the work with gate level logic or build a cpu of some type that can be programmed via some external gadget to do the same function.

It sounds like you want to have some combination of 6 control signals alter the value of 8 data signals in some manner that could change in the future. The problem seems to be that what each of the 64 possible control signals might mean in the future could be much different than what they mean right now.

Assuming there are no requirements to maintain some kind of state (where a modification might rely on previous data in the stream), I would tend to think of this as a ROM application. I would use all 8 data bits and the 6 control bits to address an 8 bit wide ROM that produced the required output bits. A 32kx8 EEPROM would work. It could also be pretty fast. It could be even faster if you copied the ROM to static RAM at startup. There is a lot of 10 nS RAM around.

You could probably design a tiny CPU to do the same thing by executing some kind of code from an SPI flash. The problem is that there is a huge number of things you could do to the data and you only want to select from a subset of 64 things. To design the cpu, I think you would have to be able to compute every possible modification of 8 bits (and that's a gigantic number) and I don't think this is going to be easy.

You can use your C code to generate the ROM contents quite easily.

If you can use a ROM, fine. Otherwise design a machine that loads RAM from ROM. In either event, use C to create the ROM contents.

Richard



To post a message, send it to: f...
To unsubscribe, send a blank message to: f...
--- In f..., "rtstofer" wrote:
>
> --- In f..., "potxoka3a" wrote:
> >
> >
> > hi
> >
> > Thanks for answering ;-).
> >
> > The problem is that I am a newbie with VHDL and know how to do this. I have a design that has 8 data lines and 6 control, basically according to control signals, data about changes in the data bus and a control signal changes, but in the future may need to change the value data bus, and another is the value of the control signals other than original.Habia thought the mini-cpu to store a binary program (spi external memory) to change this to be more flexible updates.
> >
> > Not know if I can get VHDL values from memory and checks the data bus and, if true, put other data on the bus, reading the SPI memory. could make a structure and make a determination, but for example if I have scheduled to take the memory of two possible values for tests and three are in the future?. I know how to do it in C, but not know to what extent can be done in VHDL. Thank you very much.
> >
> > Greetings
> > Antony
>
> VHDL is a hardware description language and not run-time executable in any sense. VHDL is used to define how hardware works in terms of registers, gates, state machines and things like that.
>
> There are at least two approaches to modifying signals: build a hardware system that does the work with gate level logic or build a cpu of some type that can be programmed via some external gadget to do the same function.
>
> It sounds like you want to have some combination of 6 control signals alter the value of 8 data signals in some manner that could change in the future. The problem seems to be that what each of the 64 possible control signals might mean in the future could be much different than what they mean right now.
>
> Assuming there are no requirements to maintain some kind of state (where a modification might rely on previous data in the stream), I would tend to think of this as a ROM application. I would use all 8 data bits and the 6 control bits to address an 8 bit wide ROM that produced the required output bits. A 32kx8 EEPROM would work. It could also be pretty fast. It could be even faster if you copied the ROM to static RAM at startup. There is a lot of 10 nS RAM around.
>
> You could probably design a tiny CPU to do the same thing by executing some kind of code from an SPI flash. The problem is that there is a huge number of things you could do to the data and you only want to select from a subset of 64 things. To design the cpu, I think you would have to be able to compute every possible modification of 8 bits (and that's a gigantic number) and I don't think this is going to be easy.
>
> You can use your C code to generate the ROM contents quite easily.
>
> If you can use a ROM, fine. Otherwise design a machine that loads RAM from ROM. In either event, use C to create the ROM contents.

I think what he may want is a table driven state machine. I guess I am thinking of something that will execute instructions from a table, like a CPU, but without the general purpose addressing and operators. It would just examine the inputs, one at a time, performing bit logical operations on the inputs and the data to determine the next state. The states would then produce outputs. Actually, the description is not clear, the 8 data lines may be the outputs.

This clearly is not a CPU in any real sense, but would take up much less space in the FPGA. Until he defines the requirements of the possible algorithms in more detail, there is not much more we could say. But this simple state machine would be able to implement any logic ladder function.

Rick



To post a message, send it to: f...
To unsubscribe, send a blank message to: f...
Please go ahead and read a VHDL Tutorial. There are several: google VHDL Primer.

It will give you a much better idea what it can do and how hard it will be.

Luke

potxoka3a wrote:
>
> hi
>
> Thanks for answering ;-).
>
> The problem is that I am a newbie with VHDL and know how to do this. I
> have a design that has 8 data lines and 6 control, basically according
> to control signals, data about changes in the data bus and a control
> signal changes, but in the future may need to change the value data bus,
> and another is the value of the control signals other than
> original.Habia thought the mini-cpu to store a binary program (spi
> external memory) to change this to be more flexible updates.
>
> Not know if I can get VHDL values from memory and checks the data bus
> and, if true, put other data on the bus, reading the SPI memory. could
> make a structure and make a determination, but for example if I have
> scheduled to take the memory of two possible values for tests and three
> are in the future?. I know how to do it in C, but not know to what
> extent can be done in VHDL. Thank you very much.
>
> Greetings
> Antony
>
> --- In f... ,
> "Luke Teyssier" wrote:
>>
>> --- In f... ,
> "potxoka3a" wrote:
>> >
>> > hi
>> >
>> > I´m new to VHDL and FPGA. I´m currently doing a design in an FPGA
> with VHDL, analyzing and changing a few signs of a data bus of 20
> signals (transceiver). These signals often change protocol, as the team
> changes during the design in VHDL I changed 2 times.
>> >
>> > To avoid having to always fpga programming, thought if there was any
> way to change the interpretation of these signals. My PCB has a flash
> memory to be managed from the FPGA, which currently do not use, but not
> how. Thought to implement a CPU in the FPGA and program it in flash
> memory, but know how to do this. Or some sort of an interpreter to read
> the flash and the second, change the drive and how to interpret the data
> bus. So only have to update the flash memory can remotely do this :-D.
> I´m new to this and that is why I ask help, can you guide?. thank you
> very much.
>> >
>> > greetings
>> > Antony
>> >
>>
>> Hello Anthony,
>>
>> I had some trouble understanding your question, but let me try:
>> It sounds like you have a flash memory, an FPGA, a device that the HW
> team is designing while they are building it, and a HW team that can't
> make up its mind.
>>
>> I don't advise adding a CPU unless you need it for something else. It
> will just make your life more complicated. If you really want a CPU,
> Xilinx has pico-blaze/micro-blaze, and Altera has Nios. See their websites.
>>
>> You could implement a simple state machine that reads configuration
> words from flash, store it in a register, and use the output of that
> register to configure signal muxes - a programmable one-way crosspoint
> switch.
>>
>> L
>>

--
Luke Teyssier
Senior Staff Engineer
Cryptography Research, Inc.
575 Market St., 11th Floor
San Francisco, CA 94105
(415) 397-0123 x330 Direct
http://www.cryptography.com


To post a message, send it to: f...
To unsubscribe, send a blank message to: f...