hi,
also mit standard_logic kann man tristate verhalten erlangen. du kannst
den ausgang damit auf 1, 0 oder hochohmig setzen. bit_vector ist nur 0
oder 1
zum programmieren von solchen countern braucht vhdl aus irgendeinem
grund auch std_logic. wieso das so ist, das kann ich dir jedoch nicht
erklären.
hier mal dein program ein wenig verändert...
du musst den counter z.b. auch wieder auf null setzen.
wenn du einen vergleich auf die x"10" machst, dann muss die vektorlänge
auch übereinstimmen...du hattest da ja vorher eine länge von 24 oder
sowas
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 | entity ledShifter is
|
7 | Port ( RESET:in bit;
|
8 | CLOCK : in bit;
|
9 | DIR : in bit;
|
10 | LEDS : out bit_vector (7 downto 0));
|
11 | end ledShifter;
|
12 |
|
13 | architecture Behavioral of ledShifter is
|
14 |
|
15 | signal clk_div_counter : STD_LOGIC_VECTOR (4 downto 0);
|
16 | signal ledTMP : bit_vector (7 downto 0) := "00000001";
|
17 | signal clk_149hz: bit := '0';
|
18 |
|
19 | begin
|
20 | clk_div : process(RESET,CLOCK)
|
21 | begin
|
22 | if RESET = '1' then
|
23 | clk_div_counter <= (others => '0');
|
24 | clk_149hz <= '0';
|
25 | elsif CLOCK='1' and CLOCK'event then
|
26 | if clk_div_counter = x"10" then
|
27 | clk_149hz <= '1';
|
28 | clk_div_counter <= (others => '0');
|
29 | else
|
30 | clk_div_counter <= clk_div_counter + 1;
|
31 | clk_149hz <= '0';
|
32 | end if;
|
33 | end if;
|
34 | end process clk_div;
|
35 |
|
36 | led_shift : process(clk_149hz)
|
37 | begin
|
38 | if clk_149hz='1' and clk_149hz'event then
|
39 | ledTMP <= ledTMP rol 1;
|
40 | end if;
|
41 | end process led_shift;
|
42 |
|
43 | LEDS <= ledTMP;
|
44 | end Behavioral;
|
hattest du das ganze mal simuliert? ich kann dir da nur modelsim
empfehlen(kenne nur das)
dann sieht man schon eher wo es hakt.