2017-03-23 15 views
2

10ビットシフトレジスタを作成しようとしています。しかし、私はエラーを取得し続けるVHDL 10ビットシフトレジスタ

[DRC 23-20]規則違反(NSTD-1)未指定のI/O規格 - 2 15のうち、論理ポートはI/O規格(IOSTANDARD)値 'DEFAULT' を使用し、ユーザーに特定の値が割り当てられているのではありません。これは、I/O競合や、ボードの電源や接続性に影響を与え、性能、信号の完全性に影響を与えたり、極端な場合にはデバイスまたはデバイスが接続されているコンポーネントに損傷を与える可能性があります。この違反を修正するには、すべてのI/O規格を指定します。すべての論理ポートにユーザが指定したI/O規格値が定義されていない限り、このデザインはビットストリームの生成に失敗します。指定されていないI/O標準値(推奨されません)でビットストリームを作成できるようにするには、set_property SEVERITY {Warning} [get_drc_checks NSTD-1]コマンドを使用します。注記:Vivado Runsインフラストラクチャ(例:launch_runs Tclコマンド)を使用する場合は、このコマンドを.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; 
+2

このエラーはシフトレジスタとは何の関係もなく、設計上の制約と関係しています。ザイリンクスの回答[here](https://www.xilinx.com/support/answers/56354.html) – gsm

+0

制約ファイルを追加できますか? – JHBonarius

答えて

0

コメントに記載されているとおり、これは設計上の制約の問題です。この問題の詳細な説明とその解決方法については、ザイリンクスのサポートanswersに記載されています。

ただし、この特定のインスタンスでは、実際には、不平を言われているポート(clkおよびbtnU)のPACKAGE_PINおよびIOSTANDARD制約が指定されています。この問題は、実際にはvhdファイルとxdcファイル(Tclのために大文字と小文字が区別される)の間の違いによるものです。あなたのvhdファイルで、エラーを引き起こすポートはClkbtnuです - これらは制約ファイルにはありません。

、この問題を解決するあなたのポート宣言を変更するには:(逆に、あなたが制約ファイルを変更する可能性がありますが、使用される命名規則を変更することになる)

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; 

制約ファイルでの大文字と小文字の区別について説明する同様の問題は、hereと記載されています。

+0

ありがとうございます。それはまさに私の問題だった – cobra66