اطلاعیه

Collapse
No announcement yet.

رفع خطای ظاهرا ساده یک برنامه کوچک!

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    رفع خطای ظاهرا ساده یک برنامه کوچک!

    سلام
    من خیلی وقت نیست که vhdl رو شروع کردم. یه برنامه کوچیکی هم نوشتم که یه ارور داره و متاسفانه نتونستم ازش سر در بیارم و سرچ کردن هم کار ساز نشد

    کد:
    ----------------------------------------------------------------------------------
    -- Company: 
    -- Engineer: 
    -- 
    -- Create Date:  20:31:38 02/24/2015 
    -- Design Name: 
    -- Module Name:  main - Behavioral 
    -- Project Name: 
    -- Target Devices: 
    -- Tool versions: 
    -- Description: 
    --
    -- Dependencies: 
    --
    -- Revision: 
    -- Revision 0.01 - File Created
    -- Additional Comments: 
    --
    ----------------------------------------------------------------------------------
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    
    -- Uncomment the following library declaration if using
    -- arithmetic functions with Signed or Unsigned values
    --use IEEE.NUMERIC_STD.ALL;
    
    -- Uncomment the following library declaration if instantiating
    -- any Xilinx primitives in this code.
    --library UNISIM;
    --use UNISIM.VComponents.all;
    
    entity main is
      Port ( GCLK : in STD_LOGIC;
    			 IR_IN: in		STD_LOGIC;
    			 LED_1 : out STD_LOGIC;
          LED_2 : out STD_LOGIC;
          LED_3 : out STD_LOGIC;
          LED_4 : out STD_LOGIC);
    end main;
    
    architecture Behavioral of main is
    
    SIGNAL Ctr: STD_LOGIC_VECTOR ( 23 DOWNTO 0);
    SIGNAL state : STD_LOGIC:= '0';
    begin
    
    LED_1 <= '0';
    LED_3 <= '0';
    
    PROCESS (GCLK) BEGIN
    	IF FALLING_EDGE(GCLK) THEN
    		IF Ctr = X"FFFFF7" THEN
    			Ctr <= (OTHERS => '0');
    			IF state = '0' THEN
    				state <= '1';
    				LED_4 <= '1';
    			ELSE
    				state <= '0';
    				LED_4 <= '0';
    			END IF;
    		ELSE
    			Ctr <= Ctr + X"1";
    		END IF;
    	END IF;
    END PROCESS;
    
    PROCESS (IR_IN) BEGIN
    	IF RISING_EDGE(IR_IN) THEN
    		LED_2 <= '0';
    	ELSIF FALLING_EDGE(IR_IN) THEN
    		LED_2 <= '1';
    	END IF;
    END PROCESS;
    
    
    end Behavioral;
    ارور: Line 70: statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition

    ارور مربوط میشه به خط IF RISING_EDGE(IR_IN) THEN

    مرسی

    #2
    پاسخ : رفع خطای ظاهرا ساده یک برنامه کوچک!

    یک پروسس نمی تواند هم به لبه بالا رونده و هم به لبه پایین رونده یک سیگنال حساس باشد(در کد شما پروسس دوم). چنین مداری قابل سنتز نخواهد بود زیرا هیچ فلیپ فلاپی وجود ندارد که با دو لبه کلاک کار کند.

    دیدگاه


      #3
      پاسخ : رفع خطای ظاهرا ساده یک برنامه کوچک!

      مرسی
      البته الان دیدم خیلی بی دقتی کردم و کلا منطق برنامه اشتباهه
      باید level رو میآ‌خوندم به جای لبه

      دیدگاه


        #4
        پاسخ : رفع خطای ظاهرا ساده یک برنامه کوچک!

        اون مقدار اولیه ای که به led ها هم دادی به نظرم مشکل داره.(یعنی مقدار led هات به نظرم همیشه صفر بمونه!!!) به نظرم موقع تعریف صفرشون کن تا جواب اشتباه نگیری....

        دیدگاه

        لطفا صبر کنید...
        X