バイトで構成される配列のインデックスをシフトするシフター モジュールに問題があります。
シフター.vhd:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use work.mypackage2.all; -- contains the type reg array
entity shifter is
generic ( REGSIZE : integer := 8);
port(clk : in std_logic;
Scan_Dav : in std_logic;
Data_in : in std_logic_vector(7 downto 0);
Data_out : out reg_array );
end shifter;
architecture bhv of shifter is
signal shift_reg : reg_array;
begin
process (clk) begin
if rising_edge(clk) then
if Scan_Dav = '1' then
shift_reg <= shift_reg(shift_reg'high-1 downto 0) & Data_in;
end if;
end if;
end process;
Data_out <= shift_reg;
end bhv;
これはキーボードからのスキャンコードを保持するシフターで、出力配列は 7 セグメント ディスプレイのテキストをスクロールするために使用されます。私のパッケージには、shifter の出力を定義するために使用される型宣言が含まれています。
mypackage2.vhd:
-- Package File Template
--
-- Purpose: This package defines supplemental types, subtypes,
-- constants, and functions
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package mypackage2 is
subtype reg is std_logic_vector(7 downto 0); -- a byte
type reg_array is array (7 downto 0) of reg; -- array of bytes
end mypackage2;
package body mypackage2 is
end mypackage2;
私はそれで問題を抱えています。このコードの RTL 回路図は次のようになります。
なぜこれが起こるのか混乱しています。この問題について誰か助けてもらえますか?