Witam! próbuje zrobić zamek szyfrowy z wykozystaniem 2 GAL-i 20v8. Pierwszy gal ma dekodowac z kodu 1 z 10 na BCD co z reszta mi sie udalo, drugi ma za zadanie multipleksowac kod źródłowy ustawiony na DIP switch-ach w postaci binarnej a wyjscie MUX-a ma byc exnorowane i sumowane, nastepnie ma to wszystko byc wpisywane do rejestru 4 bitowego szeregowo rownoleglego i wyjscia rejestru beda sumowane. Po podłączeniu dekodera wszystko ladnie działa, pokacuja mi diody liczbe binarna, lecz jesli podłącze wyjscia 1 gala do wejscia 2 gala po przycisnieciu przestaje sie zapalac 3 bit, napiecie to okolo 1,25v, wiem ze to moze byc spowodowane przez spadek napiecia na diodach, jednak po odlaczeniu wszystkich diod jest takie same napiecie, tak jakby było gdzies spiecie w 2 galu.
1 gal - dekoder 1 z 10 na BCD
Po multipleksacji musiałem uzyc bramki EXNOR jednak była za mala ilosc termów i wzorowałem sie na zamienniku tej bramki:
W pierwszym galu wyjscia y0, y1, y2, y3 ida do wejsc w drugil galu czteryx0, czteryx1, czteryx2, czteryx3.
Proszę pamiętać o używaniu znaczników code.
Proszę poprawić pisownię.
Przeniesiono z Programowanie Ogólne. - arnoldziq
1 gal - dekoder 1 z 10 na BCD
Code:
Name dekoder kodu 1 z 10 na BCD ;
PartNo 00 ;
Date 2010-03-21 ;
Revision 01 ;
Designer Engineer ;
Company Piotrek ;
Assembly None ;
Location ;
Device G20v8a ;
/* *************** INPUT PINS *********************/
PIN 2 = zero ;
PIN 3 = jeden ;
PIN 4 = dwa ;
PIN 5 = trzy ;
PIN 6 = cztery ;
PIN 7 = piec ;
PIN 8 = szesc ;
PIN 9 = siedem ;
PIN 10 = osiem ;
PIN 11 = dziewiec ;
/* *************** OUTPUT PINS *********************/
PIN 15 = y0 ;
PIN 16 = y1 ;
PIN 17 = y2 ;
PIN 18 = y3 ;
/*rownanie*/
FIELD INPUT = [zero,jeden,dwa,trzy,cztery,piec,szesc,siedem,osiem,dziewiec];
FIElD OUTPUT = [y0,y1,y2,y3];
/*Tabela prawdy*/
table INPUT => OUTPUT {
'b'0000000000 => 'b'0000;
'b'1000000000 => 'b'0001;
'b'0100000000 => 'b'0010;
'b'0010000000 => 'b'0011;
'b'0001000000 => 'b'0100;
'b'0000100000 => 'b'0101;
'b'0000010000 => 'b'0110;
'b'0000001000 => 'b'0111;
'b'0000000100 => 'b'1000;
'b'0000000010 => 'b'1001;
'b'0000000001 => 'b'1010;
}
2 gal
-----------------------------------------------------------------------------
Name sprawdzanie ;
PartNo 00 ;
Date 2010-03-30 ;
Revision 01 ;
Designer Engineer ;
Company Piotrek ;
Assembly None ;
Location ;
Device G20v8a;
/*Wejscia z dip switch-y*/
/* 1 liczba*/
PIN 2 = jedenx0;
PIN 3 = jedenx1;
PIN 4 = jedenx2;
PIN 5 = jedenx3;
/* 2 liczba*/
PIN 6 = dwax0;
PIN 7 = dwax1;
PIN 8 = dwax2;
PIN 9 = dwax3;
/* 3 liczba*/
PIN 10 = trzyx0;
PIN 11 = trzyx1;
PIN 14 = trzyx2;
PIN 15 = trzyx3;
/*Wejscia z licznika 1 z 10*/
PIN 20 = czteryx0;
PIN 21 = czteryx1;
PIN 22 = czteryx2;
PIN 23 = czteryx3;
/*Wejscia sterowania multipleksera*/
PIN 16 = a0;
PIN 17 = a1;
/*Wyjscie na elektromagnes*/
PIN 19 = y;
/*************************************Funkcje logiczne**********************************/
/*Multipleksacja kanalow*/
y0 = !a0 & a1 & jedenx0 # a0 & !a1 & dwax0 # a0 & a1 & trzyx0;
y1 = !a0 & a1 & jedenx1 # a0 & !a1 & dwax1 # a0 & a1 & trzyx1;
y2 = !a0 & a1 & jedenx2 # a0 & !a1 & dwax2 # a0 & a1 & trzyx2;
y3 = !a0 & a1 & jedenx3 # a0 & !a1 & dwax3 # a0 & a1 & trzyx3;
/*EXOR-owanie wpisanego kodu z kodem zrodlowym - zamiana bramki EXOR na bramki AND, NAND i OR*/
a0 = czteryx0 # y0;
b0 = !czteryx0 & !y0;
EXOR1 = a0 & b0;
a1 = czteryx1 # y1;
b1 = !czteryx1 & !y1;
EXOR2 = a1 & b1;
a2 = czteryx2 # y2;
b2 = !czteryx2 & !y2;
EXOR3 = a2 & b2;
a3 = czteryx3 # y3;
b3 = !czteryx3 & !y3;
EXOR4 = a3 & b3;
/*Sumacja wynikow EXNOR-owania*/
!y = EXOR1 & EXOR2 & EXOR3 & EXOR4;
Po multipleksacji musiałem uzyc bramki EXNOR jednak była za mala ilosc termów i wzorowałem sie na zamienniku tej bramki:


W pierwszym galu wyjscia y0, y1, y2, y3 ida do wejsc w drugil galu czteryx0, czteryx1, czteryx2, czteryx3.
Proszę pamiętać o używaniu znaczników code.
Proszę poprawić pisownię.
Przeniesiono z Programowanie Ogólne. - arnoldziq