2010-11-02 3 views
1

Я пытаюсь написать модуль VHDL, но у меня возникли некоторые входные проблемы, вот мой код:Сигнала <n1<1> _IBUF> неполон

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
--use ieee.std_logic_arith.all; 
use ieee.std_logic_signed.all; 


entity binary_add is 
    port(n1 : in std_logic_vector(3 downto 0); 
    n2 : in std_logic_vector(3 downto 0); 
    segments : out std_logic_vector(7 downto 0); 
    DNout : out std_logic_vector(3 downto 0)); 

end binary_add; 

architecture Behavioral of binary_add is 
begin 

DNout <= "1110"; 

process(n1, n2) 

variable x: integer; 


begin 

x:= conv_integer(n1(3)&n1(2)&n1(1)&n1(0)) + conv_integer(n2(3)&n2(2)&n2(1)&n2(0)); 

if(x = "0") then 

segments <= "10000001"; 

elsif(x = "1") then 

segments <= "11001111"; 

else 

segments <= "00000000"; 

end if; 

end process; 

end Behavioral; 

Я получаю эти ошибки:

WARNING:PhysDesignRules:367 - The signal <n1<1>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:PhysDesignRules:367 - The signal <n1<2>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:PhysDesignRules:367 - The signal <n1<3>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:PhysDesignRules:367 - The signal <n2<1>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:PhysDesignRules:367 - The signal <n2<2>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:PhysDesignRules:367 - The signal <n2<3>_IBUF> is incomplete. The signal 
    does not drive any load pins in the design. 
WARNING:Par:288 - The signal n1<1>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:288 - The signal n1<2>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:288 - The signal n1<3>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:288 - The signal n2<1>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:288 - The signal n2<2>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:288 - The signal n2<3>_IBUF has no load. PAR will not attempt to route this signal. 
WARNING:Par:283 - There are 6 loadless signals in this design. This design will cause Bitgen to issue DRC warnings. 

Ошибки кажутся сложными, но на самом деле он говорит, я думаю, не может маршрутизировать другие 3 входа моих сигналов n1 и n2. Я не понимаю, почему это происходит, но все, что я хочу сделать, это показать суммирование n1 и n2 подписанных чисел на 7-сегментный дисплей. Если кто-нибудь может помочь мне разобраться в этом вопросе, я бы очень признателен.

ответ

3

Первый: не использовать std_logic_arith или std_logic_signed - у меня есть written about why not. Во-вторых: вы создали асинхронный процесс, который не является большой практикой в ​​FPGA, которые предназначены для использования (и инструменты, которые вы ожидаете использовать) синхронно. Создайте тактовый вход и используйте его. Вы можете сделать это асинхронно, но до вас действительно знаете, что вы делаете, избегайте этого. Как только вы действительно знаете, что делаете, скорее всего, вы тоже этого избежите, потому что вы понимаете, насколько это будет неприятно :)

Я сделал бы свои порты signed и use ieee.numeric_stdd.all;. Или даже используйте тип integer на входных портах. Если это блок верхнего уровня, вам нужно положить обертку вокруг, чтобы std_logic_vectors на внешних штифтов, превратить их в целые и кормить их в блок Вы написали выше:

n1 <= to_integer(signed(n1_pins)); 

Тогда вам нужно сделать что-то вроде этого ...

architecture Behavioral of binary_add is 
begin 
DNout <= "1110"; 
process(clk) 
    variable x: integer; 
begin 
    x:= n1+n2; 
    case x 
    when 0 => segments <= "10000001"; 
    when 1 => segments <= "11001111"; 

и т.д.

Или создать постоянный массив для преобразования целого числа в 7-сегмент и сделать

segments <= int_to_7seg(x); 
Смежные вопросы