Hallo Tom,
>Aber was willst du damit erreichen, du sparst damit keine Logik.
Das Beispiel ist vielleicht nicht wirklich aussagekräftig.
Ich möchte die Breite eines SPI-Busses zur Laufzeit von der
CPU einstellen. Die maximale Breite beträgt 16Bit.
1 | signal tx_data : std_logic_vector(15 downto 0) := (others => '0');
|
Die Breite kann ich dann über das Register bit_cnt_max verändern:
1 | signal bit_cnt_max : integer range 0 to 16 := 0;
|
Wenn ich nun das höchste Bit ausgeben möchte:
1 | MOSI <= tx_data(bit_cnt_max-2 downto 0) & MISO;
|
Bei einer Breite von 16 Bit sollte sich folgendes ergeben:
1 | MOSI <= tx_data(14 downto 0) & MISO;
|
Und bei einer Breite von 8 Bit:
1 | MOSI <= tx_data(6 downto 0) & MISO;
|
Man könnte hier natürlich auch ein "if" verwenden. Aber was macht man
wenn die Breite im Bereich von 1 bis 16 verstellbar sein soll?
Eine Alternative wäre z.B. die Daten linksbündig in tx_data
abzulegen. Aber das wollte ich vermeiden.
Gruß,
Michael