Vhdl 10位移位寄存器
我正在尝试创建一个10位移位寄存器。然而,我不断地得到错误 [DRC 23-20]违反规则(NSTD-1)未指定的I/O标准-15个逻辑端口中有2个使用I/O标准(IOSTANDARD)值“默认”,而不是用户指定的特定值。这可能导致I/O争用或与板电源或连接不兼容,影响性能、信号完整性,或在极端情况下导致设备或其连接的组件损坏。要更正此冲突,请指定所有I/O标准。除非所有逻辑端口都定义了用户指定的I/O标准值,否则此设计将无法生成位流。要允许使用未指定的I/O标准值创建位流(不推荐),请使用以下命令:set_property SEVERITY{Warning}[get_drc_checks NSTD-1]。注意:当使用Vivado Runs基础结构(例如,launch_Runs Tcl命令)时,将此命令添加到.Tcl文件中,并将该文件添加为实现运行的write_位流步骤的预钩子。问题端口:Clk、btnu 每次我写比特流的时候。有人能帮我指出正确的方向,并指出我正在犯的任何其他错误,这些错误将使移位寄存器无法正常工作Vhdl 10位移位寄存器,vhdl,xilinx,vivado,Vhdl,Xilinx,Vivado,我正在尝试创建一个10位移位寄存器。然而,我不断地得到错误 [DRC 23-20]违反规则(NSTD-1)未指定的I/O标准-15个逻辑端口中有2个使用I/O标准(IOSTANDARD)值“默认”,而不是用户指定的特定值。这可能导致I/O争用或与板电源或连接不兼容,影响性能、信号完整性,或在极端情况下导致设备或其连接的组件损坏。要更正此冲突,请指定所有I/O标准。除非所有逻辑端口都定义了用户指定的I/O标准值,否则此设计将无法生成位流。要允许使用未指定的I/O标准值创建位流(不推荐),请使用以下
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity question2 is
Port (
led: out std_logic_vector (9 downto 0);
Clk: in std_logic;
btnu: in std_logic;
btnL: in std_logic;
btnR: in std_logic ;
btnD: in std_logic;
btnC: in std_logic
);
end question2;
architecture Behavioral of question2 is
constant active: std_logic :='1';
constant inactive: std_logic :='0';
constant step_zero: std_logic_vector(9 downto 0) :="0000000000";
constant step_one: std_logic_vector(9 downto 0) :="0000000001";
constant step_two: std_logic_vector(9 downto 0) :="0000000010";
constant step_three: std_logic_vector(9 downto 0) :="0000000100";
constant step_four: std_logic_vector(9 downto 0) :="0000001000";
constant step_five: std_logic_vector(9 downto 0) :="0000010000";
constant step_six: std_logic_vector(9 downto 0) :="0000100000";
constant step_seven: std_logic_vector(9 downto 0) :="0001000000";
constant step_eight: std_logic_vector(9 downto 0) :="0010000000";
constant step_nine: std_logic_vector(9 downto 0) :="0100000000";
constant step_ten: std_logic_vector(9 downto 0) :="0100000000";
signal DataIn: std_logic_vector (9 downto 0):= "0000000001";
signal Load: std_logic := btnD;
signal Reset: std_logic;
signal Left: std_logic:= btnL;
signal Right: std_logic:= btnR;
signal DataOut: std_logic_vector (9 downto 0);
signal Clear: std_logic:= btnU;
signal speed_enable: std_logic;
begin
SpeedControl: process (clk)
variable counter: integer range 0 to 10000000;
begin
speed_enable<=not active;
if Reset = Active then
counter:= 0;
elsif (rising_edge (clk)) then
counter := counter + 1;
if (counter=10000000) then
speed_enable<= Active;
counter:=0;
end if;
end if;
end process;
shiftregister: process(speed_enable, clear, DataIn)
begin
if speed_enable=active then
if clear=active then
DataOut (9 downto 0) <= "0000000000"; --(others=>'0');
elsif load = Active then
DataOut (9 downto 0) <= DataIn ;
elsif Left = Active then
DataOut (9 downto 0) <= DataOut(7 downto 0) & "11" ;
elsif Right = Active then
DataOut (9 downto 0) <= DataOut (9 downto 2) & "11" ;
end if;
end if;
end process;
LEDSTEP: process(DataOut)
begin
if DataOut = "0000000000" then
led <= step_zero;
elsif DataOut = "0000000001" then
led <= step_one;
elsif DataOut = "0000000010" then
led <= step_two;
elsif DataOut = "0000000100" then
led <= step_three;
elsif DataOut = "000001000" then
led <= step_four;
elsif DataOut = "0000010000" then
led <= step_five;
elsif DataOut = "0000100000" then
led <= step_six;
elsif DataOut = "0001000000" then
led <= step_seven;
elsif DataOut = "0010000000" then
led <= step_eight;
elsif DataOut = "0100000000" then
led <= step_nine;
elsif DataOut = "1000000000" then
led <= step_ten;
end if;
end process;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体问题2是
港口(
led:输出标准逻辑向量(9到0);
Clk:标准逻辑中;
btnu:标准逻辑中;
btnL:标准逻辑中;
btnR:标准逻辑中;
btnD:标准逻辑中;
btnC:标准逻辑中
);
结束问题2;
问题2的架构是
恒定激活:标准逻辑:='1';
常数不活动:标准逻辑:='0';
常数步长0:std逻辑向量(9到0):=“0000000000”;
常数步长1:标准逻辑向量(9到0):=“000000000 1”;
常数步长二:标准逻辑向量(9到0):=“00000000 10”;
常数步长三:标准逻辑向量(9到0):=“00000000100”;
常数步长四:标准逻辑向量(9到0):=“0000001000”;
常数步进五:标准逻辑向量(9到0):=“0000010000”;
常数步进六:标准逻辑向量(9到0):=“000010000”;
常数步长七:标准逻辑向量(9到0):=“0001000000”;
常数步进八:标准逻辑向量(9到0):=“0010000000”;
常数步进九:标准逻辑向量(9到0):=“0100000000”;
常数步长:标准逻辑向量(9到0):=“0100000000”;
信号数据输入:标准逻辑向量(9到0):=“000000000 1”;
信号负载:标准逻辑:=btnD;
信号复位:标准逻辑;
左信号:标准逻辑:=btnL;
信号右:标准逻辑:=btnR;
信号数据输出:标准逻辑向量(9到0);
信号清除:标准逻辑:=btnU;
信号速度启用:标准逻辑;
开始
速度控制:进程(clk)
变量计数器:整数范围0到10000000;
开始
速度启用如评论中所述,这是您的设计约束的问题。Xilinx支持中概述了该问题的详细描述(以及典型解决方案)
但是,在这个特定的实例中,您实际上已经为被投诉的端口指定了PACKAGE_PIN和IOSTANDARD约束(clk
和btnU
)。这个问题实际上是由于vhd文件和xdc文件之间的大小写差异造成的(由于是Tcl文件,xdc文件区分大小写)。在vhd文件中,导致错误的端口是Clk
和btnu
——约束文件中不存在这些端口
要解决此问题,请将端口声明修改为:
entity question2 is
Port (
led: out std_logic_vector (9 downto 0);
clk: in std_logic;
btnU: in std_logic;
btnL: in std_logic;
btnR: in std_logic ;
btnD: in std_logic;
btnC: in std_logic
);
end question2;
(相反,您可以修改约束文件,但会更改所使用的命名约定)
讨论约束文件中区分大小写的一个类似问题已被描述。该错误与移位寄存器无关,它与设计约束有关。请参见Xilinx答案。您可以添加约束文件吗?谢谢。那正是我的问题