Study Life/VHDL2010.11.01 21:17

수 정렬회로는 두 수를 입력 받아서 크기를 비교한 후에 큰 수를 Max에 작은 수를 Min으로 출력하는 회로이다. 출력을 세그먼트로 나타내기 위해 VHDL에 세그먼트 출력을 추가하였으며 Schematic에선 포기하였다.

VHDL 코드

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
package my_package is
constant input_width : integer := 4;
constant output_width : integer := 4;
subtype input_value is integer range 0 to 2**input_width-1;
subtype output_value is integer range 0 to 2**output_width-1;
end my_package;

library ieee;
use ieee.std_logic_1164.all;
use work.my_package.all;

entity Sorting1 is
port( ena : in std_logic;
a, b : in input_value;
max, min : out output_value;
seg_1, seg_2 : out std_logic_vector(6 downto 0));
end Sorting1;

architecture design of Sorting1 is
begin
process(a, b)
variable x, y : integer;
begin
if ena = '1' then
if a >b then
x := a;
y := b;
else
x := b;
y := a;
end if;

max <= x;
min <= y;

case x is
when 0 => seg_1 <= "1111110";
when 1 => seg_1 <= "0110000";
when 2 => seg_1 <= "1101101";
when 3 => seg_1 <= "1111001";
when 4 => seg_1 <= "0110011";
when 5 => seg_1 <= "1011011";
when 6 => seg_1 <= "1011111";
when 7 => seg_1 <= "1110000";
when 8 => seg_1 <= "1111111";
when 9 => seg_1 <= "1111011";
when 10 => seg_1 <= "1110110";
when 11 => seg_1 <= "0011111";
when 12 => seg_1 <= "1001110";
when 13 => seg_1 <= "0111101";
when 14 => seg_1 <= "1001111";
when 15 => seg_1 <= "1000111";
when others => null;
end case;

case y is
when 0 => seg_2 <= "1111110";
when 1 => seg_2 <= "0110000";
when 2 => seg_2 <= "1101101";
when 3 => seg_2 <= "1111001";
when 4 => seg_2 <= "0110011";
when 5 => seg_2 <= "1011011";
when 6 => seg_2 <= "1011111";
when 7 => seg_2 <= "1110000";
when 8 => seg_2 <= "1111111";
when 9 => seg_2 <= "1111011";
when 10 => seg_2 <= "1110110";
when 11 => seg_2 <= "0011111";
when 12 => seg_2 <= "1001110";
when 13 => seg_2 <= "0111101";
when 14 => seg_2 <= "1001111";
when 15 => seg_2 <= "1000111";
when others => null;
end case;
end if;
end process;
end design;

Schematic

 
크기비교기의 출력에 따라서 Max와 Min에 A 와 B 입력이 선택되어 들어가도록 만들었다. 세그먼트출력의 경우 VHDL이 편리한 점이 있는 듯하였다. 세그먼트에 9까지 표현이 쉽지만 그 이상의 수를 표현하기위해선 세그먼트 회로자체를 바꿔 줄 필요를 느꼈다. VHDL의 경우로는 쉽게 나오게 할 수 있지만 말이다.

시뮬레이션 결과
 

'Study Life > VHDL' 카테고리의 다른 글

패리티 발생기 설계  (0) 2010.11.04
수의 정렬회로  (0) 2010.11.01
우선순위 인코더  (4) 2010.10.21
Posted by Rsubs

댓글을 달아 주세요