Servus,
ich habe einen Kontrolregister, der aus unterschiedlichen Bitgruppen
besteht. Ich möchte nun Teile davon als Range ausschneiden und
übergeben.
So sieht es im Moment aus:
1
constantenable_bit:integer:=6;
2
3
comp:entitycomparatorportmap(
4
op1=>some_4bit_value,
5
op2=>reg_control(3downto0),
6
operation=>reg_control(5downto4),
7
enable=>reg_control(enable_bit)
8
);
I would like to replace hard coded ranges (3 downto 0)
and (5 downto 0). Also so ähnlich wie ich es oben mit
enable => reg_control(enable_bit) gemacht habe.
1
constantenable_bit:integer:=6;
2
constantoperation_bits:????:=5downto4;
3
4
comp:entitycomparatorportmap(
5
op1=>some_4bit_value,
6
op2=>reg_control(3downto0),
7
operation=>reg_control(operation_bits),
8
enable=>reg_control(enable_bit)
9
);
I am sure you got the idea ;)
Ist das irgendwie möglich?
Es würde mir tatsächlich helfen wenn ...
ich bloss nicht einige (10) von diesen Registern hätte.
Man müsste dann für jeden eigenen alias Ausschnitt anlegen
und bei einer Änderung wieder alle anpassen.
Dagegen wäre eine constant Deklaration viel leichter anzupassen
und man wäre sicher, dass man nichts vergessen hat.
Ja dieser Murphy Sack hat bei mir schon öfters zugeschlagen :)
Das einzige was mir jetzt noch einfällt, wäre ein dummy
Arraysignal anzulegen und sig'range zu benutzen.
Ich probiere es mal aus ;)
Bin aber offen für weitere Vorschläge^^
insbesondere operand'range operation'range funktionieren wie gewünscht.
habe zwar konstanten entfremdet aber naja :)
@Duke
records habe ich noch nie eingesetzt. ich glaube, dass sie
mehr vorraussicht/struktur/plannung erfordern. bei einfachen interfaces,
die std_logic_vector brauchen, nachträglich auf records umzustricken
wird (denke ich) nicht so easy.
> records habe ich noch nie eingesetzt. ich glaube, dass sie> mehr vorraussicht/struktur/plannung erfordern. bei einfachen interfaces,> die std_logic_vector brauchen, nachträglich auf records umzustricken> wird (denke ich) nicht so easy
Es wird eher übersichtlicher dadurch (wenn man sich erstmal reingedacht
hat).
1
typeoperation_tis(nop,add,sub,mul,div);
2
3
typeop_tisrecord
4
op1:std_logic_vector(3downto0);
5
op2:std_logic_vector(3downto0);
6
operation:operation_t;
7
en:boolean;
8
endrecordop_t;
9
10
constantdefault_op_c:op_t:=(
11
op1=>(others=>'0'),
12
op2=>(others=>'0'),
13
operation=>nop,
14
en=>false
15
);
Wenn mal ein Signal fehlt, wird einfach der record und die
default-Konstante erweitert, ohne das man überall die
entitys/componenten anfassen müßte.
Duke