Организация программы.
Все модели микросхем выполнены в виде отдельных классов и содержат только логику работы микросхем. Классы микросхем не содержат кода визуализации входных или выходных последовательностей. Другими словами, содержимое и представление полностью разделены, класс микросхемы не делает ничего, чтобы отобразить какой либо график.
Входной информацией для объекта класса микросхемы служит многомерный массив событий, поступающий от входных каналов. Например, в модели микросхемы RS/D триггера любое событие анализируется с учетом всех четырех входных воздействий R,S,D,C.
Прорисовкой входных и выходных графиков занимаются специальные подпрограммы. Входом для программы прорисовки входных графиков служат параметры импульсных последовательностей, исходящих от генератора, и определенные пользователем. Входом для программы рисования выходного графика служит массив выходных значений объекта микросхемы.
Ниже приведен пример класса модели R-S триггера.
//*************************************** // Логический элемент : R-S триггер // автор : Вересов Евгений // дата создания : 10.11.05 // vers.: 1.0 //*************************************** class tp2 { private var input : Array; // Массив для входа private var output : Array; // Выходной массив private var s : Number // Буфер первого канала private var r : Number // Буфер второго канала private var sost : Number // Состояние триггера
// Конструктор public function tp2(){ this.input = new Array(); this.output = new Array(); sost = 0; s = null; r = null; }
// История точек входа public function setInput(step:Number,value:Number, channel:Number):Void{ this.input.push({x:step,y:value,ch:channel}); }
// формирование выхода public function out():Array { input.sortOn("x"); var i = 0;
for(i=0; i<input.length;i++){ // Сохраним текущее значение if(input[i].ch==1) {s = input[i].y;} if(input[i].ch==2) {r = input[i].y;}
// Если s ==0 r==1 if((s==0) && (r ==1)) {output.push({x : input[i].x, y : 1});sost=1}
// Если s ==1 r==0 if((s==1) && (r ==0)) {output.push({x : input[i].x, y : 0});sost=0}
// Если s ==1 r==1 if((s==1) && (r ==1)) {output.push({x : input[i].x, y : sost});}
// Если s ==0 r==0 if((s==0) && (r ==0)) {output.push({x : input[i].x, y : null});} } return output; } }