我正在尝试在 7 段显示器上滚动文本。文本将从键盘输入,我使用 BASYS2 作为 FPGA。我的键盘界面完成了,还有我的七段控制器。但是我的移位器模块有问题。当我处理扫描码时,我需要使用一个字节数组。我在一个包中声明了这种类型,即“mypackage2”。但是,据我了解,移位器模块无法使用该类型,即“reg_array”。我需要改变什么,或者我在这里缺少什么?由于我是 VHDL 新手,我可能犯了一些基本错误。此外,我编写的包没有显示在窗口左侧的项目层次结构中。任何帮助表示赞赏。谢谢你。
编辑:我注意到我不应该使用 reg 数组如下:Data_out : out reg_array(REGSIZE-1 downto 0)
,因为它的宽度已经指定。所以我稍微改变了我的代码并将错误数量减少到 3 个。
这是移位器模块:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use work.mypackage2.all;
entity shifter is
generic ( REGSIZE : integer := 16); -- Text will be composed of 16 characters
port(clk : in std_logic;
Scan_Dav : in std_logic; -- this is '1' when there is a new scancode
Data_in : in std_logic_vector(7 downto 0); --scancode from keyboard
Data_out : out reg_array );
end shifter;
architecture bhv of shifter is
signal shift_reg : reg_array;
begin
process (clk, Scan_Dav) begin
if rising_edge(clk) then
if Scan_Dav = '1' then
shift_reg(REGSIZE-1 downto 1) <= shift_reg(REGSIZE-2 downto 0);
shift_reg(15) <= shift_reg(0);
end if;
end if;
Data_out <= shift_reg;
end process;
end bhv;
这是包裹:
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 (0 to 15) of reg; -- array of bytes
end mypackage2;
package body mypackage2 is
end mypackage2;
这些是最新的错误:
ERROR:HDLParsers:807 - "F:/Projeilk/Shifter.vhd" Line 22. shift_reg can not be used with range downto.
ERROR:HDLParsers:807 - "F:/Projeilk/Shifter.vhd" Line 22. shift_reg can not be used with range downto.