Hallo, ich habe folgende 2 Probleme:
1. Ich kann keine Initialwerte wie
1 | signal b: std_logic := '1';
|
benutzen, da bei der Synthese folgende Meldung kommt:
1 | #0 Warning: Initial values for signals are not supported for synthesis. They are ignored on line ...
|
Wie kann ich denn sonst etwas initialisieren wenn nicht so?
Ich habe gelesen manche FPGAs unterstützen keine initialisierung der
FlipFlops. Ist dies der Grund warum das so nicht geht?
Es ist ein Xilinx XC5206 - ISE 3.1 (Ich weiß... ist ein alter Schinken)
2. Habe eine simple State Machine, die aber nicht richtig funktioniert.
1 | library IEEE;
|
2 | use IEEE.std_logic_1164.all;
|
3 | use IEEE.numeric_std.all;
|
4 | use work.all;
|
5 |
|
6 | entity functest is
|
7 | port (
|
8 | CLK: in STD_LOGIC;
|
9 | M0: out STD_LOGIC;
|
10 | M1: out STD_LOGIC;
|
11 | M2: out STD_LOGIC;
|
12 | RESULT1: out STD_LOGIC
|
13 | );
|
14 | end functest;
|
15 |
|
16 | architecture behavior of functest is
|
17 |
|
18 | type state_type is (init1, test1, init2, test2);
|
19 | signal state: state_type;
|
20 |
|
21 | signal LED_PWR_GOOD: std_logic;
|
22 | signal LED_PWR_BAD: std_logic;
|
23 | signal LED_TEST_GOOD: std_logic;
|
24 | signal LED_TEST_BAD: std_logic;
|
25 | signal CLKO: std_logic;
|
26 | signal c: integer range 0 to 2499999;
|
27 | begin
|
28 |
|
29 | process begin
|
30 | wait until rising_edge(CLK);
|
31 | if (c<2499999) then
|
32 | c <= c+1;
|
33 | else
|
34 | c <= 0;
|
35 | CLKO <= not CLKO;
|
36 | end if;
|
37 | end process;
|
38 |
|
39 | process (CLKO)
|
40 | begin
|
41 | if rising_edge(CLKO) then
|
42 | LED_PWR_GOOD <= not LED_PWR_GOOD;
|
43 | case state is
|
44 | when init1 =>
|
45 | LED_TEST_GOOD <= '0';
|
46 | state <= test1;
|
47 | when test1 =>
|
48 | LED_TEST_GOOD <= '1';
|
49 | state <= init2;
|
50 | when init2 =>
|
51 | LED_TEST_GOOD <= '0';
|
52 | state <= test2;
|
53 | when test2 =>
|
54 | LED_TEST_GOOD <= '1';
|
55 | state <= init1;
|
56 | when others =>
|
57 | state <= init1;
|
58 | end case;
|
59 | end if;
|
60 | end process;
|
61 |
|
62 | M0 <= not LED_PWR_GOOD;
|
63 | M1 <= not LED_PWR_BAD;
|
64 | M2 <= not LED_TEST_GOOD;
|
65 | RESULT1 <= not LED_TEST_BAD;
|
66 |
|
67 | end behavior;
|
LED_PWR_GOOD blinkt!
LED_TEST_GOOD blinkt aber nicht, sollte aber doch mit halber Frequenz
blinken?
Warum wird kein when - state ausgeführt?
Ich habe kein externes Signal für einen Reset. Wie kann ich
sicherstellen dass die "State machine" bei init1 anfängt? (In Bezug auf
Problem 1)