Hallo, ich verstehe bei der unten angegebenen Beschreibung nicht, weshalb ISE der Meinung ist das LOKAL_SER_OUT_MSG<15> niemals genutzt wird und es deshalb weg optimiert wird? Bei den Anweisungen "LOKAL_SER_OUT_MSG := x"1234"; SERIAL_OUT <= LOKAL_SER_OUT_MSG(15);" im zweiten if-Zweig wird das 15. Bit doch benötigt?
1 | entity S3P_TX is |
2 | port( CLK_SYS : in std_logic; |
3 | RST : in std_logic; |
4 | CLK_TX : out std_logic; |
5 | SERIAL_OUT : out std_logic); |
6 | end S3P_TX; |
7 | |
8 | architecture BEHAVIORAL of S3P_TX is |
9 | |
10 | component DATA_CLK_GENERATOR |
11 | port( CLK_SYS : in std_logic; |
12 | RST : in std_logic; |
13 | DATA_CLK : out std_logic; |
14 | TX_CLK_EN : out std_logic); |
15 | end component; |
16 | |
17 | signal SHIFT_CNT : integer range 0 to 15; |
18 | signal TX_CLK_EN_CON : std_logic; |
19 | |
20 | begin
|
21 | |
22 | CLK_GEN : DATA_CLK_GENERATOR port map( CLK_SYS => CLK_SYS, |
23 | RST => RST, |
24 | DATA_CLK => CLK_TX, |
25 | TX_CLK_EN => TX_CLK_EN_CON |
26 | );
|
27 | |
28 | TEST : process(CLK_SYS) |
29 | variable LOKAL_SER_OUT_MSG : std_logic_vector(15 downto 0); |
30 | begin
|
31 | if(CLK_SYS'event and CLK_SYS = '1')then |
32 | if(RST = '1') then |
33 | LOKAL_SER_OUT_MSG := x"FFFF"; |
34 | SHIFT_CNT <= 0; |
35 | SERIAL_OUT <= '1'; |
36 | elsif(TX_CLK_EN_CON = '1') then |
37 | if(SHIFT_CNT < 15) then |
38 | LOKAL_SER_OUT_MSG := LOKAL_SER_OUT_MSG(14 downto 0) & '0'; |
39 | SERIAL_OUT <= LOKAL_SER_OUT_MSG(15); |
40 | SHIFT_CNT <= SHIFT_CNT + 1; |
41 | elsif(SHIFT_CNT >= 15) then |
42 | LOKAL_SER_OUT_MSG := x"0123"; |
43 | SERIAL_OUT <= LOKAL_SER_OUT_MSG(15); |
44 | SHIFT_CNT <= 0; |
45 | end if; |
46 | end if; |
47 | end if; |
48 | end process; |
49 | |
50 | end BEHAVIORAL; |