2012-12-12 57 views
0

我遇到一些移位器模块的问题,它会移位由字节组成的数组的索引。VHDL - 移位字节数组

shifter.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 of shifter:

我很困惑,为什么出现这种情况,任何人都可以帮助我解决这个问题?

+0

你用什么工具生成和查看RTL原理图?根据我的经验,查看RTL原理图很少有用,而且 - 也许是因为它们很少被使用 - 它们往往是越野车。我会更加关注你的VHDL代码在模拟中做了什么。写一个测试台并模拟它... –

+0

除了丢失的时钟外,看起来完全没问题,这可能是您原理图工具的一个特性。 VHDL代码看起来也很好。你对什么感到困惑? – BennyBarns

+0

问题恰恰在于BennyBarns,原理图与代码不一致。应该有3个输入和1个输出,它们的名称应与我在代码中分配的名称相同,并且logic_vectors的宽度应该在原理图中可见。我正在使用Xilinx ISE @Brian。例如,当我将此设备放置在顶层模块中时,它的行为不正确:(http://i.imgur.com/QoOPQ.jpg?1) 了解其他组件是如何正确绘制的。 – John

回答

0

你的“my_shifter”似乎很好 - 本身。 Xilinx工具可以成功编译它,RTL查看器可以成功显示它,自定义信号以及所有信号。

但是,使用7段控制器将“my_shifter”嵌入顶层设计中,我设法重现了令您困惑的“错误”的症状 - 它不会显示在顶层图的RTL视图中。

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

修复了这些未接连接,并确保移位器出现,其所有端口都正确连接在RTL视图中。

因此,我收回我的建议,即RTL查看器可能会出现问题(在这方面!),但强化我的建议,认为这是解决基本设计问题的非常糟糕的方法。

这就是模拟的目的。

否则,你的工作比必要的要困难得多,并且在问题出现的地方被误导。

+0

布赖恩首先感谢您的关注,但我完全改变了我的模块。让我们继续从我的其他问题在这里:[link](http://stackoverflow.com/questions/13856657/VHDL滚动文本-7段显示器上) – John