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를 만드는 데는 좋습니다. 하드웨어 설명 언어로 디지털 논리