OpenCores
URL https://opencores.org/ocsvn/qfp32/qfp32/trunk

Subversion Repositories qfp32

[/] [qfp32/] [trunk/] [Quartus/] [top.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 mgraep
-- Copyright (c) 2013 Malte Graeper (mgraep@t-online.de) All rights reserved.
2
 
3 2 mgraep
library IEEE;
4
use IEEE.std_logic_1164.all;
5
use IEEE.numeric_std.all;
6
 
7
library work;
8
use work.qfp32_unit_p.all;
9
use work.qfp_p.all;
10
 
11
entity Top is
12
 
13
  port (
14
    clock_50 : in  std_ulogic;
15
    key      : in  std_ulogic_vector(1 downto 0);
16
    sw       : in  std_ulogic_vector(3 downto 0);
17
    led      : out std_ulogic_vector(7 downto 0));
18
 
19
end Top;
20
 
21
architecture Rtl of Top is
22
 
23
  component qfp_unit
24
    generic (
25
      config : natural);
26
    port (
27
      clk_i      : in  std_ulogic;
28
      reset_n_i  : in  std_ulogic;
29
      cmd_i      : in  qfp_cmd_t;
30
      ready_o    : out std_ulogic;
31
      start_i    : in  std_ulogic;
32
      regA_i     : in  std_ulogic_vector(31 downto 0);
33
      regB_i     : in  std_ulogic_vector(31 downto 0);
34
      result_o   : out std_ulogic_vector(31 downto 0);
35
      cmp_gt_o   : out std_ulogic;
36
      cmp_z_o    : out std_ulogic;
37
      complete_o : out std_ulogic);
38
  end component;
39
 
40
  signal din : std_ulogic_vector(69 downto 0);
41
  signal dout : std_ulogic_vector(35 downto 0);
42
  signal count : unsigned(4 downto 0);
43
 
44
  signal clk      : std_ulogic;
45
  signal reset_n  : std_ulogic;
46
  signal cmd      : qfp_cmd_t;
47
  signal ready    : std_ulogic;
48
  signal start    : std_ulogic;
49
  signal regA     : std_ulogic_vector(31 downto 0);
50
  signal regB     : std_ulogic_vector(31 downto 0);
51
  signal result   : std_ulogic_vector(31 downto 0);
52
  signal cmp_gt   : std_ulogic;
53
  signal cmp_z    : std_ulogic;
54
  signal complete : std_ulogic;
55
 
56
begin  -- Rtl
57
 
58
  clk <= clock_50;
59
  reset_n <= key(0);
60
 
61
  process (clk, reset_n)
62
  begin  -- process
63
    if reset_n = '0' then               -- asynchronous reset (active low)
64
      din <= (others => '0');
65
      dout <= (others => '0');
66
      count <= to_unsigned(0,5);
67
    elsif clk'event and clk = '1' then  -- rising clock edge
68
      if count = to_unsigned(21,5) then
69
        count <= to_unsigned(0,5);
70
        din <= (others => '0');
71
        dout <= result & cmp_gt & cmp_z & complete & ready;
72
      else
73
        din <= din(din'length-5 downto 0) & sw;-- shift in
74
        dout <= "0000" & dout(dout'length-1 downto 4);
75
        count <= count+1;
76
      end if;
77
    end if;
78
  end process;
79
 
80
  cmd.unit <= unsigned(din(2 downto 0));
81
  cmd.sub_cmd <= din(4 downto 3);
82
  start <= din(5);
83
  regA <= din(37 downto 6);
84
  regB <= din(69 downto 38);
85
 
86
  led(3 downto 0) <= dout(3 downto 0);
87
 
88
  qfp_unit_1: qfp_unit
89
    generic map (
90
      config => qfp_config_add+qfp_config_mul+qfp_config_recp+qfp_config_misc)
91
    port map (
92
      clk_i      => clk,
93
      reset_n_i  => reset_n,
94
      cmd_i      => cmd,
95
      ready_o    => ready,
96
      start_i    => start,
97
      regA_i     => regA,
98
      regB_i     => regB,
99
      result_o   => result,
100
      cmp_gt_o   => cmp_gt,
101
      cmp_z_o    => cmp_z,
102
      complete_o => complete);
103
 
104
end Rtl;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.