X-Git-Url: https://rtime.felk.cvut.cz/gitweb/fpga/rpi-motor-control.git/blobdiff_plain/8eaa934b9e3fe18d74858cca1f143d55b8775d4f..c4cdcbe5bfaecb9024e4fe41be29a4541653b8ef:/pmsm-control/qcounter.vhdl?ds=sidebyside diff --git a/pmsm-control/qcounter.vhdl b/pmsm-control/qcounter.vhdl index c8e8d77..b6c34f8 100644 --- a/pmsm-control/qcounter.vhdl +++ b/pmsm-control/qcounter.vhdl @@ -3,7 +3,6 @@ use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all; -use work.dff.all; entity qcounter is port ( @@ -31,6 +30,8 @@ architecture behavioral of qcounter is := "000000000000000000000000000000"; signal count: std_logic_vector (29 downto 0); begin + --ustaleni signalu a mezi tiky hodin + --reaguje na nabeznou hranu dff_a: dff port map ( clock => clock, @@ -38,6 +39,8 @@ begin q => a ); + --ustaleni signalu b mezi tiky hodin + --reaguje na nabeznou hranu dff_b: dff port map ( clock => clock, @@ -45,11 +48,13 @@ begin q => b ); + --prvni dva rady kombinacne qcount(0) <= a xor b; qcount(1) <= b; qcount(31 downto 2) <= count; - comb_event: process (a_prev, b_prev, a, b) + --k cemu tento prosess? jen pro prenos udalosti na piny? + comb_event: process (a_prev, b_prev, a, b) --proc je v sensitivity listu i stary stav?? jen kvuli nulovani? begin a_rise <= '0'; a_fall <= '0'; @@ -57,29 +62,32 @@ begin b_fall <= '0'; ab_event <= '0'; ab_error <= '0'; - if ((a xor a_prev) and (b xor b_prev)) = '1' then + if ((a xor a_prev) and (b xor b_prev)) = '1' then -- a i b se zmenily zaroven -- forbidden double transition ab_error <= '1'; else - a_rise <= (a xor a_prev) and a; - a_fall <= (a xor a_prev) and not a; - b_rise <= (b xor b_prev) and b; - b_fall <= (b xor b_prev) and not b; - ab_event <= (a xor a_prev) or (b xor b_prev); + a_rise <= (a xor a_prev) and a; --a nabezna + a_fall <= (a xor a_prev) and not a; --a sestupna + b_rise <= (b xor b_prev) and b; --b nabezna + b_fall <= (b xor b_prev) and not b; --b sestupna + ab_event <= (a xor a_prev) or (b xor b_prev); --a nebo b se zmenily end if; end process; - comb_count: process (a_prev, b_prev, a, b, count) + --prechod do 3. radu (binarne) + comb_count: process (a_prev, b_prev, a, b, count,count_prev) --proc jsou v sensitivity prev stavy? begin - if (a_prev = '0') and (b_prev = '1') and (a = '0') and (b = '0') then + if (a_prev = '0') and (b_prev = '1') and (a = '0') and (b = '0') then --posun dopredu count <= count_prev + 1; - elsif (a_prev = '0') and (b_prev = '0') and (a = '0') and (b = '1') then + elsif (a_prev = '0') and (b_prev = '0') and (a = '0') and (b = '1') then --posun dozadu count <= count_prev - 1; else count <= count_prev; end if; end process; + --s nabeznou hranou hodin ulozime stare (prev) hodnoty, pripadne synchronni reset + --proc resuteje count_prev misto count?? neprojevi se tato zmena az pri pruchodu comb_count?? seq: process begin wait until clock'event and clock = '1'; @@ -93,3 +101,5 @@ begin end process; end behavioral; +--Poznamky + --proc pouzivan count_prev a neprirazuji rovnou do count?