산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> VHDL

레코드 - VHDL 예

VHDL의 Record 구문을 사용하여 코드를 단순화할 수 있습니다. 레코드는 C의 구조와 유사합니다. . 레코드는 새로운 VHDL 유형을 정의하는 데 가장 자주 사용됩니다. 이 새로운 유형에는 사용자가 원하는 모든 신호 그룹이 포함됩니다. 대부분 인터페이스를 단순화하는 데 사용됩니다. 이것은 항상 동일한 많은 신호 목록이 있는 인터페이스에서 매우 편리합니다. 예를 들어 오프칩 메모리에 대한 인터페이스는 크고 설계 전반에 걸쳐 동일한 신호를 계속해서 가질 수 있습니다. 레코드를 사용하여 코드 크기를 줄이고 엔터티에서 유지해야 할 신호를 줄일 수 있습니다. 디자이너는 단일 패키지 파일에 레코드 유형을 정의한 다음 해당 레코드 유형을 사용하는 모든 엔터티에 대해 패키지 파일을 사용하기만 하면 됩니다.

아래 예에서는 패키지 파일(example_record_pkg.vhd)에 두 가지 레코드 유형을 생성합니다. 이러한 유형은 FIFO 인터페이스를 단순화하기 위해 example_record.vhd에서 사용됩니다. 모든 FIFO 입력에 대해 t_FROM_FIFO 유형의 신호 하나가 생성됩니다. 모든 FIFO 출력에 대해 t_TO_FIFO 유형의 별도 신호가 생성됩니다. .

요약:

  1. 레코드는 VHDL에서 엔터티 및 포트 맵을 단순화하는 데 사용됩니다.
  2. 레코드에는 다양한 유형의 요소가 포함될 수 있습니다. (std_logic, 정수 등)
  3. 레코드는 C의 구조와 유사합니다.
  4. 여러 파일에 걸쳐 사용된 기록은 단일 패키지 파일에 보관해야 합니다.
  5. 레코드로 정의된 신호를 초기화할 수 있습니다.
  6. 기록 배열을 생성할 수 있습니다.


library ieee;
use ieee.std_logic_1164.all;

package example_record_pkg is

  -- Outputs from the FIFO.
  type t_FROM_FIFO is record
    wr_full  : std_logic;                -- FIFO Full Flag
    rd_empty : std_logic;                -- FIFO Empty Flag
    rd_dv    : std_logic;
    rd_data  : std_logic_vector(7 downto 0);
  end record t_FROM_FIFO;  

  -- Inputs to the FIFO.
  type t_TO_FIFO is record
    wr_en    : std_logic;
    wr_data  : std_logic_vector(7 downto 0);
    rd_en    : std_logic;
  end record t_TO_FIFO;

  constant c_FROM_FIFO_INIT : t_FROM_FIFO := (wr_full => '0',
                                              rd_empty => '1',
                                              rd_dv => '0',
                                              rd_data => (others => '0'));

  constant c_TO_FIFO_INIT : t_TO_FIFO := (wr_en => '0',
                                          wr_data => (others => '0'),
                                          rd_en => '0');
  
  
end package example_record_pkg;



library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.example_record_pkg.all; -- USING PACKAGE HERE!

entity example_record is
  port (
    i_clk  : in  std_logic;
    i_fifo : in  t_FROM_FIFO;
    o_fifo : out t_TO_FIFO := c_TO_FIFO_INIT  -- intialize output record
    );
end example_record;

architecture behave of example_record is

  signal r_WR_DATA : unsigned(7 downto 0) := (others => '0');
  
begin

  -- Handles writes to the FIFO
  p_FIFO_WR : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.wr_full = '0' then
        o_fifo.wr_en   <= '1';
        o_fifo.wr_data <= std_logic_vector(r_WR_DATA + 1);
      end if;
    end if;
  end process p_FIFO_WR;
  
  -- Handles reads from the FIFO
  p_FIFO_RD : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.rd_empty = '0' then
        o_fifo.rd_en <= '1';
      end if;
    end if;
  end process p_FIFO_RD;
  
end behave;


가장 인기 있는 Nandland 페이지

VHDL

  1. 튜토리얼 - VHDL 소개
  2. VHDL 변환의 예
  3. 절차문 - VHDL 예
  4. VHDL에서 서명된 것과 서명되지 않은 것
  5. 변수 - VHDL 예
  6. 분석 옵션
  7. LP 레코드
  8. PSL을 사용한 VHDL 형식 검증
  9. VHDL에서 문자열 목록을 만드는 방법
  10. 명령문 디바운서 생성 예제