Don't print random debug information
[ipdf/vfpu.git] / src / main.vhd
1 -- Simulates the fpu by reading signals from stdin and writing results to stdout
2 -- See COPYRIGHT.jop for the original copyright notice.
3
4 library ieee;
5 use ieee.std_logic_1164.all;
6 use ieee.std_logic_unsigned.all;
7 use ieee.math_real.all;
8 use ieee.std_logic_arith.all;
9 use ieee.std_logic_misc.all;
10 use std.textio.all;
11 use work.txt_util.all;
12
13 use work.fpupack.all;
14
15         -- fpu operations (fpu_op_i):
16                 -- ========================
17                 -- 000 = add, 
18                 -- 001 = substract, 
19                 -- 010 = multiply, 
20                 -- 011 = divide,
21                 -- 100 = square root
22                 -- 101 = unused
23                 -- 110 = unused
24                 -- 111 = unused
25                 
26         -- Rounding Mode: 
27         -- ==============
28         -- 00 = round to nearest even(default), 
29         -- 01 = round to zero, 
30         -- 10 = round up, 
31         -- 11 = round down
32
33
34 entity main is
35 end main;
36
37 architecture rtl of main is
38
39 component fpu 
40     port (
41         clk_i           : in std_logic;
42         opa_i           : in std_logic_vector(31 downto 0);   
43         opb_i           : in std_logic_vector(31 downto 0);
44         fpu_op_i                : in std_logic_vector(2 downto 0);
45         rmode_i                 : in std_logic_vector(1 downto 0);  
46         output_o        : out std_logic_vector(31 downto 0);
47                 ine_o                   : out std_logic;
48         overflow_o      : out std_logic;
49         underflow_o     : out std_logic;
50         div_zero_o      : out std_logic;
51         inf_o                   : out std_logic;
52         zero_o                  : out std_logic;
53         qnan_o                  : out std_logic;
54         snan_o                  : out std_logic;
55         start_i                 : in  std_logic;
56         ready_o                 : out std_logic 
57         );   
58 end component;
59
60 -- Assigning default values doesn't seem to help the error messages :(
61 signal clk_i : std_logic:= '1';
62 signal opa_i, opb_i : std_logic_vector(FP_WIDTH-1 downto 0) := (others => '0');
63 signal fpu_op_i         : std_logic_vector(2 downto 0) := (others => '0');
64 signal rmode_i : std_logic_vector(1 downto 0) := (others => '0');
65 signal output_o : std_logic_vector(FP_WIDTH-1 downto 0) := (others => '0');
66 signal start_i : std_logic := '1';
67 signal ready_o : std_logic := '1';
68 signal ine_o : std_logic := '0';
69 signal overflow_o : std_logic := '0';
70 signal underflow_o : std_logic := '0';
71 signal div_zero_o : std_logic := '0';
72 signal inf_o : std_logic := '0';
73 signal zero_o : std_logic := '0';
74 signal qnan_o : std_logic := '0';
75 signal snan_o : std_logic := '0';
76
77
78
79 signal slv_out : std_logic_vector(FP_WIDTH-1 downto 0);
80
81 constant CLK_PERIOD :time := 10 ns; -- period of clk period
82
83
84 begin
85
86     -- instantiate fpu
87     i_fpu: fpu port map (
88                         clk_i => clk_i,
89                         opa_i => opa_i,
90                         opb_i => opb_i,
91                         fpu_op_i =>     fpu_op_i,
92                         rmode_i => rmode_i,     
93                         output_o => output_o,  
94                         ine_o => ine_o,
95                         overflow_o => overflow_o,
96                         underflow_o => underflow_o,             
97                 div_zero_o => div_zero_o,
98                 inf_o => inf_o,
99                 zero_o => zero_o,               
100                 qnan_o => qnan_o,               
101                 snan_o => snan_o,
102                 start_i => start_i,
103                 ready_o => ready_o);            
104                         
105
106     ---------------------------------------------------------------------------
107     -- toggle clock
108     ---------------------------------------------------------------------------
109     clk_i <= not(clk_i) after 5 ns;
110
111
112     mainloop : process 
113                 --The operands and results are in Hex format. 
114                 file input_file: TEXT open read_mode is "STD_INPUT"; 
115
116                 variable file_line: line;
117                 variable str_in: string(FP_WIDTH/4 downto 1);
118                 variable str_fpu_op: string(3 downto 1);
119                 variable str_rmode: string(2 downto 1);
120
121
122
123     begin
124                 -- Read ops from input_file
125                 --print(str(ZERO_VECTOR));
126                 --print(str(INF));
127                 --print(str(QNAN));
128                 --print(str(SNAN));
129                 start_i <= '0';
130                 while not endfile(input_file) loop
131
132                         wait for CLK_PERIOD; 
133                         start_i <= '1';
134                         
135                         str_read(input_file,str_in);
136                         opa_i <= strhex_to_slv(str_in);
137                         
138                         str_read(input_file,str_in);
139                         opb_i <= strhex_to_slv(str_in);
140
141                         str_read(input_file,str_fpu_op);
142                         fpu_op_i <= strhex_to_slv(str_fpu_op)(2 downto 0);
143                         
144                         str_read(input_file,str_rmode);
145                         rmode_i <= strhex_to_slv(str_rmode)(1 downto 0);
146
147
148
149                         wait for CLK_PERIOD;
150                         start_i <= '0'; 
151                         wait until ready_o='1';
152                         
153                         --print("OpA"); print(hstr(opa_i));
154                         --print("OpB"); print(hstr(opb_i));
155                         --print("Opcode"); print(hstr(fpu_op_i));
156                         --print("Rmode"); print(hstr(rmode_i));
157                         
158
159
160                         print(hstr(output_o));
161                         
162                 end loop;               
163         wait;
164     end process mainloop;
165
166 end rtl;

UCC git Repository :: git.ucc.asn.au