我对VHDL非常陌生,我编写了一段应该是16*4 RAM内存的代码,我为它编写了一个VHDL和VHDL测试平台,我试图在它中添加一个用户约束文件(Ucf),一切看起来都很好,除了它给我的pins.Here中的四个错误带来错误是我的代码:
NET "a<0>" LOC = "p51";
NET "a<1>" LOC = "p59";
NET "a<2>" LOC = "p48";
NET "a<3>" LOC = "p55";
NET "a<0>" LOC = "p51";
NET "a<1>" LOC = "p59";
NET "a<2>" LOC = "p48";
NET "a<3>" LOC = "p55";
NET "di<0>" LOC = "p66";
NET "di<1>" LOC = "p56";
NET "di<2>" LOC = "p57";
NET "di<3>" LOC = "p58";
NET "do<0>" LOC = "p78";
NET "do<1>" LOC = "p75";
NET "do<2>" LOC = "p64";
NET "do<3>" LOC = "p74";VHDL代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity memory is
Port(
clk: in STD_LOGIC;
we: in STD_LOGIC;
a:inout integer RANGE 0 to 3; --read and write address-
di: in STD_LOGIC_VECTOR(3 downto 0);
do: out STD_LOGIC_VECTOR(3 downto 0)
);
end memory;
architecture Behavioral of memory is
TYPE mem IS ARRAY(0 TO 7) OF std_logic_vector(3 DOWNTO 0);
SIGNAL ram_block : mem ;
begin
process(clk)
begin
if(clk'event and clk='1') then
if(we='1') then
ram_block(a) <= di;
else
do <= ram_block(a);
end if;
end if;
end process;
end Behavioral;这些都是我的错误:
错误:约束系统:59-约束“LOC = "p48";>
memoryPin.ucf(3):NET "a<2>“未找到。请核实:
我试着从ucf文件中删除整个“a”引脚,但是,正如我说的,我对VHDL并不熟悉,我不太理解ucf文件的概念,我不知道它是否正确工作,如果您能帮忙的话,我会很高兴的。
发布于 2022-05-30 04:30:23
我最好的建议是将vhdl中的顶级信号保持为std_logic和std_logic_vector类型。理论上,整数可以用多种方式编码,因此到物理引脚的映射可能是不同的。例如,整数可以是二进制编码、灰色编码、有符号或无符号,物理引脚对于每种编码都有不同的值。
然而,std_logic_vector只是一组连线,对于每个索引只有一个意义,即on或off。尽管最初的问题是如何向ucf添加一个整数,但我建议将其转换为顶层的std_logic_vector文件,如下所示:
对于输出,您可以:
out <= std_logic_vector(to_unsigned(my_int,my_slv'length))对于输入,您可以:
my_int <= to_integer(unsigned(a))还请注意,这是如何强制说明是否信号是无签名或签名。
https://stackoverflow.com/questions/72426320
复制相似问题