Witajcie,
Od bardzo niedawna uczę się VHDL'a (i trochę verilog'a). Natrafiłem na dziwny (dla mnie) problem, który zapewne wynika z braku zrozumienia jakiegoś banalnego faktu.
Platforma: Xilinx ISE 7.1i, CPLD: XC95144XL.
Przykładowy kod:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity main is port( k: in std_logic; q: out std_logic ); end main;
architecture Behavioral of main is begin process(k) begin if(k='1') then q <= '1'; else q <= '0'; end if; end process; end Behavioral;
Do portu wejściowego "k" podłączony jest przełącznik, a do portu wyjściowego "q" dioda led. Kiedy przełączam przełącznik, dioda odpowiednio zapala się lub gaśnie. Wszystko działa jak powinno. Kiedy jednak blok "if' zmienię na następujący:
if(k='1') then q <= '1'; else q <= '1'; end if;
lub:
if(k='1') then q <= '0'; else q <= '0'; end if;
.. dioda nie świeci się (nawet, kiedy przełączam przełącznik, aby wywołać zdarzenie). Specjalnie próbowałem 2 wersje: z 0 i 1 aby wykluczyć możliwość złej polaryzacji itp.
Napisanie "q <= '0';" czy "q <= '1';" *zamiast* bloku "if" także nie zapala diody. Próbowałem też w innych miejscach kodu ...
Przedstawiłem najprostszą wersję programu, próbowałem już na różnych peryferiach, na różnych typach danych, nawet w verilog'u napisałem analogiczny program - za każdym razem to samo: Wyjściu przypisywany jest zadany stan tylko wtedy, kiedy przypisanie znajduje się w strukturze warunkowej dopuszczającej możliwość przypisania alternatywnej wartości.
Zupełnie nie rozumiem, czemu tak się dzieje. W jaki sposób mam zapalić diodę na stałe ? Czy takie "dziwne" zachowanie to cecha tych języków opisu sprzętu, czy np. konkretnie układów CPLD ?
Za wszelkie podpowiedzi będę bardzo wdzięczny.