我正在尝试编写VHDL模块,但我遇到了一些输入问题,这是我的代码:
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.
错误看起来很复杂,但实际上它说,我认为,无法路由我的n1和n2信号的其他3个输入。我不知道为什么会这样,但我想要做的就是将n1和n2有符号数字的总和显示为7段显示。如果有人能帮助我弄清楚这个问题,我会非常感激。
答案 0 :(得分: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);