data_gen.cpp revision 12855
19850Sandreas.hansson@arm.com/*****************************************************************************
29850Sandreas.hansson@arm.com
39850Sandreas.hansson@arm.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
49850Sandreas.hansson@arm.com  more contributor license agreements.  See the NOTICE file distributed
59850Sandreas.hansson@arm.com  with this work for additional information regarding copyright ownership.
69850Sandreas.hansson@arm.com  Accellera licenses this file to you under the Apache License, Version 2.0
79850Sandreas.hansson@arm.com  (the "License"); you may not use this file except in compliance with the
89850Sandreas.hansson@arm.com  License.  You may obtain a copy of the License at
99850Sandreas.hansson@arm.com
109850Sandreas.hansson@arm.com    http://www.apache.org/licenses/LICENSE-2.0
119850Sandreas.hansson@arm.com
129850Sandreas.hansson@arm.com  Unless required by applicable law or agreed to in writing, software
139850Sandreas.hansson@arm.com  distributed under the License is distributed on an "AS IS" BASIS,
149850Sandreas.hansson@arm.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
159850Sandreas.hansson@arm.com  implied.  See the License for the specific language governing
169850Sandreas.hansson@arm.com  permissions and limitations under the License.
179850Sandreas.hansson@arm.com
189850Sandreas.hansson@arm.com *****************************************************************************/
199850Sandreas.hansson@arm.com
209850Sandreas.hansson@arm.com/*****************************************************************************
219850Sandreas.hansson@arm.com
229850Sandreas.hansson@arm.com  data_gen.cpp --
239850Sandreas.hansson@arm.com
249850Sandreas.hansson@arm.com  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
259850Sandreas.hansson@arm.com
269850Sandreas.hansson@arm.com *****************************************************************************/
279850Sandreas.hansson@arm.com
289850Sandreas.hansson@arm.com/*****************************************************************************
299850Sandreas.hansson@arm.com
309850Sandreas.hansson@arm.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
319850Sandreas.hansson@arm.com  changes you are making here.
329850Sandreas.hansson@arm.com
339850Sandreas.hansson@arm.com      Name, Affiliation, Date:
349850Sandreas.hansson@arm.com  Description of Modification:
359850Sandreas.hansson@arm.com
369850Sandreas.hansson@arm.com *****************************************************************************/
379850Sandreas.hansson@arm.com
389850Sandreas.hansson@arm.com#include "common.h"
397768SN/A#include "add_chain.h"
407768SN/A
417768SN/A/******************************************************************************/
429850Sandreas.hansson@arm.com/***************************    data_gen Function        **********************/
43/******************************************************************************/
44
45SC_MODULE( DATA_GEN )
46{
47    SC_HAS_PROCESS( DATA_GEN );
48
49    sc_in_clk clk;
50
51  /*** Input and Output Ports ***/
52  const sc_signal<bool>&       	ready;
53        signal_bool_vector8&   	data;
54        sc_signal<int>&		addr;
55
56  /*** Constructor ***/
57  DATA_GEN (   sc_module_name                	NAME,
58                     sc_clock&            	TICK_N,
59               const sc_signal<bool>&    	READY,
60                     signal_bool_vector8& 	DATA,
61  		     sc_signal<int>&		ADDR   )
62
63    :
64		ready (READY),
65              	data  (DATA),	// 8 bits
66		addr  (ADDR)
67
68    {
69	    clk (TICK_N);
70        SC_CTHREAD( entry, clk.neg() );
71    }
72
73  /*** Call to Process Functionality ***/
74  void entry();
75
76};
77
78void
79DATA_GEN::entry()
80{
81  while(true) {
82
83/**  WAIT FOR POSEDGE OF ready  **/
84
85    do { wait(); } while (ready == 1);		// Posedge ready
86    do { wait(); } while (ready == 0);
87
88/**  CHECK TO SEE IF THE END OF MEMORY HAS BEEN REACHED  **/
89
90    if(addr.read() > LIMIT) { 		// if(addr > LIMIT)
91	break;
92    }
93
94/**  WRITE VALUE OF MEMORY AT CURRENT ADDRESS TO data  **/
95
96    data.write(mem[addr.read()]);	// data = mem[addr]
97
98/**  INCREMENT addr BY 1  **/
99
100    addr.write(addr.read() + 1);   	// addr = addr + 1
101  }
102
103}
104
105void
106f_DATA_GEN (   const char*          NAME,
107                     sc_clock&      TICK,
108               const sc_signal<bool>&     READY,
109                     signal_bool_vector8& DATA,
110                     sc_signal<int>&      ADDR   )
111
112{
113        new DATA_GEN(NAME, TICK, READY, DATA, ADDR);
114}
115
116