0

我在使用移位器模块时遇到了一些问题,该模块将移动由字节组成的数组的索引。

移位器.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;

这是一个移位器,它将保存来自键盘的扫描码,输出数组将用于滚动七段显示器上的文本。我的包包含用于定义移位器输出的类型声明:

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 示意图如下所示:

移位器的 RTL:

我很困惑为什么会发生这种情况,有人可以帮我解决这个问题吗?

4

1 回答 1

0

您的“my_shifter”本身似乎很好。Xilinx 工具成功编译它,RTL 查看器成功显示它,包中的自定义信号等等。

然而,将“my_shifter”嵌入到您的 7 段控制器的顶层设计中,我设法重现了让您感到困惑的“错误”的症状 - 它不会显示在顶层图表的 RTL 视图中。

注意“综合报告”中的警告,我发现其他一些信号没有连接,让综合工具优化掉整个移位器!通过查看摘要中生成的触发器数量来确认

修复那些丢失的连接,果然 Shifter 出现,其所有端口都正确连接在 RTL 视图中。

所以我撤回了我的建议,即 RTL 查看器可能有问题(在这方面!),但加强我的建议,即这是解决基本设计问题的一种非常糟糕的方法。

这就是模拟的用途。

否则,您的工作量会比必要的要大得多,并且会被错误地引导到问题所在。

于 2012-12-13T18:11:39.527 回答