
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50


본문내용
ntity div1 is
port(
clk: in std_logic;
in_data: in integer range 0 to 999;
o_data: out std_logic_vector(15 downto 0);
--o_data_100: out std_logic_vector(3 downto 0);
--o_data_10: out std_logic_vector(3 downto 0);
--o_data_1: out std_logic_vector(3 downto 0);
o_cmplt: out std_logic
);
end div1;
architecture arc of div1 is
signal mode: integer range 0 to 3;
signal a, b, c : std_logic_vector(3 downto 0);
signal c_1 : integer range 0 to 9;
begin
process(clk)
variable buf_data: integer range 0 to 999;
variable cnt: integer range 0 to 3;
begin
if clk'event and clk = '1' then
if mode = 0 then
buf_data := in_data;
mode <= 1;
elsif mode = 1 then
if buf_data >= 900 then
buf_data := buf_data - 900;
a <= "1001";
mode <= 2;
elsif buf_data >= 800 then
buf_data := buf_data - 800;
a <= "1000";
mode <= 2;
elsif buf_data >= 700 then
buf_data := buf_data - 700;
a <= "0111";
mode <= 2;
elsif buf_data >= 600 then
buf_data := buf_data - 600;
a <= "0110";
mode <= 2;
elsif buf_data >= 500 then
buf_data := buf_data - 500;
a <= "0101";
mode <= 2;
elsif buf_data >= 400 then
buf_data := buf_data - 400;
a <= "0100";
mode <= 2;
elsif buf_data >= 300 then
buf_data := buf_data - 300;
a <= "0011";
mode <= 2;
elsif buf_data >= 200 then
buf_data := buf_data - 200;
a <= "0010";
mode <= 2;
elsif buf_data >= 100 then
buf_data := buf_data - 100;
a <= "0001";
mode <= 2;
else
a <= "0000";
mode <= 2;
end if;
elsif mode = 2 then
if buf_data >= 90 then
buf_data := buf_data - 90;
b <= "1001";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 80 then
buf_data := buf_data - 80;
b <= "1000";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 70 then
buf_data := buf_data - 70;
b <= "0111";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 60 then
buf_data := buf_data - 60;
b <= "0110";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 50 then
buf_data := buf_data - 50;
b <= "0101";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 40 then
buf_data := buf_data - 40;
b <= "0100";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 30 then
buf_data := buf_data - 30;
b <= "0011";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 20 then
buf_data := buf_data - 20;
b <= "0010";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 10 then
buf_data := buf_data - 10;
b <= "0001";
c_1 <= buf_data;
mode <= 3;
else
b <= "0000";
c_1 <= buf_data;
mode <= 3;
end if;
elsif mode = 3 then
--o_data_100 <= a;
--o_data_10 <= b;
--o_data_1 <= c;
o_data(15 downto 12) <= a;
o_data(11 downto 8) <= b;
o_data(7 downto 4) <= c;
o_data(3 downto 0) <= "0000";
if cnt = 3 then
o_cmplt <= '0';
mode <= 0;
cnt := 0;
else
cnt := cnt + 1;
mode <= 3;
o_cmplt <= '1';
end if;
else
mode <= 0;
end if;
end if;
end process;
process(clk)
begin
if clk'event and clk = '1' then
case c_1 is
when 0 =>
c <= "0000";
when 1 =>
c <= "0001";
when 2 =>
c <= "0010";
when 3 =>
c <= "0011";
when 4 =>
c <= "0100";
when 5 =>
c <= "0101";
when 6 =>
c <= "0110";
when 7 =>
c <= "0111";
when 8 =>
c <= "1000";
when 9 =>
c <= "1001";
when others => null;
end case;
end if;
end process;
end arc;
port(
clk: in std_logic;
in_data: in integer range 0 to 999;
o_data: out std_logic_vector(15 downto 0);
--o_data_100: out std_logic_vector(3 downto 0);
--o_data_10: out std_logic_vector(3 downto 0);
--o_data_1: out std_logic_vector(3 downto 0);
o_cmplt: out std_logic
);
end div1;
architecture arc of div1 is
signal mode: integer range 0 to 3;
signal a, b, c : std_logic_vector(3 downto 0);
signal c_1 : integer range 0 to 9;
begin
process(clk)
variable buf_data: integer range 0 to 999;
variable cnt: integer range 0 to 3;
begin
if clk'event and clk = '1' then
if mode = 0 then
buf_data := in_data;
mode <= 1;
elsif mode = 1 then
if buf_data >= 900 then
buf_data := buf_data - 900;
a <= "1001";
mode <= 2;
elsif buf_data >= 800 then
buf_data := buf_data - 800;
a <= "1000";
mode <= 2;
elsif buf_data >= 700 then
buf_data := buf_data - 700;
a <= "0111";
mode <= 2;
elsif buf_data >= 600 then
buf_data := buf_data - 600;
a <= "0110";
mode <= 2;
elsif buf_data >= 500 then
buf_data := buf_data - 500;
a <= "0101";
mode <= 2;
elsif buf_data >= 400 then
buf_data := buf_data - 400;
a <= "0100";
mode <= 2;
elsif buf_data >= 300 then
buf_data := buf_data - 300;
a <= "0011";
mode <= 2;
elsif buf_data >= 200 then
buf_data := buf_data - 200;
a <= "0010";
mode <= 2;
elsif buf_data >= 100 then
buf_data := buf_data - 100;
a <= "0001";
mode <= 2;
else
a <= "0000";
mode <= 2;
end if;
elsif mode = 2 then
if buf_data >= 90 then
buf_data := buf_data - 90;
b <= "1001";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 80 then
buf_data := buf_data - 80;
b <= "1000";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 70 then
buf_data := buf_data - 70;
b <= "0111";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 60 then
buf_data := buf_data - 60;
b <= "0110";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 50 then
buf_data := buf_data - 50;
b <= "0101";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 40 then
buf_data := buf_data - 40;
b <= "0100";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 30 then
buf_data := buf_data - 30;
b <= "0011";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 20 then
buf_data := buf_data - 20;
b <= "0010";
c_1 <= buf_data;
mode <= 3;
elsif buf_data >= 10 then
buf_data := buf_data - 10;
b <= "0001";
c_1 <= buf_data;
mode <= 3;
else
b <= "0000";
c_1 <= buf_data;
mode <= 3;
end if;
elsif mode = 3 then
--o_data_100 <= a;
--o_data_10 <= b;
--o_data_1 <= c;
o_data(15 downto 12) <= a;
o_data(11 downto 8) <= b;
o_data(7 downto 4) <= c;
o_data(3 downto 0) <= "0000";
if cnt = 3 then
o_cmplt <= '0';
mode <= 0;
cnt := 0;
else
cnt := cnt + 1;
mode <= 3;
o_cmplt <= '1';
end if;
else
mode <= 0;
end if;
end if;
end process;
process(clk)
begin
if clk'event and clk = '1' then
case c_1 is
when 0 =>
c <= "0000";
when 1 =>
c <= "0001";
when 2 =>
c <= "0010";
when 3 =>
c <= "0011";
when 4 =>
c <= "0100";
when 5 =>
c <= "0101";
when 6 =>
c <= "0110";
when 7 =>
c <= "0111";
when 8 =>
c <= "1000";
when 9 =>
c <= "1001";
when others => null;
end case;
end if;
end process;
end arc;
소개글