aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/vests/vhdl-93/ashenden/compliant/ch_14_fg_14_05.vhd
blob: e0784d446f1620a05a757eda8e5fcf56b3027c09 (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
-- Copyright (C) 1996 Morgan Kaufmann Publishers, Inc

-- This file is part of VESTs (Vhdl tESTs).

-- VESTs is free software; you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the
-- Free Software Foundation; either version 2 of the License, or (at
-- your option) any later version. 

-- VESTs is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-- for more details. 

-- You should have received a copy of the GNU General Public License
-- along with VESTs; if not, write to the Free Software Foundation,
-- Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 

-- ---------------------------------------------------------------------
--
-- $Id: ch_14_fg_14_05.vhd,v 1.2 2001-10-26 16:29:35 paw Exp $
-- $Revision: 1.2 $
--
-- ---------------------------------------------------------------------

library ieee;  use ieee.std_logic_1164.all;

               entity master_slave_flipflop is
                 port ( phi1, phi2 : in std_logic;
                        d : in std_logic;
                        q : out std_logic );
               end entity master_slave_flipflop;


               architecture behavioral of master_slave_flipflop is

                 signal master_d : std_logic;

               begin

                 master_d <= d when phi1 = '1';

                 q <= master_d when phi2 = '1';

               end architecture behavioral;





-- code from book

               library ieee;  use ieee.std_logic_1164.all;

               entity shift_reg is
                 port ( phi1, phi2 : in std_logic;
                        serial_data_in : in std_logic;
                        parallel_data : inout std_logic_vector );
               end entity shift_reg;

--------------------------------------------------

               architecture cell_level of shift_reg is

                 alias normalized_parallel_data :
                   std_logic_vector(0 to parallel_data'length - 1)
                   is parallel_data;

                 component master_slave_flipflop is
                                                   port ( phi1, phi2 : in std_logic;
                                                          d : in std_logic;
                                                          q : out std_logic );
                 end component master_slave_flipflop;

               begin

                 reg_array : for index in normalized_parallel_data'range generate
                 begin

                   first_cell : if index = 0 generate
                   begin
                     cell : component master_slave_flipflop
                       port map ( phi1, phi2,
                                  d => serial_data_in,
                                  q => normalized_parallel_data(index) );
                   end generate first_cell;

                   other_cell : if index /= 0 generate
                   begin
                     cell : component master_slave_flipflop
                       port map ( phi1, phi2,
                                  d => normalized_parallel_data(index - 1),
                                  q => normalized_parallel_data(index) );
                   end generate other_cell;

                 end generate reg_array;

               end architecture cell_level;

-- end code from book



               library ieee;  use ieee.std_logic_1164.all;

               entity fg_14_05 is
               end entity fg_14_05;


               architecture test of fg_14_05 is

                 signal phi1, phi2, serial_data_in : std_logic := '0';
                 signal parallel_data : std_logic_vector(3 downto 0);

               begin

                 dut : entity work.shift_reg(cell_level)
                   port map ( phi1 => phi1, phi2 => phi2,
                              serial_data_in => serial_data_in,
                              parallel_data => parallel_data );

                 clock_gen : process is
                 begin
                   phi1 <= '1', '0' after 4 ns;
                   phi2 <= '1' after 5 ns, '0' after 9 ns;
                   wait for 10 ns;
                 end process clock_gen;

                 stimulus : process is
                 begin
                   serial_data_in <= '0';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '0';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '0';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '0';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '0';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '1';  wait until phi2 = '1';
                   serial_data_in <= '0';

                   wait;
                 end process stimulus;

               end architecture test;