wincupl

Başlatan diot, 25 Mart 2021, 18:48:19

diot

Üzerinde çalıştığım bir proje için GAL16V8B kullanmayı düşünüyorum. Daha önce Gal ve Pal ile uğraşmadığım için bir araştışrma yaptım WINCUPL programını edindim. CUPL dilini bilmediğimden, öğrenmek için  Türkçe dersler arıyorum. Yada Türkçe kaynak. Yardımcı olabilecek olan varmı ?

ali.f

Merhaba;
Video olarak aşağıdaki video yardımcı olabilir.

Dosya olarak aşağıdaki linkte bulunan dosya fikir verebilir.
http://www.ehm.yildiz.edu.tr/images/files/deney_9.pdf

baran123

31 Mart 2021, 01:16:18 #2 Son düzenlenme: 31 Mart 2021, 01:18:50 baran123
Biz geçen yıl YTU de gal22v10 programladık aslında mantık aynı, FPGA gibi dijital tasarım. Yukarıdaki video program kullanımı için faydalı olabilir bölüm hocalarından biri çekmişti yanlış hatırlamıyorsam
CUPL oldukça basit asıl sorun WinCUPL hataları.
Bazen düzgün yazılan koda hatalı diye sentezlemediği olabiliyor.

YTU EHM için Lab örneklerimi paylaşayım belki faydası olur
Name     ShiftRegister;
PartNo   00;
Date     03.06.2020;
Revision 01;
Designer Engineer;
Company  Student;
Assembly None;
Location ;
Device   g22v10;

/* *** INPUT PINS *** */
PIN 1 
	
	
  = 
CLK;
PIN [2  ..  5]  = [I0I1I2I3];
PIN [6  ..  10] = [S0S1SRSISLSICLR];

/* *** OUTPUT PINS *** */
PIN [20 .. 23]  = [Q3Q2Q1Q0]; 

