hem xilinx hem vhdl

Başlatan speak48, 05 Şubat 2013, 15:01:11

speak48


xilinx için tasarlanmış vhdl kodlarını alteraya uyarlamaya çalışmaktayım ama
hem xilinx hem vhdl olunca tam bi baş belası oluyor.
kodlarda unisim diye bir kütüphane kullanılmış bunu iptal edip yerine aynı işi görecek kodlar koymaya çalışıyorum
library IEEE; 
 use IEEE.std_logic_1164.all; 
 use IEEE.std_logic_arith.all; 
 use IEEE.std_logic_unsigned.all; 
 library work;
 use work.all;
 --library unisim; 
 --use unisim.vcomponents.all; 
 entity pselect is  generic (  C_AB : integer := 9; 
 C_AW : integer := 32; 
 C_BAR : std_logic_vector  ); 
 port (  A : in std_logic_vector(0 to C_AW-1); 
 AValid : in std_logic; 
 CS : out std_logic  );  
 end entity pselect; 
 
 
 architecture imp of pselect is  constant NUM_LUTS : integer := (C_AB+3)/4; 
 constant BAR : std_logic_vector(0 to C_BAR'length-1) := C_BAR; 
 signal lut_out : std_logic_vector(0 to NUM_LUTS); 
 signal carry_chain : std_logic_vector(0 to NUM_LUTS); 
 begin  
	-- synthesis translate_off
	 assert (C_AB <= C_BAR'length) and (C_AB <= C_AW)  report "pselect generic error: " &  "(C_AB <= C_BAR'length) and (C_AB <= C_AW)" &  " does not hold."  severity failure; 
	-- synthesis translate_on
	 carry_chain(0) <= AValid; 
	 XST_WA: if NUM_LUTS > 0 
	 generate  
		 GEN_DECODE: for i in 0 to NUM_LUTS-1 
		 generate  
			 signal lut_in : std_logic_vector(3 downto 0); 
			 signal invert : std_logic_vector(3 downto 0); 
			 begin  GEN_LUT_INPUTS: for j in 0 to 3 
			 generate  
				 GEN_INPUT: if i < NUM_LUTS-1 or j <= ((C_AB-1) mod 4) 
				 generate  
					 lut_in(j) <= A(i*4+j); 
					 invert(j) <= not BAR(i*4+j); 
				 end generate; 
				 GEN_ZEROS: 
				 if not(i < NUM_LUTS-1 or j <= ((C_AB-1) mod 4)) 
				 generate  
					 lut_in(j) <= '1'; 
					 invert(j) <= '0'; 
				 end generate; 
			 end generate; 
			 lut_out(i) <= (lut_in(0) xor invert(0)) and  (lut_in(1) xor invert(1)) and  (lut_in(2) xor invert(2)) and  (lut_in(3) xor invert(3)); 
			 MUXCY_I: muxcy  port map (  O => carry_chain(i+1),  CI => carry_chain(i),  DI => '0',  S => lut_out(i)  ); 
		 end generate GEN_DECODE; 
	 end generate XST_WA; 
	 CS <= carry_chain(NUM_LUTS); 
 end imp;


module muxcy(DI,CI,S,O) ;
input DI;
input CI;
input S;
output O;

assign O = S ? CI:DI;
endmodule


Alıntı YapError (10482): VHDL error at pselect.vhd(65): object "muxcy" is used but not declared

pic365

Merhaba,

MUXCY'nin component'i projeye ekli değil gibi gözüküyor.

speak48

projede eklide verilog olunca tanımadı anlamadım
vhdl versiyonun ekliyince kabul etti ama diğer kompanentler sorunlu bu kezde.

pic365

C_BAR'ın tanımında sorun var. XST de sentezleyemiyor kodu.

muuzoo

#4
unisim kütüphanesi xilinx'in kendi ürünleri için kullandığı fpga modeline göre değişebilen özellikler içeren bir kütüphanedir. MUCXY ve benzeri isimlendirmeler doğrudan xilinx macroları. Doğrudan çeviri yapmak zor olabilir. Onun yerine bu kodlar hangi fpga modeli için yazılmış olup onun library guide'ını indirip benzer özellikleri altera kütüphaneleri içinde bulmak daha kolay olur diye düşünüyorum.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

speak48

eksik kısım vhdl neden sevmediğiminde yanıtı.
verilog modülünü architecturenin altından companent olarak bi daha tanımlamak gerekiyormuş.