Vhdl 10位移位寄存器

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标准值创建位流(不推荐),请使用以下

我正在尝试创建一个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

每次我写比特流的时候。有人能帮我指出正确的方向,并指出我正在犯的任何其他错误,这些错误将使移位寄存器无法正常工作

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答案。您可以添加约束文件吗?谢谢。那正是我的问题