VHDL ile ilgili soru

Başlatan yamak, 03 Aralık 2011, 04:52:10

yamak

Merhaba arkadaşlar;
Mesela aşağıdaki gibi kod yazdığımda xilinx ise, place&route aşamasında hata veriyo.
not:stop bi giriş pinin ismi. Yani direk fpga nın girişine bağlı.
architecture Behavioral of main is
rect_top_next<=rect_top_reg+delta_y_reg 
						 when freq='1' and stop_status<='0' else
					    rect_top_reg;
	u3:process(clk,stop)
		begin
		if stop='1' then 
			stop_status<=not stop_status ;
		end if;
		elsif clk'event and clk='1' then
			rect_top_reg<=rect_top_next;
		   rect_left_reg<=rect_left_next;
			delta_x_reg<=delta_x_next;
			delta_y_reg<=delta_y_next;
		end if;
		end process;

Hata da şu şekilde:
Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB /
   clock site pair. The clock component <reset_IBUF_BUFG> is placed at site <BUFGMUX_X2Y10>. The IO component <reset> is
   placed at site <IPAD73>.  This will not allow the use of the fast path between the IO and the Clock buffer. If this
   sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf
   file to demote this message to a WARNING and allow your design to continue. However, the use of this override is
   highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be
   corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These
   examples can be used directly in the .ucf file to override this clock rule.
   < NET "reset" CLOCK_DEDICATED_ROUTE = FALSE; >

Fakat;
if stop='1' then
         stop_status<=not stop_status ;
      end if;
kodlarının yerini değiştirip aşağıdaki gibi yaptığımda hata düzeliyo
architecture Behavioral of main is
rect_top_next<=rect_top_reg+delta_y_reg 
						 when freq='1' and stop_status<='0' else
					    rect_top_reg;
	u3:process(clk,stop)
		begin
	        if clk'event and clk='1' then
                	if stop='1' then 
			     stop_status<=not stop_status ;
		        end if;
			rect_top_reg<=rect_top_next;
		        rect_left_reg<=rect_left_next;
			delta_x_reg<=delta_x_next;
			delta_y_reg<=delta_y_next;
		end if;
		end process;

Ben bu hatanın nedenini paralel işlem mantığına aykırı bi olay gibi yorumladım ama tam olarak kafamda oturmadı. Eğer bilen bi arkadaş varsa bana izah edebilir mi?

yamak

Arkadaşlar, bu konu konu hakkında bir fikri olan yok mu?

scaemteitn

ise nin verdiği hata kodunda "NET "reset" CLOCK_DEDICATED_ROUTE = FALSE;" böyle bir öneri veriyor. sizde .ucf dosyasında stopu tanıtırken reset yerine stop yazıp bu şekilde denediniz mi? Galiba fpga nın tüm pinleri aynı değil. bazı pinler özel amaçlı gibi geldi bana.

yamak

#3
Tamam arkadaşım teşekkür ederim sorunu çözdüm ben zaten.Oraya reste yazmasının nedeni kodun orjinalinde reset diye bi giriş var. NET "stop" CLOCK_DEDICATED_ROUTE = FALSE; .ucf dosyasına düzeldi. Bu şekilde bi hatanın olmasının nedeni. FPGA stop girişini ne clock olarak algılamasıymış. fpga da tek saat sinyali olacağı için böyle bi durumda hata vermiş. .ucf dosyasına da NET "stop" CLOCK_DEDICATED_ROUTE = FALSE; yazarak stop un clock olmadığını belirtmiş oldum.