2012-12-12 58 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