CPLD stale v tom plavu :-)

Ondrej leguanolog@seznam.cz
Středa Červenec 8 18:15:38 CEST 2009


Nicméně 4096 je mocnina dvou, takže se dá použít prostý čítač UP a jen 
vyvést jeho horní bit (zde pro dělení 2^4, ale dá se snadno upravit).

entity delicka is
    Port ( clk : in  STD_LOGIC;
              reset : in std_logic;   
           clk_4 : out  STD_LOGIC);
end delicka;

architecture Behavioral of delicka is
    signal count : std_logic_vector (4 downto 0);
begin

process (clk, reset)
   begin
   if reset='1' then
      count <= (others => '0');
   elsif rising_edge (clk) then
      count <= count +1;     
   end if;
end process;

clk_4 <= count (4);

end Behavioral;


Daniel Valuch napsal(a):
> ak mozem doporucit, pre navrhy ktore sa budu syntetizovat nepouzivajte 
> premenne ale signaly. Premenne su trochu 'tricky' na pouzivanie. Mozem 
> dat vlastny priklad kedy som len nahodou zistil ze to co som si myslel 
> ze je citac sa mi prelozilo ako state machine s 4096 stavmi. Kedze bolo 
> FPGA velke vsimol som si to len nahodou ked som hladal inu chybu. Po 
> zmene z premennej na signal bol preklad v poriadku a uvolnilo sa znacne 
> mnozstvo zdrojov :-)
>
>
> priklad citaca z 
> http://www.xilinx.com/itp/3_1i/data/fise/xst/chap02/xst02005.htm
>
> Following is VHDL code for a 4-bit unsigned Up counter with asynchronous 
> clear.
>
> library ieee;
> use ieee.std_logic_1164.all;
> use ieee.std_logic_unsigned.all;
>
>
> entity counter is
>   port(C, CLR : in  std_logic; 
>         Q : out std_logic_vector(3 downto 0)); 
> end counter;
> architecture archi of counter is 
>   signal tmp: std_logic_vector(3 downto 0);
>   begin 
>       process (C, CLR)
>         begin 
>           if (CLR='1') then 
>             tmp = "0000"; 
>           elsif (C'event and C='1') then 
>             tmp = tmp + 1;
>           end if; 
>       end process;
>       Q = tmp; 
> end archi;
>
>
>
>
>
>
>
> j.Krajinka@seznam.cz wrote:
>   
>> Mea culpa, asi jsem momentalne zaostaly, ale s timhle se peru uz hodinu.
>>
>> Pokud se nepletu tak port muze byt definovan jako in, out, inout a buffer?
>> Pokud ano tak nechapu proc pri vytvareni noveho modulu New Source Wizard neumoznuje volbu buffer?
>>
>> Zkousel jsem delicku kmitoctu 1:4096
>>
>> Port ( Clk : in  STD_LOGIC;
>>            CD : buffer  STD_LOGIC);
>>
>> process(Clk,CD)
>> variable cnt : integer range 0 to 4096;
>> begin
>> if(Clk'event and Clk='1') then
>> if(cnt=4096)then
>> cnt:=0;
>> CD<= CD nand '1';
>> else
>> cnt := cnt+1;
>> end if;
>> end if;
>> end process;
>>
>> toto se bezproblemu prelozi a projde kontrolou syntaxe.
>> problem je ze, kdyz vytvorim  VHDL Test Bench , tak generator oznaci  CD jako vystup  CD : OUT  std_logic
>> Pokus o simulaci konci chybou
>> ERROR:HDLCompiler:439 -  Formal port cd of mode buffer cannot be associated with actual port cd of mode out, ktera je tak tajna, ze ji nepopisuji ani v napovede na webu Xilinx.
>> Kdyz to rucne opravim z Out na buffer tak to funguje, ale tak si rikam, zda nedelam neco blbe, kdyz je to tak komplikovane :-)
>>
>>
>> Dekuji
>>            Jirka
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list@list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>   
>>     
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>   

-- 
Jabber: Iguaner@jabber.cz
ICQ: 122712466

---------------------------------------------------
|                                                 |
|       IKORAS - My home-made MP3 player          |
|       http://ikoras.iglu.cz                     |
|                                                 |
--------------------------------------------------- 




Další informace o konferenci Hw-list