logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] FPGA - Poszukiwany VHDL dla dzielnika częstotliwości sterowanego z 4 bitów, LS292

Michal2002 17 Gru 2022 17:43 780 4
REKLAMA
  • #1 20339672
    Michal2002
    Poziom 24  
    Posty: 1359
    Pomógł: 18
    Ocena: 179
    Dzień dobry,

    Poszukuję programowalnego dzielnika częstotliwości sterowanego z 4 bitów wykonanego w VHDL coś jak LS292



    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 20341235
    mycodename47
    Poziom 16  
    Posty: 251
    Pomógł: 15
    Ocena: 53
    Witaj, w książce "Układy programowalne dla początkujących" pana Andrzeja Pawluczuka, był opisany podobny dzielnik częstotliwości do tego o który pytasz. Przykłady od tej książki można pobrać za darmo w Internecie. Tutaj akurat stopień podziału jest stały i wynosi 2^8, jest też jedno wyjście a nie 3 jak w układzie LS292, ale raczej bez problemu to przerobisz na swoje potrzeby. Poniżej wklejam kod:

    
    --
    -- **************************************************************************
    -- **************************************************************************
    -- **                                                                      **
    -- **                      "Układy CPLD w praktyce"                        **
    -- **                                                                      **
    -- **            Module: FDivider (przydatny komponent)                    **
    -- **            Target device: XILINX CPLD                                **
    -- **            Tool versions: ISE WebPACK 9.2i                           **
    -- **            Date: BIAŁYSTOK, styczeń 2009                             **
    -- **                                                                      **
    -- **                     Napisał : Andrzej Pawluczuk                      **
    -- **                                                                      **
    -- **************************************************************************
    -- **************************************************************************
    --
    -----------------------------------------------------------------------------
    library IEEE ;
    use IEEE.STD_LOGIC_1164.ALL ;
    use IEEE.STD_LOGIC_ARITH.ALL ;
    use IEEE.STD_LOGIC_UNSIGNED.ALL ;
    
    entity FDivider is generic ( constant CntSize : integer := 8 ) ;
                       port ( Clk : in std_logic ;
                              Reset : in std_logic ;
                              FDiv : out std_logic ) ;
    end FDivider ;
    
    architecture Behavioral of FDivider is
    
      signal FDivCnt : std_logic_vector ( CntSize - 1 downto 0 ) ;
    
    begin
    
      FDividerInstance : process ( Clk , Reset )
      begin
        if Reset = '0' then
          FDivCnt <= ( others => '0' ) ;
        else
          if Clk'event and Clk = '0' then
            FDivCnt <= FDivCnt + 1 ;
          end if ;
        end if ;
      end process ;
    
      FDiv <= FDivCnt ( FDivCnt'left ) ;
    
    end Behavioral ;
    
    
  • REKLAMA
  • #3 20341314
    Michal2002
    Poziom 24  
    Posty: 1359
    Pomógł: 18
    Ocena: 179
    Dzięki :)

    Wiesz jak zrobić testbench do tego ?

    Pozdrawiam
  • REKLAMA
  • #4 20346962
    Michal2002
    Poziom 24  
    Posty: 1359
    Pomógł: 18
    Ocena: 179
    library ieee;
    use ieee.std_logic_1164.all;

    entity tb_FDivider is
    end tb_FDivider;

    architecture tb of tb_FDivider is

    component FDivider
    port (Clk : in std_logic;
    Reset : in std_logic;
    FDiv : out std_logic);
    end component;

    signal Clk : std_logic;
    signal Reset : std_logic;
    signal FDiv : std_logic;

    constant TbPeriod : time := 1000 ns;
    signal TbClock : std_logic := '0';
    signal TbSimEnded : std_logic := '0';

    begin

    dut : FDivider
    port map (Clk => Clk,
    Reset => Reset,
    FDiv => FDiv);

    -- zegar

    TbClock <= not TbClock after TbPeriod/2 when TbSimEnded /= '1' else '0';

    l
    Clk <= TbClock;

    stimuli : process
    begin


    -- Formowanie sygnalu reset

    Reset <= '1';
    wait for 100 ns;
    Reset <= '0';
    wait for 100 ns;


    wait for 100 * TbPeriod;

    TbSimEnded <= '1';
    wait;
    end process;

    end tb;


    configuration cfg_tb_FDivider of tb_FDivider is
    for tb
    end for;
    end cfg_tb_FDivider;

    Dodano po 36 [sekundy]:

    Temat rozwiązany dziękuję wszystkim za pomoc.
  • #5 20346964
    Michal2002
    Poziom 24  
    Posty: 1359
    Pomógł: 18
    Ocena: 179
    Info powyżej
REKLAMA