/* *** OPERATION *** */
M41_3 = (!S1 & !S0 Q3# (!S1 & S0 & SRSI) # (S1 & !S0 & Q2)   # (S1 & S0 & I3);
M41_2 = (!S1 & !S0 Q2# (!S1 & S0 & Q3)   # (S1 & !S0 & Q1)   # (S1 & S0 & I2);
M41_1 = (!S1 & !S0 Q1# (!S1 & S0 & Q2)   # (S1 & !S0 & Q0)   # (S1 & S0 & I1);
M41_0 = (!S1 & !S0 Q0# (!S1 & S0 & Q1)   # (S1 & !S0 & SLSI) # (S1 & S0 & I0);

M21_3 = (CLR M41_3);
M21_2 = (CLR M41_2);
M21_1 = (CLR M41_1);
M21_0 = (CLR M41_0);

Q3.M21_3
Q2.M21_2
Q1.M21_1
Q0.M21_0;

Q3.AR 'b'0
Q2.AR 'b'0
Q1.AR 'b'0
Q0.AR 'b'0;

Q3.SP 'b'0
Q2.SP 'b'0
Q1.SP 'b'0
Q0.SP 'b'0;

Name     Project ;
PartNo   00 ;
Date     09.06.2020 ;
Revision 01 ;
Designer Engineer ;
Company  Student ;
Assembly None ;
Location  ;
Device   g22v10 ;

/* *************** INPUT PINS *********************/
PIN [.. 4] = [CLKRSTCEUP_DOWN];
PIN [.. 9] = [D0D1D2D3D4];

/* *************** OUTPUT PINS *********************/
PIN [15 .. 19] = [Q0Q1Q2Q3Q4];  

function 
full_adder(ABCinCout)
{
	
Cout = ((B) & Cin# (A & B);
	
full_adder = (B) $ Cin;
}

function 
mux_2x1(X0X1S)
{
	
mux_2x1 = (!X0# (S & X1);
}

function 
xnor(AB)
{
	
xnor = (B# (!A & !B);
}

function 
A_EQ_B_5BIT(A0A1A2A3A4B0B1B2B3B4)
{
	
X4 xnor(A4B4);
	
X3 xnor(A3B3);
	
X2 xnor(A2B2); 
	
X1 xnor(A1B1); 
	
X0 xnor(A0B0); 

	
A_EQ_B_5BIT = (X4 X3 X2 X1 X0); 
}

SUM0 full_adder(Q0'b'1'b'0CS1);
SUM1 full_adder(Q1'b'0CS1CS2);
SUM2 full_adder(Q2'b'1CS2CS3);
SUM3 full_adder(Q3'b'0CS3CS4);
SUM4 full_adder(Q4'b'0CS4CSOUT);

DIF0 full_adder(Q0'b'1'b'0CD1);
DIF1 full_adder(Q1'b'1CD1CD2);
DIF2 full_adder(Q2'b'0CD2CD3);
DIF3 full_adder(Q3'b'1CD3CD4);
DIF4 full_adder(Q4'b'1CD4CDOUT);

UD_SEL = !UP_DOWN;

UD0 mux_2x1(SUM0DIF0UD_SEL);
UD1 mux_2x1(SUM1DIF1UD_SEL);
UD2 mux_2x1(SUM2DIF2UD_SEL);
UD3 mux_2x1(SUM3DIF3UD_SEL);
UD4 mux_2x1(SUM4DIF4UD_SEL);

LOW_LIM_SEL UP_DOWN A_EQ_B_5BIT(Q0Q1Q2Q3Q4D0D1D2D3D4);

LL0 mux_2x1(UD0'b'0LOW_LIM_SEL);
LL1 mux_2x1(UD1'b'0LOW_LIM_SEL);
LL2 mux_2x1(UD2'b'0LOW_LIM_SEL);
LL3 mux_2x1(UD3'b'0LOW_LIM_SEL);
LL4 mux_2x1(UD4'b'0LOW_LIM_SEL);

UP_LIM_SEL = !(UP_DOWN # Q0 # Q1 # Q2 # Q3 # Q4); 

UL0 mux_2x1(LL0D0UP_LIM_SEL);
UL1 mux_2x1(LL1D1UP_LIM_SEL);
UL2 mux_2x1(LL2D2UP_LIM_SEL);
UL3 mux_2x1(LL3D3UP_LIM_SEL);
UL4 mux_2x1(LL4D4UP_LIM_SEL);

CE0 mux_2x1(Q0UL0CE);
CE1 mux_2x1(Q1UL1CE);
CE2 mux_2x1(Q2UL2CE);
CE3 mux_2x1(Q3UL3CE);
CE4 mux_2x1(Q4UL4CE);

Q0.CE0;
Q1.CE1;
Q2.CE2;
Q3.CE3;
Q4.CE4;

Q0.AR RST;
Q1.AR RST;
Q2.AR RST
Q3.AR RST
Q4.AR RST;

Q0.SP 'b'0;
Q1.SP 'b'0;
Q2.SP 'b'0
Q3.SP 'b'0
Q4.SP 'b'0;

Q0.OE 'b'1;
Q1.OE 'b'1;
Q2.OE 'b'1
Q3.OE 'b'1
Q4.OE 'b'1;

Buda manuel optimizasyon yapılmış bir örnek
Name     Project ;
PartNo   00 ;
Date     09.06.2020 ;
Revision 01 ;
Designer Engineer ;
Company  Student ;
Assembly None ;
Location  ;
Device   g22v10 ;

/* *************** INPUT PINS *********************/
PIN [.. 4] = [CLKRSTCEUP_DOWN];
PIN [.. 9] = [D0D1D2D3D4];

/* *************** OUTPUT PINS *********************/
PIN [1720212223] = [Q4Q3Q2Q1Q0];  
PIN 18 IS_D_EQUAL_Q_PART1;
PIN 19 IS_D_EQUAL_Q_PART2

function 
full_add_sub(ABCinOPCout)
{
	
Cout = (($ (OP)) & Cin# (A & (B $ OP));
	
full_add_sub = ($ (OP)) $ Cin;
}

function 
mux_2x1(X0X1S)
{
	
mux_2x1 = (!X0# (S & X1);
}

function 
xnor(AB)
{
	
xnor = (B# (!A & !B);
}

function 
A_EQ_B_5BIT(A0A1A2A3A4B0B1B2B3B4)
{
	
X4 xnor(A4B4);
	
X3 xnor(A3B3);
	
X2 xnor(A2B2); 
	
X1 xnor(A1B1); 
	
X0 xnor(A0B0); 

	
A_EQ_B_5BIT = (X4 X3 X2 X1 X0); 
}

OP_SEL = !UP_DOWN;

RESULT0 full_add_sub(Q0'b'1OP_SELOP_SELCS0);
RESULT1 full_add_sub(Q1'b'0CS0OP_SELCS1);
RESULT2 full_add_sub(Q2'b'1CS1OP_SELCS2);
RESULT3 full_add_sub(Q3'b'0CS2OP_SELCS3);
RESULT4 full_add_sub(Q4'b'0CS3OP_SELCOUT); 

IS_D_EQUAL_Q_PART1 =
  
D0 D1 D2 D3 D4 Q0 Q1 Q2 Q3 Q4
  
# D0 & D1 & D2 & D3 & !D4 & Q0 & Q1 & Q2 & Q3 & !Q4
  # D0 & D1 & D2 & !D3 & D4 & Q0 & Q1 & Q2 & !Q3 & Q4
  # D0 & D1 & D2 & !D3 & !D4 & Q0 & Q1 & Q2 & !Q3 & !Q4
  # D0 & D1 & !D2 & D3 & D4 & Q0 & Q1 & !Q2 & Q3 & Q4
  # D0 & D1 & !D2 & D3 & !D4 & Q0 & Q1 & !Q2 & Q3 & !Q4
  # D0 & D1 & !D2 & !D3 & D4 & Q0 & Q1 & !Q2 & !Q3 & Q4
  # D0 & D1 & !D2 & !D3 & !D4 & Q0 & Q1 & !Q2 & !Q3 & !Q4
  # D0 & !D1 & D2 & D3 & D4 & Q0 & !Q1 & Q2 & Q3 & Q4
  # D0 & !D1 & D2 & D3 & !D4 & Q0 & !Q1 & Q2 & Q3 & !Q4
  # D0 & !D1 & D2 & !D3 & D4 & Q0 & !Q1 & Q2 & !Q3 & Q4
  # D0 & !D1 & D2 & !D3 & !D4 & Q0 & !Q1 & Q2 & !Q3 & !Q4
  # D0 & !D1 & !D2 & D3 & D4 & Q0 & !Q1 & !Q2 & Q3 & Q4
  # D0 & !D1 & !D2 & D3 & !D4 & Q0 & !Q1 & !Q2 & Q3 & !Q4
  # D0 & !D1 & !D2 & !D3 & D4 & Q0 & !Q1 & !Q2 & !Q3 & Q4
  # D0 & !D1 & !D2 & !D3 & !D4 & Q0 & !Q1 & !Q2 & !Q3 & !Q4;

IS_D_EQUAL_Q_PART2 =
  !
D0 & !D1 D2 D3 D4 & !Q0 & !Q1 Q2 Q3 Q4
  
# !D0 & !D1 & D2 & D3 & !D4 & !Q0 & !Q1 & Q2 & Q3 & !Q4
  # !D0 & !D1 & D2 & !D3 & D4 & !Q0 & !Q1 & Q2 & !Q3 & Q4
  # !D0 & !D1 & D2 & !D3 & !D4 & !Q0 & !Q1 & Q2 & !Q3 & !Q4
  # !D0 & !D1 & !D2 & D3 & D4 & !Q0 & !Q1 & !Q2 & Q3 & Q4
  # !D0 & !D1 & !D2 & D3 & !D4 & !Q0 & !Q1 & !Q2 & Q3 & !Q4
  # !D0 & !D1 & !D2 & !D3 & D4 & !Q0 & !Q1 & !Q2 & !Q3 & Q4
  # !D0 & !D1 & !D2 & !D3 & !D4 & !Q0 & !Q1 & !Q2 & !Q3 & !Q4
  # !D0 & D1 & !D2 & D3 & D4 & !Q0 & Q1 & !Q2 & Q3 & Q4
  # !D0 & D1 & !D2 & D3 & !D4 & !Q0 & Q1 & !Q2 & Q3 & !Q4
  # !D0 & D1 & !D2 & !D3 & D4 & !Q0 & Q1 & !Q2 & !Q3 & Q4
  # !D0 & D1 & !D2 & !D3 & !D4 & !Q0 & Q1 & !Q2 & !Q3 & !Q4
  # !D0 & D1 & D2 & !D3 & D4 & !Q0 & Q1 & Q2 & !Q3 & Q4
  # !D0 & D1 & D2 & !D3 & !D4 & !Q0 & Q1 & Q2 & !Q3 & !Q4
  # !D0 & D1 & D2 & D3 & D4 & !Q0 & Q1 & Q2 & Q3 & Q4
  # !D0 & D1 & D2 & D3 & !D4 & !Q0 & Q1 & Q2 & Q3 & !Q4;

IS_D_EQUAL_Q IS_D_EQUAL_Q_PART1 # IS_D_EQUAL_Q_PART2;

LOW_LIM_SEL UP_DOWN IS_D_EQUAL_Q;

LL0 = (RESULT0 & !LOW_LIM_SEL);
LL1 = (RESULT1 & !LOW_LIM_SEL);
LL2 = (RESULT2 & !LOW_LIM_SEL);
LL3 = (RESULT3 & !LOW_LIM_SEL);
LL4 = (RESULT4 & !LOW_LIM_SEL);

UP_LIM_SEL = !(UP_DOWN # Q0 # Q1 # Q2 # Q3 # Q4); 

UL0 mux_2x1(LL0D0UP_LIM_SEL);
UL1 mux_2x1(LL1D1UP_LIM_SEL);
UL2 mux_2x1(LL2D2UP_LIM_SEL);
UL3 mux_2x1(LL3D3UP_LIM_SEL);
UL4 mux_2x1(LL4D4UP_LIM_SEL);

CE0 mux_2x1(Q0UL0CE);
CE1 mux_2x1(Q1UL1CE);
CE2 mux_2x1(Q2UL2CE);
CE3 mux_2x1(Q3UL3CE);
CE4 mux_2x1(Q4UL4CE);

Q0.CE0;
Q1.CE1;
Q2.CE2;
Q3.CE3;
Q4.CE4;

Q0.AR RST;
Q1.AR RST;
Q2.AR RST
Q3.AR RST
Q4.AR RST;

Q0.SP 'b'0;
Q1.SP 'b'0;
Q2.SP 'b'0
Q3.SP 'b'0
Q4.SP 'b'0;

Q0.OE 'b'1;
Q1.OE 'b'1;
Q2.OE 'b'1
Q3.OE 'b'1
Q4.OE 'b'1;


Edit : Şu linklerdeki dökümanları okuyun
https://www.microchip.com/en-us/products/fpgas-and-plds/spld-cplds/pld-design-resources
https://www.microchip.com/developmenttools/ProductDetails/WinCUPL

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.