speed.h revision 12855
112855Sgabeblack@google.com/***************************************************************************** 212855Sgabeblack@google.com 312855Sgabeblack@google.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412855Sgabeblack@google.com more contributor license agreements. See the NOTICE file distributed 512855Sgabeblack@google.com with this work for additional information regarding copyright ownership. 612855Sgabeblack@google.com Accellera licenses this file to you under the Apache License, Version 2.0 712855Sgabeblack@google.com (the "License"); you may not use this file except in compliance with the 812855Sgabeblack@google.com License. You may obtain a copy of the License at 912855Sgabeblack@google.com 1012855Sgabeblack@google.com http://www.apache.org/licenses/LICENSE-2.0 1112855Sgabeblack@google.com 1212855Sgabeblack@google.com Unless required by applicable law or agreed to in writing, software 1312855Sgabeblack@google.com distributed under the License is distributed on an "AS IS" BASIS, 1412855Sgabeblack@google.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512855Sgabeblack@google.com implied. See the License for the specific language governing 1612855Sgabeblack@google.com permissions and limitations under the License. 1712855Sgabeblack@google.com 1812855Sgabeblack@google.com *****************************************************************************/ 1912855Sgabeblack@google.com 2012855Sgabeblack@google.com/***************************************************************************** 2112855Sgabeblack@google.com 2212855Sgabeblack@google.com speed.h -- Definition of the speedometer. 2312855Sgabeblack@google.com 2412855Sgabeblack@google.com Original Author: Ali Dasdan, Synopsys, Inc. 2512855Sgabeblack@google.com 2612855Sgabeblack@google.com *****************************************************************************/ 2712855Sgabeblack@google.com 2812855Sgabeblack@google.com/***************************************************************************** 2912855Sgabeblack@google.com 3012855Sgabeblack@google.com MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112855Sgabeblack@google.com changes you are making here. 3212855Sgabeblack@google.com 3312855Sgabeblack@google.com Name, Affiliation, Date: 3412855Sgabeblack@google.com Description of Modification: 3512855Sgabeblack@google.com 3612855Sgabeblack@google.com *****************************************************************************/ 3712855Sgabeblack@google.com 3812855Sgabeblack@google.com#ifndef SPEED_H 3912855Sgabeblack@google.com#define SPEED_H 4012855Sgabeblack@google.com 4112855Sgabeblack@google.comSC_MODULE( speed_read_mod ) 4212855Sgabeblack@google.com{ 4312855Sgabeblack@google.com // Input ports: 4412855Sgabeblack@google.com sc_in<bool> start; // Becomes true if the car's started. 4512855Sgabeblack@google.com sc_in<bool> pulse; // Pulse coming from the pulse generator. 4612855Sgabeblack@google.com 4712855Sgabeblack@google.com // Output ports: 4812855Sgabeblack@google.com sc_out<double> filtered_speed; // Filtered speed. 4912855Sgabeblack@google.com 5012855Sgabeblack@google.com // Inout ports: 5112855Sgabeblack@google.com sc_inout<int> elapsed_time; 5212855Sgabeblack@google.com 5312855Sgabeblack@google.com // Internal signals: 5412855Sgabeblack@google.com sc_signal<double> raw_speed; 5512855Sgabeblack@google.com 5612855Sgabeblack@google.com // Compute speed. 5712855Sgabeblack@google.com void read_speed_proc(); 5812855Sgabeblack@google.com 5912855Sgabeblack@google.com // Filter speed. 6012855Sgabeblack@google.com void filter_speed_proc(); 6112855Sgabeblack@google.com 6212855Sgabeblack@google.com SC_CTOR( speed_read_mod ) 6312855Sgabeblack@google.com { 6412855Sgabeblack@google.com SC_THREAD( read_speed_proc ); 6512855Sgabeblack@google.com sensitive << pulse.pos(); 6612855Sgabeblack@google.com 6712855Sgabeblack@google.com SC_METHOD( filter_speed_proc ); 6812855Sgabeblack@google.com sensitive << raw_speed; 6912855Sgabeblack@google.com 7012855Sgabeblack@google.com raw_speed = 0.0; 7112855Sgabeblack@google.com } 7212855Sgabeblack@google.com}; 7312855Sgabeblack@google.com 7412855Sgabeblack@google.comSC_MODULE( speed_pwm_mod ) 7512855Sgabeblack@google.com{ 7612855Sgabeblack@google.com // Input ports: 7712855Sgabeblack@google.com sc_in<bool> start; // Becomes true if the car's started. 7812855Sgabeblack@google.com sc_in<double> filtered_speed; 7912855Sgabeblack@google.com 8012855Sgabeblack@google.com // Output ports: 8112855Sgabeblack@google.com sc_out<double> speed; // Displayed speed. 8212855Sgabeblack@google.com sc_out<double> angle; // Displayed angle. 8312855Sgabeblack@google.com 8412855Sgabeblack@google.com // Compute needle angle and drive the speedometer. 8512855Sgabeblack@google.com void pwm_driver_proc(); 8612855Sgabeblack@google.com 8712855Sgabeblack@google.com SC_CTOR( speed_pwm_mod ) 8812855Sgabeblack@google.com { 8912855Sgabeblack@google.com SC_METHOD( pwm_driver_proc ); 9012855Sgabeblack@google.com sensitive << filtered_speed; 9112855Sgabeblack@google.com } 9212855Sgabeblack@google.com}; 9312855Sgabeblack@google.com 9412855Sgabeblack@google.comSC_MODULE( speed_mod ) 9512855Sgabeblack@google.com{ 9612855Sgabeblack@google.com // Input ports: 9712855Sgabeblack@google.com sc_in_clk clk; // Clock to measure the time, needed to compute the speed. 9812855Sgabeblack@google.com sc_in<bool> start; // Becomes true if the car's started. 9912855Sgabeblack@google.com sc_in<bool> pulse; // Pulse coming from the pulse generator. 10012855Sgabeblack@google.com 10112855Sgabeblack@google.com // Output ports: 10212855Sgabeblack@google.com sc_out<double> speed; // Displayed speed. 10312855Sgabeblack@google.com sc_out<double> angle; // Displayed angle. 10412855Sgabeblack@google.com 10512855Sgabeblack@google.com // Internal signals: 10612855Sgabeblack@google.com sc_signal<int> elapsed_time; 10712855Sgabeblack@google.com sc_signal<double> filtered_speed; 10812855Sgabeblack@google.com 10912855Sgabeblack@google.com // Internal models: 11012855Sgabeblack@google.com speed_read_mod *read_mod; 11112855Sgabeblack@google.com speed_pwm_mod *pwm_mod; 11212855Sgabeblack@google.com 11312855Sgabeblack@google.com // Find the elapsed_time between NUM_PULSES_FOR_SPEED pulses. 11412855Sgabeblack@google.com void find_time_proc(); 11512855Sgabeblack@google.com 11612855Sgabeblack@google.com SC_CTOR( speed_mod ) 11712855Sgabeblack@google.com { 11812855Sgabeblack@google.com SC_METHOD( find_time_proc ); 11912855Sgabeblack@google.com sensitive << clk.pos(); 12012855Sgabeblack@google.com 12112855Sgabeblack@google.com read_mod = new speed_read_mod("read_mod"); 12212855Sgabeblack@google.com pwm_mod = new speed_pwm_mod("pwm_mod"); 12312855Sgabeblack@google.com 12412855Sgabeblack@google.com read_mod->start.bind(start); 12512855Sgabeblack@google.com read_mod->pulse.bind(pulse); 12612855Sgabeblack@google.com read_mod->elapsed_time.bind(elapsed_time); 12712855Sgabeblack@google.com read_mod->filtered_speed.bind(filtered_speed); 12812855Sgabeblack@google.com 12912855Sgabeblack@google.com pwm_mod->start.bind(start); 13012855Sgabeblack@google.com pwm_mod->filtered_speed.bind(filtered_speed); 13112855Sgabeblack@google.com pwm_mod->speed.bind(speed); 13212855Sgabeblack@google.com pwm_mod->angle.bind(angle); 13312855Sgabeblack@google.com 13412855Sgabeblack@google.com elapsed_time = 0; 13512855Sgabeblack@google.com filtered_speed = 0.0; 13612855Sgabeblack@google.com } 13712855Sgabeblack@google.com}; 13812855Sgabeblack@google.com 13912855Sgabeblack@google.com#endif 14012855Sgabeblack@google.com 141