Hallo,
Ich mache gerade das hell-world2: die Hex Anzeige. Dabei versuche ich
möglichst jetzt so akribisch vorzugehen wie es geht, um das ganze
irgendwann auch wirklich zu verstehen. Darum möchte ich auch keine
Vorschläge, das ganze in einen 10-Zeiler zu packen. Die
Präfixschreibweise bei Signalen möchte ich gerne versuchen mir
anzueignen, vielleicht ist das ein Grund für mich sorgfälig und mit
Bedacht vorzugehen. Ansonsten bin ich ein etwas spontanerer
c-Programmierer. Daraus darf geschlossen werden was will ;-) FPGA ist
ein Interesse von mir, Hobby, und so ist der Anfang ja schon schwer
genug, da möchte ich mir mit meiner Art nicht den Weg verbauen, ich habe
in den letzten Wochen einige posts gelesen wo eher der schnelle Weg beim
Einstieg gegangen werden sollte. Das krieg ich aber sowiso nicht
gescheit hin...
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.NUMERIC_STD.ALL;
|
4 |
|
5 | entity digits_mux is
|
6 | Generic( DIGITS : natural := 4;
|
7 | F_MUX : natural := 200);
|
8 | Port ( sl_CLK : in STD_LOGIC;
|
9 | slv_DATA : in STD_LOGIC_VECTOR(4*DIGITS-1 downto 0);
|
10 | slv_NIBBLE:out STD_LOGIC_VECTOR(3 downto 0);
|
11 | slv_AN : out STD_LOGIC_VECTOR(DIGITS-1 downto 0));
|
12 | end digits_mux;
|
13 |
|
14 | architecture Behavioral of digits_mux is
|
15 | signal si_clock_delay : integer range 0 to 50000000/F_MUX := 0;
|
16 | signal si_digit : integer range 0 to DIGITS-1;
|
17 | begin
|
18 |
|
19 | digit_select : process begin
|
20 | wait until rising_edge(sl_clk);
|
21 | if( si_clock_delay < 50000000/F_MUX ) then
|
22 | si_clock_delay <= si_clock_delay + 1;
|
23 | else
|
24 | si_clock_delay <= 0;
|
25 | if( si_digit < DIGITS-1 ) then
|
26 | si_digit <= si_digit + 1;
|
27 | else
|
28 | si_digit <= 0;
|
29 | end if;
|
30 | end if;
|
31 | end process digit_select;
|
32 |
|
33 | process(si_digit, slv_DATA) begin
|
34 | slv_NIBBLE <= slv_DATA( (si_digit+1)*4-1 downto si_digit*4 );
|
35 | slv_AN <= ( others=>'0');
|
36 | slv_AN(si_digit) <= '1';
|
37 | end process;
|
38 |
|
39 | end Behavioral;
|
So. Das Problem:
ich habe keine Ahnung warum mir der Synteziser eine Warnung um die Ohren
haut. "line 60: Width mismatch. <slv_NIBBLE> has a width of 4 bits but
assigned expression is 16-bit wide." waaarum? Schneide ich nicht geade
bei der Zuweisung
1 | slv_NIBBLE <= slv_DATA( (si_digit+1)*4-1 downto si_digit*4 );
|
4 bits aus dem 16-Bit Vektor aus? wenn ich für si_digit mal 0..3
einsetze sehe ich (3 downto 0), (7 downto 4), (11 downto 8), (15 downto
12). Für mich ist das doch richtig. Klar sonst hätte ich das ja auch
nciht so hingeschrieben.
Danke