VHDL
VHDL의 Record 구문을 사용하여 코드를 단순화할 수 있습니다. 레코드는 C의 구조와 유사합니다. . 레코드는 새로운 VHDL 유형을 정의하는 데 가장 자주 사용됩니다. 이 새로운 유형에는 사용자가 원하는 모든 신호 그룹이 포함됩니다. 대부분 인터페이스를 단순화하는 데 사용됩니다. 이것은 항상 동일한 많은 신호 목록이 있는 인터페이스에서 매우 편리합니다. 예를 들어 오프칩 메모리에 대한 인터페이스는 크고 설계 전반에 걸쳐 동일한 신호를 계속해서 가질 수 있습니다. 레코드를 사용하여 코드 크기를 줄이고 엔터티에서 유지해야 할 신호를 줄일 수 있습니다. 디자이너는 단일 패키지 파일에 레코드 유형을 정의한 다음 해당 레코드 유형을 사용하는 모든 엔터티에 대해 패키지 파일을 사용하기만 하면 됩니다.
아래 예에서는 패키지 파일(example_record_pkg.vhd)에 두 가지 레코드 유형을 생성합니다. 이러한 유형은 FIFO 인터페이스를 단순화하기 위해 example_record.vhd에서 사용됩니다. 모든 FIFO 입력에 대해 t_FROM_FIFO 유형의 신호 하나가 생성됩니다. 모든 FIFO 출력에 대해 t_TO_FIFO 유형의 별도 신호가 생성됩니다. .
요약:
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;
VHDL
이전 자습서에서 For-Loop를 사용하여 정수 범위를 반복하는 방법을 배웠습니다. 그러나 고정된 정수 범위보다 루프를 더 자세히 제어하려면 어떻게 해야 할까요? 이를 위해 While 루프를 사용할 수 있습니다. While 루프는 테스트하는 표현식이 true로 평가되는 한 계속해서 동봉된 코드를 반복합니다. . 따라서 While-Loop는 얼마나 많은 반복이 필요한지 미리 알 수 없는 상황에 적합합니다. 이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다. While 루프의 구문은 다음과 같습니다. while <
간단히 말해 VHDL은 디지털 회로 설계에 사용되는 컴퓨터 언어입니다. 저는 VHDL을 Java 또는 C++와 같은 보다 일반적인 다른 프로그래밍 언어와 구별하기 위해 컴퓨터 언어라는 용어를 사용합니다. 그러나 VHDL은 프로그래밍 언어입니까? 예, 그렇습니다. 컴퓨터 프로그램을 만들 때 아무 소용이 없는 프로그래밍 언어입니다! VHDL은 이벤트 구동 병렬 프로그래밍 언어입니다. 컴퓨터의 CPU가 실행할 수 있는 프로그램을 만드는 데는 적합하지 않지만 실제 CPU를 만드는 데는 좋습니다. 하드웨어 설명 언어로 디지털 논리