Forum: FPGA, VHDL & Co. Werte in einem package Realtime ändern


von Jörg (Gast)


Lesenswert?

Hallo

Ich habe ein Package geschrieben auf welches eine entity zugreift. Das 
package selber besitzt keine entity. Gibt es eine Möglichkeit zum Bsp. 
mit LPM_CONSTANT die Werte im Package im Betrieb zu ändern.

Danke für Eure Hilfe

Grüße Jörg

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich kapiere nicht so richtig, wie du das meinst.
Kannst du da mal ein paar Zeilen Sourcecode mit dazuhängen?

> Ich habe ein Package geschrieben auf welches eine entity zugreift.
???
> Das package selber besitzt keine entity.
Ein Package ist ein Package, eine Entity eine Entity.
Ein Package kann einen Body haben, eine Entity eine Architecture.
Aber wie soll denn eine Package eine Entity haben?

von Dennis (Gast)


Lesenswert?

huch...da steht ein falscher Name als Autor....

Es geht schon wieder mein Array Problem.

In meiner entity gibt es ja dieses Array.
1
library work;
2
use work.ascii_char.ALL;
3
4
TYPE word_type is array (0 to 19) of integer;
5
TYPE word_ROM is array (0 to 15) of word_type; 
6
7
variable Word      : Word_ROM := (
8
                     (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
9
                     (2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
10
                     (3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3),
11
                     (4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4),
12
                     (1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
13
                     (2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
14
                     (3,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3),
15
                     (4,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4),
16
                     (1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1),
17
                     (2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2),
18
                     (3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,3),
19
                     (4,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4),
20
                     (1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1),
21
                     (2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2),
22
                     (3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3),
23
                     (4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4)
24
                     );
25
26
Pixel := ascii(Word(Word_y)(Word_x))(Char_y)(Char_x);

Word ist die Nummer des Zeichens im package. Char_x und Char_y sind die 
Positionen im Ascii-Zeichen im Package.

ein Zeichen im package sieht ja so aus
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
PACKAGE ascii_char is
7
8
TYPE font_type is array (0 to 15) of integer;
9
TYPE font_type1 is array (0 to 15) of font_type;
10
TYPE font_ROM is array (0 to 15) of font_type1; 
11
              
12
CONSTANT ascii: font_ROM :=                 (((0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),  --#0
13
                            (0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0),
14
                            (0,2,1,1,1,1,1,1,1,1,1,1,1,2,0,0),
15
                            (0,2,1,1,1,1,1,1,1,1,1,1,1,2,0,0),
16
                            (0,2,1,1,2,2,2,2,2,2,2,1,1,2,0,0),
17
                            (0,2,1,1,2,0,0,0,0,0,2,1,1,2,0,0),
18
                            (0,2,1,1,2,0,0,0,0,0,2,1,1,2,0,0),
19
                            (0,2,1,1,2,2,2,2,2,2,2,1,1,2,0,0),
20
                            (0,2,1,1,1,1,1,1,1,1,1,1,1,2,0,0),
21
                            (0,2,1,1,1,1,1,1,1,1,1,1,1,2,0,0),
22
                            (0,2,1,1,2,2,2,2,2,2,2,1,1,2,0,0),
23
                            (0,2,1,1,2,0,0,0,0,0,2,1,1,2,0,0),
24
                            (0,2,1,1,2,0,0,0,0,0,2,1,1,2,0,0),
25
                            (0,2,1,1,2,0,0,0,0,0,2,1,1,2,0,0),
26
                            (0,2,2,2,2,0,0,0,0,0,2,2,2,2,0,0),
27
              (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)),
28
29
.
30
.
31
.
32
33
); --A

bei 0 zeigt er Bild, bei 1 schwarz und bei 2 weiß.

zur Zeit sind die Farbwerte des Zeichens CONSTANT ich möchte diese aber 
im Bertieb ändern können.

Wenn ich den Zeichensatz direkt in die entity schreibe gehts. Nur bei 
500 verschiedenen Zeichen wird das sehr unübersichtlich. Deshalb hab ich 
mich damals für ein package entschieden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dennis schrieb:
> zur Zeit sind die Farbwerte des Zeichens CONSTANT ich möchte diese aber
> im Bertieb ändern können.
Dann mach ein Signal draus.
Aber: du wirst extrem viel Ressourcen/Speicher dafür brauchen:
32 Bits*16*16*16 = 131072 Flipflops...

> TYPE font_type is array (0 to 15) of integer;
Wenn du da nur Werte von 0..2 abspeicherst, dann solltest du den Wert 
mit einem subtyp auf 0..2 begrenzen, denn dafür sind eigentlich nur 2 
Bits nötig. So etwa:
 SUBTYPE smallint is integer range 0 to 2;
 TYPE font_type is array (0 to 15) of smallint;

Aber insgesamt sieht das für mich aus, wie wenn du was ziemlich 
umständlich machen willst...  :-/
Stell und beantworte dir mal die Frage: wie würdest du dien Aufgabe mit 
"normalen" Logikbausteinen (RAMs, Zähler, Vergleicher...) lösen? Denn 
nur solche Bausteine sind auch im FPGA effizient realisierbar...

von Dennis (Gast)


Lesenswert?

...das wird sicher der Fall sein. Einem VHDL Crack wird bei meiner 
Syntax sicher das Herz stehen bleiben grins
Und er würde sicherlich 50% des Quellcodes wegoptimieren.

Das begrenzen des integer ist ein sehr gute Idee. Mehr wie 10 Werte wird 
es kaum geben.

Wenn ich aus der CONSTANT ein SIGNAL mache. Kann ich es dann auch per 
LPM_CONSTANT anprechen? Ich möchte zum Bsp. aus allen 1 eine 2 machen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dennis schrieb:
> Wenn ich aus der CONSTANT ein SIGNAL mache. Kann ich es dann auch per
> LPM_CONSTANT anprechen? Ich möchte zum Bsp. aus allen 1 eine 2 machen.
Suchen&Ersetzen?
Konstante(n) definieren und mit diesen arbeiten?

> LPM_CONSTANT
Habe ich noch nie gebraucht, weder bei Lattice noch bei Xilinx. Das kann 
also nicht so wichtig sein... :-/

Dennis schrieb:
> Einem VHDL Crack wird bei meiner Syntax sicher das Herz stehen bleiben grins
Da muß schon wesenlich mehr passieren. Das/Dein Problem ist eher, dass 
du offenbar eine sehr "softwarelastige" Denkweise hast.

Dennis schrieb:
> bei 0 zeigt er Bild, bei 1 schwarz und bei 2 weiß.
Dann definier z.B. jewils eine Konstante und du siehst gleich das 
Muster:
1
TYPE font_type is array (0 to 15) of integer;
2
TYPE font_type1 is array (0 to 15) of font_type;
3
TYPE font_RAM is array (0 to 15) of font_type1; 
4
5
CONSTANT x: integer := 0; -- Bild
6
CONSTANT o: integer := 1; -- schwarz
7
CONSTANT W: integer := 2; -- weiß
8
9
Signal ascii: font_RAM:=(((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x),  --#0
10
                          (x,W,W,W,W,W,W,W,W,W,W,W,W,W,x,x),
11
                          (x,W,o,o,o,o,o,o,o,o,o,o,o,W,x,x),
12
                          (x,W,o,o,o,o,o,o,o,o,o,o,o,W,x,x),
13
                          (x,W,o,o,W,W,W,W,W,W,W,o,o,W,x,x),
14
                          (x,W,o,o,W,x,x,x,x,x,W,o,o,W,x,x),
15
                          (x,W,o,o,W,x,x,x,x,x,W,o,o,W,x,x),
16
                          (x,W,o,o,W,W,W,W,W,W,W,o,o,W,x,x),
17
                          (x,W,o,o,o,o,o,o,o,o,o,o,o,W,x,x),
18
                          (x,W,o,o,o,o,o,o,o,o,o,o,o,W,x,x),
19
                          (x,W,o,o,W,W,W,W,W,W,W,o,o,W,x,x),
20
                          (x,W,o,o,W,x,x,x,x,x,W,o,o,W,x,x),
21
                          (x,W,o,o,W,x,x,x,x,x,W,o,o,W,x,x),
22
                          (x,W,o,o,W,x,x,x,x,x,W,o,o,W,x,x),
23
                          (x,W,W,W,W,x,x,x,x,x,W,W,W,W,x,x),
24
                          (x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)),

Der Name font_RAM oder font_ROM ist hier übrigens irreleitend: die 
Synthese kann daraus kein RAM oder ROM machen, wenn der Zugriff 
falsch gemacht wird.

von Matze (Gast)


Lesenswert?

...stimmt...da sieht man die Zeichen viel besser...hab schon Augenkrebs 
bei 0,1,2 :)

danke!

Warum machst du keine VHDL Seminare? Wenn ich da an meine 
Hochschulvorlesung denke. Der Prof. hat zu VHDL gar nix erklärt. Nur das 
wir im was programmieren sollen und welche Bücher sinnvoll sind.

Ich hab durch dich und das Forum mehr verstanden als jemals an der Uni.

Nicht mal das man in VHDL mit Signalen arbeitet. Er kam immer nur mit 
Variablen etc.

von Dennis (Gast)


Lesenswert?

...stimmt...da sieht man die Zeichen viel besser...hab schon Augenkrebs 
bei 0,1,2 :)

danke!

Warum machst du keine VHDL Seminare? Wenn ich da an meine 
Hochschulvorlesung denke. Der Prof. hat zu VHDL gar nix erklärt. Nur das 
wir im was programmieren sollen und welche Bücher sinnvoll sind.

Ich hab durch dich und das Forum mehr verstanden als jemals an der Uni.

Nicht mal das man in VHDL mit Signalen arbeitet. Er kam immer nur mit 
Variablen etc.

von Dennis (Gast)


Lesenswert?

...boeh ich hasse es wenn andere an meinem PC was machen  @ 
Verfasser-Name

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.