DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Аналіз програмної моделі процесу роботи арифметичного конвеєра

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
АМО
Група:
КІ
Коротко про документ

Про що ця робота

Звіт до лабораторної роботи присвячено аналізу програмної моделі процесу роботи арифметичного конвеєра з використанням мови SystemC. У роботі наведено лістинги модулів та результати імітаційного моделювання.

У роботі розглядаються

  • Програмна модель
  • Мова SystemC
  • Комп'ютерні системи
  • Моделювання
  • Архітектура ЕОМ

Зміст і розділи

  1. Мета роботи
  2. display.h
  3. numgen.h
  4. stage1.h
  5. stage2.h
  6. stage3.h
  7. display.cpp
  8. main.cpp
  9. numgen.cpp
  10. stage1.cpp
  11. stage2.cpp
  12. stage3.cpp
  13. stage4.cpp
  14. stage4.h
  15. Висновок
Для кого:Студенти та викладачі технічних спеціальностей вищих навчальних закладів.
Викладачі:Ігнатович А. О.

Ключові поняття

SystemCпрограмна модельмодультактовий сигналсигналмоделюванняпортроздільна здатність

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти, науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ Звіт до Лабораторної роботи №4 «Аналіз програмної моделі процесу роботи арифметичного конвеєра» Варіант 4 Перевірив: Ігнатович А.О. Львів 2013 Мета роботи: Навчитись здійснювати аналіз програмних моделей комп’ютерних систем, виконаних на мові System C. display.h: #ifndef DISPLAY_H #define DISPLAY_H #include "stage1.h" // Added by ClassView struct display : sc_module { sc_in<double> in; // input port 1 sc_in<bool> clk; // clock sc_in<double> diff; void print(); // method to display input port values //Constructor SC_CTOR( display ) { SC_METHOD( print ); // declare print as SC_METHOD and sensitive_pos << clk; // make it sensitive to positive clock edge } public: }; #endif numgen.h: #ifndef NUMGEN_H #define NUMGEN_H struct numgen : sc_module { sc_out<double> out1; //output 1 sc_out<double> out2; //output 2 sc_in<bool> clk; //clock // method to write values to the output ports void generate(); //Constructor SC_CTOR( numgen ) { SC_METHOD( generate ); //Declare generate as SC_METHOD and sensitive_pos << clk; //make it sensitive to positive clock edge } }; #endif stage1.h: #ifndef STAGE1_H #define STAGE1_H struct stage1 : sc_module { sc_in<double> in1; //input 1 sc_in<double> in2; //input 2 sc_out<double> sum; //output 1 sc_out<double> diff; //output 2 sc_in<bool> clk; //clock void addsub(); //method implementing functionality SC_CTOR( stage1 ) { SC_METHOD( addsub ); //Declare addsub as SC_METHOD and sensitive_pos << clk; //make it sensitive to positive clock edge } public: }; #endif stage2.h: #ifndef STAGE2_H #define STAGE2_H struct stage2 : sc_module { sc_in<double> sum; //input port 1 sc_in<double> diff; //input port 2 sc_out<double> prod; //output portik 1 sc_out<double> quot; //output portik 2 sc_in<bool> clk; //clock void multdiv(); //method providing functionality //Constructor SC_CTOR( stage2 ) { SC_METHOD( multdiv ); //Declare multdiv as SC_METHOD and sensitive_pos << clk; //make it sensitive to positive clock edge. } }; #endif stage3.h: #ifndef STAGE3_H #define STAGE3_H struct stage3: sc_module { sc_in<double> prod; //input port 1 sc_in<double> quot; //input port 2 sc_out<double> powr; //output port 1 sc_in<bool> clk; //clock void power(); //method implementing functionality SC_CTOR( stage3 ){ SC_METHOD( power ); //declare power as SC_METHOD and sensitive_pos << clk; //make it sensitive to positive clock edge } }; display.cpp: #include "systemc.h" #include "display.h" #include <stdio.h> //Definition of print method void display::print() { printf("Result = %f CLK=%d\n", in.read(),clk.read()); printf("prom rezultati stage1 %d ",diff.read()); } main.cpp: #include "systemc.h" #include "stage1.h" #include "stage2.h" #include "stage3.h" #include "display.h" #include "numgen.h" #define NS * 1e-9 int sc_main(int ac, char *av[]) { //Signals sc_signal<double> in1; sc_signal<double> in2; sc_signal<double> sum; sc_signal<double> diff; sc_signal<double> prod; sc_signal<double> quot; sc_signal<double> powr; //Clock sc_signal<bool> clk; numgen N("numgen"); //instance of `numgen' module N(in1, in2, clk ); //Positional port binding stage1 S1("stage1"); //instance of `stage1' module //Named port binding S1.in1(in1); S1.in2(in2); S1.sum(sum); S1.diff(diff); S1.clk(clk); stage2 S2("stage2"); //instance of `stage2' module S2(sum, diff, prod, quot, clk ); //Positional port binding stage3 S3("stage3"); //instance of `stage3' module S3( prod, quot, powr, clk); //Positional port binding display D("display"); //instance of `display' module D(powr,clk,diff,sum,prod,quot); //Positional port binding sc_initialize(); //Initialize simulation for(int i = 0; i < 50; i++){ clk.write(1); sc_cycle( 10 NS ); clk.write(0); sc_cycle( 10 NS ); } return 0; } numgen.cpp: #include "systemc.h" #include "numgen.h" // definition of the `generate' method void numgen::generate() { static double a = 134.56; static double b = 98.24; a -= 1.5; b -= 2.8; out1.write(a); out2.write(b); } stage1.cpp: #include "systemc.h" #include "stage1.h" //Definition of addsub method void stage1::addsub() { double a; double b; a = in1.read(); b = in2.read(); sum.write(a+b); diff.write(a-b); } stage2.cpp: #include "systemc.h" #include "stage2.h" //definition of multdiv method void stage2::multdiv() { double a; double b; a = sum.read(); b = diff.read(); if( b == 0 ) b = 5.0; prod.write(a*b); quot.write(a/b); } stage3.cpp: #include <math.h> #include "systemc.h" #include "stage3.h" //Definition of power method void stage3::power() { double a; double b; double c; a = prod.read(); b = quot.read(); c = pow(a, b); powr.write(c); } Stage4.cpp: #include <math.h> #include "systemc.h" #include "stage4.h" //Definition of power method void stage4::okruhll() { double f; f= powr.read(); okruh.write(f+1); } // end of power method Stage4.h #ifndef STAGE4_H #define STAGE4_H struct stage4: sc_module { sc_in<double> powr; sc_out<int> okruh; //input port 1 sc_in<bool> clk; //clock void okruhll(); //method implementing functionality //Constructor SC_CTOR( stage4 ){ SC_METHOD( okruhll ); //declare power as SC_METHOD and dont_initialize(); sensitive << clk.pos(); //make it sensitive to positive clock edge } }; #endif Структурна схема арифметичного конвеєра, що відповідає програмній моделі:  Висновок: Я навчилався здійснювати аналіз програмних моделей комп’ютерних систем, виконаних на мові System C.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!