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 |