Re: [myhdl-list] Howto Lookup-Table
Brought to you by:
jandecaluwe
|
From: Christopher F. <chr...@gm...> - 2016-01-21 14:28:31
|
On 1/21/2016 5:07 AM, Marcel Hellwig wrote:
> Hello everyone,
>
> for my current project I need some kind of lookup-table.
> Setting:
> I have different CPU Modes and depending on the mode, I need to
> access certain registerbanks (yeah, it's an arm-ripof)
>
> My intentional idea was to create a dictionary where the keys are the
> modes and the values are the register numbers, e.g.
>
>>
>> regbank = {
>> cpumode_User : (R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,
>> R12, R13, R14, PC, CPSR),
>> ..... }
>>
>> registers = [Signal(intbv(0)[32:]) for _ in range(37)]
>
>
> and then access them via registers[regbank[mode][rd]] whereas mode is
> the mode (just an Signal(int)) and rd is the destionation register. R0,
> R1, ... etc are ints as well
>
> This leads to:
>> Object type is not supported in this context: regbank, <type 'dict'>
>
Yes, as you discovered dictionaries are not directly
convertible. The convertible types are described
here:
http://docs.myhdl.org/en/stable/manual/conversion.html#supported-types
This doesn't mean you can't use dicts to manage the
information in your design it just means you are limited
to using dicts in elaboration (outside the myhdl
generators).
> Okay, I thought, then I will just outsource the tuples to variables and
> make a "big" if/elif switch-case. But that don't work either :/
>
I am not sure I am following but I think you need this
simple change
offset = USER[rd]
regs[offset].next = din
When using a tuple-of-ints (ROM) the values can't be
accessed directly in an expression, you first have to
get the value and then use it in an expression.
The above is a FAQ, we should add it do the documentation
in the following section:
http://docs.myhdl.org/en/stable/manual/conversion_examples.html#rom-inference
Regards,
Chris
|