2X4 Decoder 설계 VHDL - case & for-loop (0) | 2008.10.14 |
---|---|
Difference of Latch & Flip/flop (0) | 2008.10.08 |
감가산 연산시 Overflow 해결법 (0) | 2008.10.08 |
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
case문 : 수식값에 따라 문장을 선택한다. when 의 값과 수식값이 일치하면 문장을 수행하고 그렇지 dskg으면 다음의 when의 값을 비교하여 그 문장의 수행여부를 결정한다. 수식을 여러값으로 표현할때는 ‘|’을 사용하면 된다.
<example code>
case sel is
when "00" => y <= d(0);
when "01" => y <= d(1);
when "10" => y <= d(2);
when others => y <= d(3);
end case;
>> 해석 : sel 의 값에 따라 입력단자 (d(0)~d(3))의 값이 출력 y로 연결된다.
*****************************************************************************
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-----------입출력 포트 설정------------
entity decoder_case is
port (X : in bit_vector (1 downto 0);
CHK : in bit;
Y : out bit_vector (3 downto 0));
end decoder_case;
---------------------------------------
architecture sample of decoder_case is
begin
process(X,CHK)
begin
if (CHK = '1') then
case X is
when "00" => Y <= "0001";
when "01" => Y <= "0010";
when "10" => Y <= "0100";
when "11" => Y <= "1000";
end case;
else
Y <= "1111";
end if;
end process;
end sample;
*****************************************************************************
2.For-loop
for-loop : 순차처리문이다. 루프변수가 1씩 증가 또는 감소하며 최종값에 도달할 때까지 loop문에 둘러싸인 순차처리문을 반복처리한다.
*****************************************************************************
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.all;
-----------입출력 포트 설정------------
entity decoder_loop is
port ( X : in std_logic_vector(1 downto 0);
Y : out std_logic_vector(3 downto 0));
end decoder_loop;
architecture sample of decoder_loop is
begin
process(X)
begin
for i in 3 downto 0 loop
if( X = i ) then
Y(i) <='1';
else
Y(i) <='0';
end if;
end loop;
end process;
end sample;
*****************************************************************************
Overflow란? (0) | 2008.10.14 |
---|---|
Difference of Latch & Flip/flop (0) | 2008.10.08 |
감가산 연산시 Overflow 해결법 (0) | 2008.10.08 |
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
Overflow란? (0) | 2008.10.14 |
---|---|
2X4 Decoder 설계 VHDL - case & for-loop (0) | 2008.10.14 |
감가산 연산시 Overflow 해결법 (0) | 2008.10.08 |
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
1. 문제
- 4비트 감가산 연산시 발생할 수 있는 오류 overflow를 해결하는 방법을 서술하시오.
2. 문제 분석
- 4비트 감가산시 입력의 연산 결과값이 출력범위를 넘어서면 overflow가 발생한다. 이를 해결하지 않으면 결과값이 쓰레기값이 출력되어 원하는 값을 얻어낼 수 없다.
3. VHDL code
5. 결론 및 고찰
-결론 : 감가산시 Overflow가 방생하여 원하지 않은 결과값이 발생하는 것을 방지하기위해 출력값의 범위를 입력값보다 더 넓게 설정한다.
가산시(출력=out1) : 출력값의 범위를 넓혀 Overflow의 발생을 방지하였다.
감산시(출력=out2) : 이진수 뺄셈을 하는 절차에 따라 문제를 해결하기위해서 tem1과 tem1라는 변수를 만들었다. 예를 들어 a - b를 하는데 a가 클 경우에는 Overflow가 발생하지않는다. 하지만 b가 더 크게 될 경우 결과값이 음수의 범위로 넘어가게 되고 이를 처리해 주어야한다. b를 2의보수를 취해 a와 더하고 그 값에 다시 2의 보수를 취하여 빼기 연산의 결과값을 얻었고 이를 함수 구현에 적용하였다.
Simulation상의 out2에서 보면 결과값이 음수의 범위로 넘어간 경우 최상위비트를 1로 주어 음수임을 표시하였다.
2X4 Decoder 설계 VHDL - case & for-loop (0) | 2008.10.14 |
---|---|
Difference of Latch & Flip/flop (0) | 2008.10.08 |
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
감산기 VHDL (0) | 2008.10.08 |
1. 문제
- clock의 변화를 이용하여 And 연산을 처리하는 VHDL을 작성하라.
2. 문제 분석
- latch : if의 조건이 레벨(lever trigger)에 의해 출력이 변화된다.
- flip/flop : if의 조건이 신호의 상승 혹은 하강에 의해(rising edge,혹은 falling edge trigger) 출력이 변화된다.
- 출력의 상승과 하강을 event라는 속성으로 표현한다.
3. VHDL code
4. Simulation
5. 결론 및 고찰
-결론 : 출력값에 변화가 있는 부분은 100.0ns를 조금 지나친 부분과 300.0ns를 조금 지나친 부분이다. 100.0ns에서 입력 in_a와 in_b의 값이 각각 1이고 clk이 0에서 1로 변화하였으므로 out_c의 값이 1로 변화하였다. 300.0ns에서도 입력 in_a와 in_b의 값이 각각 1과 0이고 clk의 값이 0에서 1로 변화하였다. 따라서 out_c의 값이 1에서 0으로 변화하였다.
설계된 VHDL문 상에 선언하길 clk이 ‘0‘에서 ’1‘이 될 때 주어진 명령문 And 연산을 실행하게 하였다.
Difference of Latch & Flip/flop (0) | 2008.10.08 |
---|---|
감가산 연산시 Overflow 해결법 (0) | 2008.10.08 |
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
감산기 VHDL (0) | 2008.10.08 |
Masking (Constant) (0) | 2008.10.08 |
1. 문제
- Signal의 Type 지정을 정수형(Integer)으로 하여 4bit의 감가산기를 설계하라. (출력범위 Range에 주의 할 것)
2. 문제 분석
- ieee.std_logic_arith.all 파일을 불러옴 으로써 입.출력 범위를 integer로 선언하여 쓸 수 있다.
- range 15 to 0 -> 3 downto 0 과 같은 범위로 설정된다.
3. VHDL code
4. Simulation
감가산 연산시 Overflow 해결법 (0) | 2008.10.08 |
---|---|
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
감산기 VHDL (0) | 2008.10.08 |
Masking (Constant) (0) | 2008.10.08 |
Variable을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
1. 문제
- 위의 VHDL 설계에서 입력신호 A에서 B를 뺀 값 결과를 y_out에 출력하는 VHDL을 작성하라.
2. 문제 분석
- 덧셈을 하는 과정과 달리 뺄셈은 음수의 영역에 대한 이해가 필요하다.
1의 보수를 취해 덧셈을 하는 방법과 2의 보수를 취해 덧셈을 하는 방법이 있다. 1의 보수를 사용하는 경우 캐리의 발생 여부에 따라 결과값에 1을 더하거나 않거나 하는 경우가 생기지만 2의 보수를 사용하는 경우는 캐리를 무시할 수 있어 더욱 편하고 효율적이다. 만약 캐리가 발생하지 않으면 결과값이 음수인 것이 되어 2의 보수인 경우는 다시 2의 보수로 1의 보수인 경우는 다시 1의 보수로 바꾸어줍니다 대신 부호는 음수가 된다.
Ex) 15-28
28의 1의 보수를 이용한 방법
15 = 0000 1111
28'= 1110 0011
----------------
1111 0010 캐리가 발생하지 않았으므로 다시 1의 보수로 바꾼다. 0000 1101 이 되어 - 13 이다.
28의 2의 보수를 이용한 방법
15 = 0000 1111
28' = 1110 0100
--------------
1111 0011 캐리가 발생하지 않았으므로 다시 2의 보수로 바꾼다. 0000 1101 이 되어 역시 -13 이다.
3. VHDL code
4. Simulation
5. 결론 및 고찰
- 결론 : 0 - 6 = 1A (-6)
1A => 1 1010 최상위비트 1은 음수를 뜻하고 뒤의 A을 2의 보수를 취하면 -6이 됨을 알 수 있다.
만약 출력값의 범위를 (5 downto 0)로 설정해주면 출력값이 3A가 나온다.
이 역시 3A => 11 1010 이 되어 최상위비트를 제외한뒤 2의 보수를 취하면 역시 -6이 됨을 알 수 있다.
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
---|---|
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
Masking (Constant) (0) | 2008.10.08 |
Variable을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
Signal을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
1. 문제
- 위의 VHDL 설계에서 sel의 값에 의해서 하위 2비트, 혹은 상위 2비트가 출력으로 전송되었다. 이 때 mask된 비트는 '0'으로 고정되어 있다. mask된 비트가 '1'로 고정되는 회로를 설계하여라.
2. 문제 분석
- constant : 초기에 선언한 상수의 값을 유지하는데 사용하며, VHDL문장 작성에 있어 수정이나 확장에 도움을 준다. 대입기호 :=를 사용하며 초기값이 즉시 대입되고 한번 대입된값을 바꿀수 없다.
3. VHDL code
library ieee;
use ieee.std_logic_1164.all;
entity exam5 is
port (k1: in std_logic_vector(3 downto 0);
sel: in std_logic;
y_out: out std_logic_vector(3 downto 0) );
end exam5;
architecture exam of exam5 is
constant mark1 : std_logic_vector := "0011";
constant mark2 : std_logic_vector := "1100";
begin
process(sel,k1)
begin
if(sel='1') then
y_out <= not(k1 xor mark1) or k1 ;
else
y_out <= k1 and mark2;
end if;
end process;
end exam;
4. Simulation
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
---|---|
감산기 VHDL (0) | 2008.10.08 |
Variable을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
Signal을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
입력 Signal 비교기 VHDL (Process) (0) | 2008.10.08 |
Variable 방식 : process나 부프로그램(function과 procedure)에서만 사용되며 variable이 지니는 값도 내적변수이다. 대입기호 :=는 즉시라는 의미를 가지고 있으며 <=과 달리 즉시 대입된다.
VHDL code
library ieee;
use ieee.std_logic_1164.all;
entity exam4 is
port( a, b, c_in : in std_logic;
s, c_out : out std_logic);
end exam4;
architecture exam of exam4 is
begin
process(a, b, c_in)
variable s1,c1,c2 : std_logic;
begin
s1 := a xor b;
c1 := a and b;
s <= s1 xor c_in;
c2 := s1 and c_in;
c_out <= c1 or c2;
end process;
end exam;
감산기 VHDL (0) | 2008.10.08 |
---|---|
Masking (Constant) (0) | 2008.10.08 |
Signal을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
입력 Signal 비교기 VHDL (Process) (0) | 2008.10.08 |
입력 Signal의 비교기 VHDL(자료흐름) (0) | 2008.10.08 |
1. 문제
- 다음의 전가산기를 signal을 이용하여 구현하여 보아라.
2. 문제 분석
- signal방식 : 대입기호 <=는 즉시 대입되는 것이 아니라 필요한 시점에서 대입된다. signal 선언을 architecture와 begin 사이에 선언된다.
- 전가산기 : 반가산기가 2진수의 한 자릿수만 계산할 수 있는 것과는 달리 전가산기는 n bit의 2진수 덧셈을 위해 아랫자리에서 올라온 자리올림을 함께 계산한다. 즉, 두 개의 2진수 A와 B에 자리올림까지 함께 더하는 회로이다.
- 진리표
a |
b |
c_in |
s |
c_out |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
- 논리 회로
3. VHDL code
library ieee;
use ieee.std_logic_1164.all;
entity exam3 is
port( a, b, c_in : in std_logic;
s, c_out : out std_logic);
end exam3;
architecture exam of exam3 is
signal s1,c1,c2 : std_logic;
begin
s1 <= a xor b;
c1 <= a and b;
s <= s1 xor c_in;
c2 <= s1 and c_in;
c_out <= c1 or c2;
end exam;
4. Simulation
감산기 VHDL (0) | 2008.10.08 |
---|---|
Masking (Constant) (0) | 2008.10.08 |
Variable을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
입력 Signal 비교기 VHDL (Process) (0) | 2008.10.08 |
입력 Signal의 비교기 VHDL(자료흐름) (0) | 2008.10.08 |