10-битный регистр сдвига VHDL

Я пытаюсь создать 10-битный регистр сдвига. Однако я продолжаю получать ошибку

[DRC 23-20] Нарушение правила (NSTD-1) Неопределенный стандарт ввода-вывода — 2 из 15 логических портов используют значение стандарта ввода-вывода (IOSTANDARD) «ПО УМОЛЧАНИЮ» вместо определенного пользователем значения. Это может привести к конфликту ввода-вывода или несовместимости с питанием или подключением платы, что повлияет на производительность, целостность сигнала или, в крайних случаях, приведет к повреждению устройства или компонентов, к которым оно подключено. Чтобы исправить это нарушение, укажите все стандарты ввода/вывода. Эта схема не сможет генерировать битовый поток, если для всех логических портов не определено заданное пользователем стандартное значение ввода-вывода. Чтобы разрешить создание потока битов с неуказанными стандартными значениями ввода-вывода (не рекомендуется), используйте эту команду: set_property SEVERITY {Warning} [get_drc_checks NSTD-1]. ПРИМЕЧАНИЕ. При использовании инфраструктуры Vivado Runs (например, Tcl-команды launch_runs) добавьте эту команду в файл .tcl и добавьте этот файл в качестве предварительного перехватчика для шага write_bitstream для запуска реализации. Проблемные порты: 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;

person cobra66    schedule 23.03.2017    source источник
comment
Эта ошибка не имеет ничего общего с вашим регистром сдвига, она связана с ограничениями вашего дизайна. См. ответ Xilinx здесь   -  person gsm    schedule 23.03.2017
comment
Вы можете добавить свой файл ограничений?   -  person JHBonarius    schedule 23.03.2017


Ответы (1)


Как указано в комментариях, это проблема с ограничениями вашего дизайна. Подробное описание (и типичные решения) проблемы приведены в ответах< /а>.

Однако в этом конкретном случае вы фактически указали ограничения PACKAGE_PIN и IOSTANDARD для портов, на которые жалуются (clk и btnU). На самом деле проблема связана с разницей в регистре между вашим vhd-файлом и файлом xdc (который, поскольку он является Tcl, чувствителен к регистру). В вашем файле 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;

(И наоборот, вы можете изменить файл ограничений, но вы измените используемые соглашения об именах).

Аналогичная проблема с обсуждением чувствительности к регистру в файлах ограничений описана здесь.

person gsm    schedule 24.03.2017
comment
Спасибо. это была именно моя проблема - person cobra66; 24.03.2017