]> rtime.felk.cvut.cz Git - fpga/pwm.git/blobdiff - mcc_master.vhd
Wave_table initialization data format modified.
[fpga/pwm.git] / mcc_master.vhd
index 64bf9ef9ce02b7aac27dde8e859c136967a611c9..fca6652697d325b15ab7d4782484f995c584afa3 100644 (file)
@@ -15,21 +15,21 @@ entity mcc_master is
     IRF_ADR_W : integer := 5);
   port (
     -- Primary slave intefrace
-    ACK_O        : out std_logic;
+    ACK_O        : out std_logic := '0';
     CLK_I        : in  std_logic;
     RST_I        : in  std_logic;
     STB_I        : in  std_logic;
     -- Motion Control Chain
-    MCC_STB_O    : out std_logic_vector (MCC_W-1 downto 0);
+    MCC_STB_O    : out std_logic_vector (MCC_W-1 downto 0) := (others => '0');
     MCC_ACK_I    : in  std_logic_vector (MCC_W-1 downto 0);
-    MCC_MUX_CODE : out std_logic_vector (MUX_W-1 downto 0);
-    MCC_MUX_EN   : out std_logic;
+    MCC_MUX_CODE : out std_logic_vector (MUX_W-1 downto 0) := (others => '0');
+    MCC_MUX_EN   : out std_logic := '0';
     -- Shared dual-port memory
     IRF_ACK_I    : in  std_logic;
     IRF_ADR_O    : out std_logic_vector (IRF_ADR_W-1 downto 0);
     IRF_DAT_I    : in  std_logic_vector (15 downto 0);
     IRF_DAT_O    : out std_logic_vector (15 downto 0);
-    IRF_STB_O    : out std_logic;
+    IRF_STB_O    : out std_logic := '0';
     IRF_WE_O     : out std_logic);
 end entity mcc_master;
 
@@ -39,13 +39,13 @@ architecture behavioral of mcc_master is
 
   type state_t is (ready, read_mask, do_mcc, done);
 
-  signal state : state_t;
+  signal state : state_t := ready;
 
   signal mcc_mask       : std_logic_vector (MCC_W-1 downto 0);
-  signal mcc_ack_inner  : std_logic_vector (MCC_W downto 0);
-  signal mcc_stb_inner  : std_logic_vector (MCC_W-1 downto 0);
+  signal mcc_ack_inner  : std_logic_vector (MCC_W downto 0) := (others => '0');
+  signal mcc_stb_inner  : std_logic_vector (MCC_W-1 downto 0) := (others => '0');
   signal mux_code_inner : std_logic_vector (MUX_W-1 downto 0);
-  signal mcc_exec       : std_logic;
+  signal mcc_exec       : std_logic := '0';
   
 --------------------------------------------------------------------------------
 
@@ -67,22 +67,30 @@ begin
 
   MCC_EXEC_LOGIC : process (RST_I, CLK_I) is
   begin
-    if RST_I = '1' then
-      mcc_ack_inner <= (others => '0');
-      mcc_stb_inner <= (others => '0');
-
-    elsif rising_edge(CLK_I) then
-      mcc_ack_inner (0) <= mcc_exec;
-      
-      for i in 0 to MCC_W-1 loop
-        if mcc_mask (i) = '1' then
-          mcc_ack_inner (i+1) <= MCC_ACK_I (i);
-          mcc_stb_inner (i)   <= mcc_ack_inner (i);
+    if rising_edge(CLK_I) then
+      if RST_I = '1' then
+        mcc_ack_inner <= (others => '0');
+        mcc_stb_inner <= (others => '0');
+
+      else
+        if mcc_exec = '0' then
+          mcc_ack_inner <= (others => '0');
+          mcc_stb_inner <= (others => '0');
+          
         else
-          mcc_ack_inner (i+1) <= mcc_ack_inner (i);
-          mcc_stb_inner (i)   <= '0';
+          mcc_ack_inner (0) <= mcc_exec;
+          
+          for i in 0 to MCC_W-1 loop
+            if mcc_mask (i) = '1' then
+              mcc_ack_inner (i+1) <= MCC_ACK_I (i);
+              mcc_stb_inner (i)   <= mcc_ack_inner (i);
+            else
+              mcc_ack_inner (i+1) <= mcc_ack_inner (i);
+              mcc_stb_inner (i)   <= '0';
+            end if;
+          end loop;
         end if;
-      end loop;
+      end if;
     end if;
   end process;