Çok Fazla case - Verilog

Başlatan electronious, 05 Kasım 2011, 16:25:35

electronious

Merhabalar,

Uğrarştığım projede çok fazla case durumu var. İnternette araştırdım fakat bulamadım. Bu case leri tek tek yazmak yerine daha kolay bir yoldan yazmak mümkün mü?

Yardımcı olursanız sevinirim. İyi günler.

pic365

Merhaba,

Ben genelde bu tür işlemler için Perl scripti yazıyorum. Birkaç hafta önce 64 case'li bir mux kullanmam gerekti, 7-8 satırlık bir script ile olayı hallettim. Perl, TCL ve Python dilleri sektörde sıkça kullanılıyor.

electronious

scriptten kastınız kodu oluşturacak kod mu yazmak? biraz açarsanız sevinirim.

hasaney

Evet Perl veya TCL kullanmak kesinlikle en uygun yöntem.
Ufak bir script yazıyorsunuz içerisinde kuralları tanımlıyorsunuz. O istenilen boyuta göre kod üretiyor.

http://www.asic-world.com/scripting/perl.html ve http://www.asic-world.com/scripting/tcl.html adresinde giriş aşamasında bir dersi mevcut. En fazla 2 saat içinde öğrenirsiniz. Basit bir dil, işinizi çok kolaylaştırır.

Mesela bu değişen parça sayısına göre ucf (pin atama) dosyası oluşturan bir TCL scripti
#size of the PUF
set size 8;

# start position of x axis
set x 62;

# start position of y axis
set y 0;

# set as 0 for horiontal placement
set isVertical 1; 

set file [open "PinAssignment.ucf" w+];
set i 0;


puts $file "NET \"CLK\" LOC = \"B8\";
NET \"RST\" LOC = \"B18\";
NET \"LEDS<0>\" LOC = \"J14\";
NET \"LEDS<1>\" LOC = \"J15\";
NET \"LEDS<2>\" LOC = \"K15\";
NET \"LEDS<3>\" LOC = \"K14\";
NET \"LEDS<4>\" LOC = \"E16\";
NET \"LEDS<5>\" LOC = \"P16\";
NET \"LEDS<6>\" LOC = \"E4\";
NET \"LEDS<7>\" LOC = \"P4\";\n";

while {$i < $size} {

	puts $file "#PUF$i";
	puts $file "INST \"PUF/PUF$i/FDCPEPUF\"\tLOC=\"SLICE_X[expr {$x + 1}]Y[expr {$y + 1}]\"";
	puts $file "INST \"PUF/PUF$i/SRL16ET\"\t\tLOC=\"SLICE_X[expr {$x}]Y[expr {$y + 1}]\"";
	puts $file "INST \"PUF/PUF$i/MUXT\"\t\tLOC=\"SLICE_X[expr {$x}]Y[expr {$y + 1}]\"";
	puts $file "INST \"PUF/PUF$i/SRL16EB\"\t\tLOC=\"SLICE_X[expr {$x}]Y[expr {$y}]\"";
	puts $file "INST \"PUF/PUF$i/MUXB\"\t\tLOC=\"SLICE_X[expr {$x}]Y[expr {$y}]\"\n";

	set i [expr {$i +1}];

	if [ expr $isVertical] {
		set x [expr {$x +2}];
	} else {
		set y [expr {$y +2}];
	}
}

close  $file;

electronious

cevaplar için çok teşekkür ederim. linkleri inceleyeceğim.

pic365

Perl scripti ile Verilog kodunu şöyle yazdırmıştım.

$file = "./out.txt";
open(output, ">$file");
for($ii=1; $ii<64; $ii++) {
   print output
      "   else if(state==$ii)\n",
      "      dataOut = data[$ii];\n";
   }
close(output);



Bu tabii basit bir kullanım ama Perl çok daha karmaşık işlemler için de kullanılıyor ve büyük olasılıkla sayısal tasarım konusunda en geniş kütüphaneye sahip dil. Örneğin aşağıdaki linkte CPAN'daki VHDL kütüphanelerini görebilirsiniz.

http://search.cpan.org/search?query=vhdl&mode=all