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

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

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

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

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

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

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

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

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Теорія обчислювальних машин
Група:
КІ-31
Коротко про документ

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

Звіт присвячено аналізу програмної моделі арифметичного конвеєра на мові SystemC. Розглянуто структурні модулі та їх взаємодію за допомогою тактового сигналу.

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

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

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

  1. Мета роботи
  2. Лістинг програмної моделі
  3. Структурна схема
  4. Висновок
Для кого:Студенти технічних спеціальностей та викладачі комп'ютерних наук
Викладачі:Торубка Т. В.

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

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

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

Міністерство освіти, науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ Звіт до Лабораторної роботи №4 «Аналіз програмної моделі процесу роботи арифметичного конвеєра» Варіант 24 Перевірив: Торубка Т.В. Львів 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

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