Project

General

Profile

Download (5.52 KB) Statistics
| Branch: | Tag: | Revision:
1 d93979b7 Arnaud Dieumegard
2
-- Copyright (C) 1996 Morgan Kaufmann Publishers, Inc
3
4
-- This file is part of VESTs (Vhdl tESTs).
5
6
-- VESTs is free software; you can redistribute it and/or modify it
7
-- under the terms of the GNU General Public License as published by the
8
-- Free Software Foundation; either version 2 of the License, or (at
9
-- your option) any later version. 
10
11
-- VESTs is distributed in the hope that it will be useful, but WITHOUT
12
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
-- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14
-- for more details. 
15
16
-- You should have received a copy of the GNU General Public License
17
-- along with VESTs; if not, write to the Free Software Foundation,
18
-- Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
19
20
-- ---------------------------------------------------------------------
21
--
22
-- $Id: ch_14_fg_14_01.vhd,v 1.2 2001-10-26 16:29:35 paw Exp $
23
-- $Revision: 1.2 $
24
--
25
-- ---------------------------------------------------------------------
26
27
library ieee;  use ieee.std_logic_1164.all;
28
29
               entity D_flipflop is
30
                 port ( clk : in std_logic;  d : in std_logic;
31
                 q : out std_logic );
32
               end entity D_flipflop;
33
34
35
               architecture synthesized of D_flipflop is
36
               begin
37
                 q <= d when not clk'stable and (To_X01(clk) = '1') and 
38
                      (To_X01(clk'last_value) = '0');
39
               end architecture synthesized;
40
41
42
               library ieee;  use ieee.std_logic_1164.all;
43
44
               entity tristate_buffer is
45
                 port ( a : in std_logic;
46
                        en : in std_logic;
47
                        y : out std_logic );
48
               end entity tristate_buffer;
49
50
51
               architecture synthesized of tristate_buffer is
52
               begin
53
                 y <= 'X' when is_X(en) else
54
                      a  when To_X01(en) = '1' else
55
                      'Z';
56
               end architecture synthesized;
57
58
59
60
-- code from book (in Figure 14-1)
61
62
               library ieee;  use ieee.std_logic_1164.all;
63
64
               entity register_tristate is
65
                 generic ( width : positive );
66
                 port ( clock : in std_logic;
67
                        out_enable : in std_logic;
68
                        data_in : in std_logic_vector(0 to width - 1);
69
                        data_out : out std_logic_vector(0 to width - 1) );
70
               end entity register_tristate;
71
72
--------------------------------------------------
73
74
               architecture cell_level of register_tristate is
75
76
                 component D_flipflop is
77
                                        port ( clk : in std_logic;  d : in std_logic;
78
                                        q : out std_logic );
79
                 end component D_flipflop;
80
81
                 component tristate_buffer is
82
                                             port ( a : in std_logic;
83
                                                    en : in std_logic;
84
                                                    y : out std_logic );
85
                 end component tristate_buffer;
86
87
               begin
88
89
                 cell_array : for bit_index in 0 to width - 1 generate
90
91
                   signal data_unbuffered : std_logic;
92
93
                 begin
94
95
                   cell_storage : component D_flipflop
96
                     port map ( clk => clock, d => data_in(bit_index),
97
                                q => data_unbuffered );
98
99
                   cell_buffer : component tristate_buffer
100
                     port map ( a => data_unbuffered, en => out_enable,
101
                                y => data_out(bit_index) );
102
103
                 end generate cell_array;
104
105
               end architecture cell_level;
106
107
-- end code from book (in Figure 14-1)
108
109
110
-- code from book (in Figure 14-11)
111
112
               library cell_lib;
113
114
               configuration identical_cells of register_tristate is
115
116
                 for cell_level
117
118
                   for cell_array
119
120
                   for cell_storage : D_flipflop
121
                   use entity cell_lib.D_flipflop(synthesized);
122
               end for;
123
124
               for cell_buffer : tristate_buffer
125
                 use entity cell_lib.tristate_buffer(synthesized);
126
               end for;
127
128
               end for;
129
130
               end for;
131
132
               end configuration identical_cells;
133
134
-- code from book (in Figure 14-11)
135
136
137
138
               library ieee;  use ieee.std_logic_1164.all;
139
140
               entity fg_14_01 is
141
               end entity fg_14_01;
142
143
144
               architecture test of fg_14_01 is
145
146
                 signal clk, en : std_logic;
147
                 signal d_in, d_out : std_logic_vector(0 to 3);
148
149
               begin
150
151
                 dut : configuration work.identical_cells
152
                   generic map ( width => d_in'length )
153
                   port map ( clock => clk, out_enable => en,
154
                              data_in => d_in, data_out => d_out );
155
156
                 stimulus : process is
157
                 begin
158
                   wait for 10 ns;
159
                   d_in <= "0000";  en <= '0';  clk <= '0';  wait for 10 ns;
160
                   clk <= '1', '0' after 5 ns;  wait for 10 ns;
161
                   en <= '1', '0' after 5 ns;   wait for 10 ns;
162
                   d_in <= "0101";              wait for 10 ns;
163
                   clk <= '1', '0' after 5 ns;  wait for 10 ns;
164
                   en <= 'H', '0' after 5 ns;   wait for 10 ns;
165
166
                   wait;
167
                 end process stimulus;
168
169
               end architecture test;
170
171
-- end not in book