STM8 BSET Komutu kaç cycle ?

Başlatan Erol YILMAZ, 02 Aralık 2013, 16:20:58

Erol YILMAZ

Merhaba,

STM8 ile uğraşırken BSET ile bir pinden ne hızda çıkış alabileceğimi merak ettim.

BSET/BRES komutlarını test ettim. Her ikisi de 1 cycle görünmesine rağmen,
2 cycle zamanda işliyor gibime geldi...

kısacası 16 Mhz clock hızındaki STM8 de BSET hemen ardından
BRES dediğim pin 62.5 nS yerine 125 nS 1 durumda kalıyor.

NOP komutunun 62.5 nS de işlendiğini gördüm.

NOP ta diğerleri gibi 1 cycle lık bir komut.

Bunun sebebi ne olabilir ?
Ayrıca 4 byte lik bi opcode'u var.

http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/programming_manual/CD00161709.pdf
85. sayfa

721A 500F    BSET      L:0x500f, #0x5
721B 500F    BRES      L:0x500f, #0x5


Read the destination byte, set the corresponding bit (bit position), and write
the result in destination byte. The destination is a memory byte. The bit
position is a constant. This instruction is fast, compact, and does not affect
any register. Very useful for boolean variable manipulation.


z

Aşağıdaki 2 program parçacığını da ayrı ayrı dene.
Eğer her ikisi de 4cycle da çalışıyorsa sorun, pipeline mekanizmasının yaptığı bir sınırlamadan kaynaklanıyordur.

   BSET PORT1,#1   
   NOP
   BRES PORT1,#1
   NOP

------------
   
   BSET PORT1,#1   
   BRES PORT1,#1
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Kabil ATICI

Bu işlemcileri çok iyi tanımasam da;
tamam BRES ve BSET execute olarak 1 baytlık komut. Ama Fetch ve Decode açısından durumu nedir?
Gördüğüm kadarı ile bazı komutların Decode ve Execute durumları aynı değil.

Bu komutlar uzunluk açısından sorunu yok. CPU 32 bit bellek genişliği olduğu için Fetch konusunda bir sıkıntı olduğunu düşünmüyorum.

Birkaç kez bu komutları arka arkaya verip duruma bakmak lazım.

Tahminim "değeri oku, değiştir ve tekrar yaz" durumunun sonunucu görmeden ikinci komutun decode işlemi tamamlanmıyor gibi görünüyor. buda bir gecikme getiriyor olabilir.
ambar7

Erol YILMAZ

Alıntı yapılan: z - 02 Aralık 2013, 17:22:51
Aşağıdaki 2 program parçacığını da ayrı ayrı dene.
Eğer her ikisi de 4cycle da çalışıyorsa sorun, pipeline mekanizmasının yaptığı bir sınırlamadan kaynaklanıyordur.

   BSET PORT1,#1   
   NOP
   BRES PORT1,#1
   NOP

------------
   
   BSET PORT1,#1   
   BRES PORT1,#1

Dallanma dan kaynaklı zaman kaybı yaşamamak için kodları arka arkaya SIRALAYARAK denedim.

   BSET PORT1,#1   
   BRES PORT1,#1

1 zamanı sürekli 2 clock zamanı sürdü,
0 zamanı sürekli 2 clock zamanı sürdü,
--------------------------------------------------------

   BSET PORT1,#1   
   NOP
   BRES PORT1,#1

1 zamanı genellikle 2 bazen de 3 clock zamanı sürdü.
0 zamanı da genellikle 2 bazen de 3 clock zamanı sürdü.

Bu anlamsız geldi, zira hep aynı kodu tekrarladım.

   BSET PORT1,#1   
   NOP
   BRES PORT1,#1
   NOP

yapınca

1 zamanı sürekli 2 clock zamanı sürdü,
0 zamanı 2 ve 4 clock zamanı aldı.

ST, sen ne yaptın böyle? diyesim geliyor.