112046Sgabeblack@google.com/***************************************************************************** 212046Sgabeblack@google.com 312046Sgabeblack@google.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412046Sgabeblack@google.com more contributor license agreements. See the NOTICE file distributed 512046Sgabeblack@google.com with this work for additional information regarding copyright ownership. 612046Sgabeblack@google.com Accellera licenses this file to you under the Apache License, Version 2.0 712046Sgabeblack@google.com (the "License"); you may not use this file except in compliance with the 812046Sgabeblack@google.com License. You may obtain a copy of the License at 912046Sgabeblack@google.com 1012046Sgabeblack@google.com http://www.apache.org/licenses/LICENSE-2.0 1112046Sgabeblack@google.com 1212046Sgabeblack@google.com Unless required by applicable law or agreed to in writing, software 1312046Sgabeblack@google.com distributed under the License is distributed on an "AS IS" BASIS, 1412046Sgabeblack@google.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512046Sgabeblack@google.com implied. See the License for the specific language governing 1612046Sgabeblack@google.com permissions and limitations under the License. 1712046Sgabeblack@google.com 1812046Sgabeblack@google.com *****************************************************************************/ 1912046Sgabeblack@google.com 2012046Sgabeblack@google.com/***************************************************************************** 2112046Sgabeblack@google.com 2212046Sgabeblack@google.com dist.cpp -- Implementation of the odometers. 2312046Sgabeblack@google.com 2412046Sgabeblack@google.com Original Author: Ali Dasdan, Synopsys, Inc. 2512046Sgabeblack@google.com 2612046Sgabeblack@google.com *****************************************************************************/ 2712046Sgabeblack@google.com 2812046Sgabeblack@google.com/***************************************************************************** 2912046Sgabeblack@google.com 3012046Sgabeblack@google.com MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112046Sgabeblack@google.com changes you are making here. 3212046Sgabeblack@google.com 3312046Sgabeblack@google.com Name, Affiliation, Date: 34 Description of Modification: 35 36 *****************************************************************************/ 37 38// $Log: dist.cpp,v $ 39// Revision 1.1.1.1 2006/12/15 20:26:24 acg 40// systemc_tests-2.3 41// 42// Revision 1.3 2006/01/19 00:48:19 acg 43// Andy Goodrich: Changes for the fact signal write checking is enabled. 44// 45// Revision 1.2 2006/01/18 00:23:50 acg 46// Change over from SC_NO_WRITE_CHECK to sc_write_check_enable() call. 47// 48 49#define SC_NO_WRITE_CHECK 50#include "systemc.h" 51#include "const.h" 52#include "dist.h" 53 54bool dist_compute_mod::prev_reset; 55double dist_compute_mod::total_compute_dist; 56double dist_compute_mod::partial_compute_dist; 57 58// Get the pulses for one distance increment. 59void 60dist_read_mod::get_dist_proc() 61{ 62 wait(); 63 64 bool ok = false; 65 66 while (true) { 67 68 // More than one pulse is needed for a distance increment. This 69 // function collects NUM_PULSES_FOR_DIST_INCR pulses for that 70 // purpose. 71 AWAIT(NUM_PULSES_FOR_DIST_INCR); 72 73 if (start) 74 ok = !ok; 75 else 76 ok = false; 77 78 ok_for_incr = ok; 79 } 80} 81 82// Compute total distance. 83void 84dist_compute_mod::compute_total_proc() 85{ 86 if (start) 87 total_compute_dist += 1.0; 88 else 89 total_compute_dist = 0.0; 90 91 total_dist = total_compute_dist; 92} 93 94// Compute partial distance. 95void 96dist_compute_mod::compute_partial_proc() 97{ 98 if (start) { 99 100 // Implement reset.event(): 101 if (prev_reset != (bool) reset) 102 partial_compute_dist = 0.0; 103 else 104 partial_compute_dist += 1.0; 105 106 prev_reset = reset; 107 108 } 109 else 110 partial_compute_dist = 0.0; 111 112 partial_dist = partial_compute_dist; 113} 114 115// LCD display driver. 116void 117dist_lcd_mod::lcd_driver_proc() 118{ 119 if (start) { 120 121 if (total_dist.event()) 122 total = total_dist * DIST_INCR; 123 124 if (partial_dist.event()) 125 partial = partial_dist * DIST_INCR; 126 127 } 128 else { 129 total = 0.0; 130 partial = 0.0; 131 } 132} 133 134// End of file 135