0

chipscope を使用してトライステート信号をプローブしたいと考えています。

このアンサー レコードによると、それはできないので、これが私が始めたものです (関連するコードのみが含まれています)。

-- Tristate signals
FPGA_SMB0_SDA <= sysmon_iic_data;
FPGA_SMB0_SCL <= sysmon_iic_clk;

-- Output signals
DEBUG_LED0 <= '0';  
DEBUG_LED1 <= '0';   

エラーなしで正常にビルドされます。

試行 1:

これは、単なるアウトであるプローブ用のデバッグ信号を生成する最初の試みです。

-- Tristate signals
FPGA_SMB0_SDA <= sysmon_iic_data;
FPGA_SMB0_SCL <= sysmon_iic_clk;

-- Generating new output signals using tristate (tristate signals are either '0' or 'X' for IIC)
sysmon_iic_data_debug <= '0' when (sysmon_iic_data  = '0') else '1'; 
sysmon_iic_clk_debug <= '0' when (sysmon_iic_clk  = '0') else '1';   

-- connecting debug outs to debug leds (so that the debug signals aren't optimized out)
DEBUG_LED0 <= sysmon_iic_data_debug;  
DEBUG_LED1 <= sysmon_iic_clk_debug;   

上記のコードは合成をパスしますが、NGDbuild で次のエラーが発生します。

ERROR:ConstraintSystem:59 - Constraint <IOSTANDARD = LVCMOS25 ;>
   [frm121401u1r1.ucf(333)]: NET "FPGA_SMB0_SDA"
   not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.

上記は、ネットごとに 2 回、合計 8 回繰り返されます。

試行 2:

私が試した2番目のことは、プロセスを使用することでした:

FPGA_SMB0_SDA <= sysmon_iic_data;
FPGA_SMB0_SCL <= sysmon_iic_clk;

gen_sysmon_debug : process(refclk_10m,refclk_10m_rst)
begin
    if (refclk_10m_rst = '1') then
        sysmon_iic_data_debug <= '0';
        sysmon_iic_clk_debug <= '0';
    elsif (rising_edge(refclk_10m)) then
        if (sysmon_iic_clk = '0') then
            sysmon_iic_clk_debug <= '0';
        else
            sysmon_iic_clk_debug <= '1';            
        end if;
        if (sysmon_iic_data = '0') then
            sysmon_iic_data_debug <= '0';
        else
            sysmon_iic_data_debug <= '1';       
        end if;

    end if;
end process;

DEBUG_LED0 <= sysmon_iic_data_debug;  
DEBUG_LED1 <= sysmon_iic_clk_debug;   

これにより、次の NGDbuild エラーが発生しました。

ERROR:NgdBuild:924 - bidirect pad net 'FPGA_SMB0_SDA' is driving non-buffer primitives:
     pin D on block sysmon_iic_data with type FDC,

そのうちの 2 つ、1 つは SDA 用、もう 1 つは SCL 用

より詳しい情報:

これは私のUCFにあるものです:

NET "DEBUG_LED0" LOC = "AK33" | IOSTANDARD = LVCMOS25 ;
NET "DEBUG_LED1" LOC = "AK34" | IOSTANDARD = LVCMOS25 ;
...
NET "FPGA_SMB0_SCL" LOC = "G13" | IOSTANDARD = LVCMOS25 ;
NET "FPGA_SMB0_SDA" LOC = "H13" | IOSTANDARD = LVCMOS25 ;

最上位の vhdl ネット定義:

DEBUG_LED0 : out std_logic;
DEBUG_LED1 : out std_logic;

FPGA_SMB0_SCL : inout std_logic;
FPGA_SMB0_SDA : inout std_logic;

および uBlaze .mhs では:

PORT xps_iic_1_Sda_pin = xps_iic_1_Sda, DIR = IO, BUFFER_TYPE = NONE
PORT xps_iic_1_Scl_pin = xps_iic_1_Scl, DIR = IO, BUFFER_TYPE = NONE

なぜこれらの NGDbuild エラーが発生するのか完全に途方に暮れています。

4

1 に答える 1

0

ネットに別の信号を接続したので、おそらくネットの名前が変更されています:(

制約を取り除き、構築させます。

NCD ファイルを FPGA エディタにロードし、最終的にネットが何と呼ばれるかを確認し、それを UCF で使用します。

または、最上位の VHDL ファイルですべての IOB を自分でインスタンス化すると、IOB ピンと実際のピンの間のネットの名前が変わらないことがわかり、そのネットを制約できます。

于 2012-06-25T14:16:27.000 に答える