VHDL+Quartus II 과정 설계 관련 프로그램
University Program VWF 웨이브 파일입니다.
1. 또는 도어 회로 설계
①와 문 회로 설계
library ieee;
use ieee.std_logic_1164.all;
entity lian is
port(
a,b:in std_logic;
y:out std_logic
);
end;
architecture rel_1 of lian is
begin
y<= a and b;
end;
② 또는 도어 회로 설계
library ieee;
use ieee.std_logic_1164.all;
entity lian2 is
port(
a,b:in std_logic;
y:out std_logic
);
end;
architecture rel_1 of lian2 is
begin
y<= a or b;
end;
2.삼팔디코더
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY m38 IS
PORT(A2,A1,A0,S1,S2,S3:IN STD_LOGIC;
Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY m38;
ARCHITECTURE ONE OF m38 IS
SIGNAL S: STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
S<=A2&A1&A0&S1&S2&S3;
WITH S SELECT
Y<="11111110" WHEN "000100",
"11111101" WHEN "001100",
"11111011" WHEN "010100",
"11110111" WHEN "011100",
"11101111" WHEN "100100",
"11011111" WHEN "101100",
"10111111" WHEN "110100",
"01111111" WHEN "111100",
"11111111" WHEN OTHERS;
END ARCHITECTURE ONE;
3.83 인코더
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY m83 IS
PORT(
D:IN STD_LOGIC_VECTOR(0 TO 7);
A:OUT STD_LOGIC_VECTOR(0 TO 2)
);
END ;
ARCHITECTURE XIANI OF m83 IS
BEGIN
PROCESS(D)
BEGIN
IF (D(7)='0')THEN A<="111";
ELSIF (D(6)='0')THEN A<="110";
ELSIF (D(5)='0')THEN A<="101";
ELSIF (D(4)='0')THEN A<="100";
ELSIF (D(3)='0')THEN A<="011";
ELSIF (D(2)='0')THEN A<="010";
ELSIF (D(1)='0')THEN A<="001";
ELSIF (D(0)='0')THEN A<="000";
ELSE A<="ZZZ";
END IF;
END PROCESS;
END;
4.8 선택1 데이터 선택기
library ieee;
use ieee.std_logic_1164.all;
entity elec is
port(d0,d1,d2,d3,d4,d5,d6,d7,a0,a1,a2,s:in std_logic;
y:out std_logic);
end elec;
architecture hxx of elec is
signal a:std_logic_vector (2 downto 0);
begin
process (a0,a1,a2)
begin
a<=a2&a1&a0;
if(s='0') then
case a is
when"000"=>y<=d0;
when"001"=>y<=d1;
when"010"=>y<=d2;
when"011"=>y<=d3;
when"100"=>y<=d4;
when"101"=>y<=d5;
when"110"=>y<=d6;
when others=>y<=d7;
end case;
end if;
end process;
end hxx;
5. 4비트 2진 수치 비교기
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY comp IS
PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
YA,YB,YC: OUT STD_LOGIC);
END comp;
ARCHITECTURE behave OF comp IS
BEGIN
PROCESS (A,B)
BEGIN
IF (A > B) THEN
YA <='1';
YB <='0';
YC <='0';
ELSIF(A < B) THEN
YA <='0';
YB <='1';
YC <='0';
ELSE
YA <='0';
YB <='0';
YC <='1';
END IF;
END PROCESS;
END behave;
6. 전가기
library ieee;
use ieee.std_logic_1164.all;
entity fulladd is
port ( a,b,ci: in std_logic;
s,co : out std_logic );
end entity;
architecture rtl of fulladd is
begin
s <= a xor b xor ci;
co <= (a and b) or (a and ci) or (b and ci);
end rtl;
7.반가기
Library ieee;
Use ieee.std_logic_1164.all;
Entity halfadd is
Port(a,b:in std_logic;
S,c:out std_logic);
end halfadd;
Architecture add of halfadd is
begin
S<=a xor b;
c<=a and b;
end;
8. 전감기
library ieee;
use ieee.std_logic_1164.all;
entity fullsub is
port (xin,yin,sub_in:in std_logic;
diffr,sub_out:out std_logic);
end;
architecture one of fullsub is
component halfsub
port (x,y:in std_logic;
diff,s_out:out std_logic);
end component;
signal c,d,e:std_logic;
begin
u1:halfsub port map(x => xin,y => yin,diff => c,s_out => d);
u2:halfsub port map(x => c,y => sub_in,diff => diffr,s_out => e);
sub_out <= d or e;
end;
9.반감기
library ieee;
use ieee.std_logic_1164.all;
entity halfsub is
port ( x,y:in std_logic;
diff,s_out:out std_logic);
end;
architecture one of halfsub is
begin
process(x,y)
begin
diff <= x xor y;
s_out <= (not x) and y;
end process;
end;
10. 트리거(D 트리거)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cfq IS
PORT ( clk, d: IN STD_LOGIC;
q:OUT STD_LOGIC);
END cfq;
ARCHITECTURE rtl OF cfq IS
BEGIN
PROCESS(clk)
BEGIN
IF(clk' EVENT AND clk='1') THEN
q<=d;
END IF;
END PROCESS;
END rtl;
11. 카운터(동기식 리셋 덧셈 카운터)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity addcount is
port(
CLK,RST,EN: in std_logic;
DOUT : out std_logic_vector (3 downto 0);
COUT : OUT std_logic
);
end addcount;
architecture behav of addcount is
begin
process(CLK,RST,EN)
variable Q : std_logic_vector (3 downto 0);
begin
if CLK 'event and CLK = '1' then
if RST = '1' then Q := (others => '0');
else
if EN = '1' then
if Q < 9 then Q := Q + 1;
else Q := (others => '0');
end if;
end if;
end if;
end if;
if Q = "1001" then COUT <= '1';
else COUT <= '0';
end if;
DOUT <= Q;
end process;
end behav;
12. 레지스터
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY jcq IS
PORT(CLK,CO:IN STD_LOGIC;
MD:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
CN:OUT STD_LOGIC);
END ENTITY;
ARCHITECTURE BEHAV OF jcq IS
SIGNAL REG:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL CY:STD_LOGIC;
BEGIN
PROCESS(CLK,MD,CO)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
CASE MD IS
WHEN "001" =>REG(0)<=CO;
REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); CY<=REG(7);
WHEN "010"=>REG(0)<=REG(7);
REG(7 DOWNTO 1)<=REG(6 DOWNTO 0);
WHEN "011"=>REG(7)<=REG(0);
REG(6 DOWNTO 0)<=REG(7 DOWNTO 1);
WHEN "100"=>REG(7)<=CO;
REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); CY<=REG(0);
WHEN "101"=>REG(7 DOWNTO 0)<=D(7 DOWNTO 0);
WHEN OTHERS=>REG<=REG; CY<=CY;
END CASE;
END IF;
END PROCESS;
QB(7 DOWNTO 0)<=REG(7 DOWNTO 0); CN<=CY;
END BEHAV;
13. 레지스터 잠금
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY scq IS
PORT (CLK,D : IN STD_LOGIC ;
Q : OUT STD_LOGIC ) ;
END ;
ARCHITECTURE BHV OF scq IS
BEGIN
PROCESS (CLK,D)
BEGIN
IF CLK ='1'
THEN Q <=D ;
END IF ;
END PROCESS ;
END BHV ;
14. 짝수 주파수 분할기(n=4)
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity osfpq is
generic(N: integer:=4);
port(
clkin: IN std_logic;
clkout: OUT std_logic
);
End osfpq;
Architecture a of osfpq is
signal cnt: integer range 0 to n-1;
Begin
process(clkin)
begin
if(clkin'event and clkin='1') then
if(cnt
15. EDA 프로그램 설계(택시 카운터)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity eeda is -- [3]
port ( clk_256 :in std_logic; -- 256Hz
start :in std_logic; --
stop:in std_logic; --
fin:in std_logic; --
cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0); --
km1,km0:out std_logic_vector(3 downto 0); --
min1,min0: out std_logic_vector(3 downto 0)); --
end eeda;
architecture behav of eeda is
signal f_16,f16,f_1:std_logic;
signal q_16:integer range 0 to 15; --
signal q16:integer range 0 to 15; --
signal q_1:integer range 0 to 255; --
signal w:integer range 0 to 59; --
signal c3,c2,c1,c0:std_logic_vector(3 downto 0); --
signal k1,k0:std_logic_vector(3 downto 0); --
signal m1:std_logic_vector(2 downto 0); --
signal m0:std_logic_vector(3 downto 0); --
signal en1,en0,f:std_logic; --
begin
fenpin:process(clk_256,start) --
begin
if clk_256'event and clk_256='1' then
if start='0' then q_16<=0;q16<=0;f_16<='0';f16<='0';f_1<='0';f<='0';
else
if q_16=15 then q_16<=0;f_16<='1'; -- if 16Hz
else q_16<=q_16+1;f_16<='0';
end if;
if q16=15 then q16<=0;f16<='1'; -- if 16Hz
else q16<=q16+1;f16<='0';
end if;
if q_1=255 then q_1<=0;f_1<='1'; -- if 1Hz
else q_1<=q_1+1;f_1<='0';
end if;
if en1='1' then f<=f_16; -- if f
elsif en0='1' then f<=f16;
else f<='0';
end if;
end if;
end if;
end process;
process(f_1) --
begin
if f_1'event and f_1='1' then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="000";m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then --
if w=59 then w<=0; -- if
if m0="1001" then m0<="0000"; -- if
if m1<="101" then m1<="000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if m1&m0>"0000001"then en1<='1'; -- if en1
else en1<='0';
end if;
else w<=w+1;en1<='0';
end if;
elsif fin='1' then --
if k0="1001" then k0<="0000"; -- if
if k1="1001" then k1<="0000";
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if k1&k0>"00000010" then en0<='1'; -- if en0
else en0<='0';
end if;
else en1<='0';en0<='0';
end if;
cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0; --
km1<=k1;km0<=k0;min1<='0'&m1;min0<=m0; -- 、
end if;
end process;
process(f,start) -- [2]
begin
if start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000";
elsif f'event and f='1' then
if c0="1001" then c0<="0000"; -- if
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3<="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end behav;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
저렴한 FPGA 평가 보드로 저렴한 LCD [1602A] 제어에서 소개한 저렴한 중화제 FPGA 평가 보드를 사용해, 이번은 전자 공작으로 친숙한 이 LCD(Liquid Crystal Display)를 제어해 보겠습니다. 평소라면 Arduino등의 개발 환경에서 전용 라이브러...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.