博客首页 | 排行榜 |

KiKi的博客

FPGA工程实践,欢迎互相学习和交流,yq000cn at gmail.com

个人档案
博文分类
在添加ICON和ILA 核时所遇到的错误  2010-01-16 11:12

在xilinx FPGA技术社区上的第一篇文章居然是记录一个尚未解决的问题。是一个好兆头呀!

最近尝试着用ChipScope 来调试和验证AES256加密模块。

一般有两种方法添加ChipScope core:

第一种用ChipScope Core Inserter(见参考文献1.)这里不做详述

第二种直接添加IP core,然后用VHDL或者Verilog手动连接这个模块。

ChipScope一般常用的核有:

  1. ICON(Intergrated Controller)核
    所有的核都需要通过JTAG电缆完成计算机和芯片的通信,在ChipScope Pro 中,只有ICON核具备和JTAG边界扫描端口通信的能力,因此ICON核是ChipScope Pro应用必不可缺的关键核。
  2. ILA(Integrated Logic Analyzer)核
    ILA核提供触发和跟踪功能,根据用户设置的触发条件捕获数据,然后在ICON的控制下,通过边界扫描口将数据上传到PC上,最后在Alalyzer中显示出信号波形。
  3. VIO(Virtual IO)核
    虚拟输入、输出核用于实时监控和驱动FPGA内部的信号,可以观测FPGA设计中任意信号的输出结果,以及添加虚拟输入。

image

图1.ChipScope 组成

 

我是通过第二种方法,按照图1的形式,手动把各个模块连接起来。下面是我的TOP层代码,用的VHDL。

   1: library IEEE;
   2: use IEEE.STD_LOGIC_1164.ALL;
   3:  
   4: entity scope_aes256 is
   5:     port( clk: in std_logic);
   6: end entity scope_aes256;
   7:  
   8: architecture STRUCTURE of scope_aes256 is
   9:     --Intergrated Controller 
  10:     component ICON is
  11:       port (
  12:         CONTROL0 : inout STD_LOGIC_VECTOR ( 35 downto 0 ); 
  13:         CONTROL1 : inout STD_LOGIC_VECTOR ( 35 downto 0 ));
  14:     end component ICON;
  15:     
  16:     --Intergrated Logic Analyzer
  17:     component ILA is
  18:       port (
  19:         CLK     : in STD_LOGIC ; 
  20:         CONTROL : inout STD_LOGIC_VECTOR ( 35 downto 0 ); 
  21:         TRIG0     : in STD_LOGIC );
  22:     end component ILA;
  23:     
  24:     -- Virtual IO
  25:     component VIO is
  26:       port (
  27:         CLK     : in STD_LOGIC; 
  28:         CONTROL : inout STD_LOGIC_VECTOR ( 35 downto 0 ); 
  29:         SYNC_OUT : out STD_LOGIC_VECTOR ( 167 downto 0 ); 
  30:         SYNC_IN : in STD_LOGIC_VECTOR ( 127 downto 0 ));
  31:     end component VIO;
  32:     
  33:     --AES256 core
  34:     component AES_core is
  35:         Port ( 
  36:            clk         : in  STD_LOGIC;
  37:            rstn     : in  STD_LOGIC;        --Reset signal, low is
valid
  38:            Enc_dec     : in  STD_LOGIC;     --'1' indicate encyption or decrytion
  39:            KeyWIn     : in  STD_LOGIC_VECTOR (31 downto 0);
  40:            KeyLd     : in  STD_LOGIC;      --latch in key
  41:            KeyAddr    : in  STD_LOGIC_VECTOR (2 downto 0);
  42:            DataIn     : in  STD_LOGIC_VECTOR (127 downto 0);   
--Plaintext or Ciphertext input
  43:            DataOut     : out  STD_LOGIC_VECTOR (127 downto 0);   
--Ciphertext or Plaintext ouput
  44:            Done        : out  STD_LOGIC);       --'1' indicate the dataout is valid
  45:     end component AES_core;
  46:     
  47:     --internal signal
  48:     signal CONTROL_A : STD_LOGIC_VECTOR(35 downto 0);
  49:     signal CONTROL_B : STD_LOGIC_VECTOR(35 downto 0);
  50:    
  51:     signal TRIG0    : STD_LOGIC;
  52:     signal SYNC_OUT : STD_LOGIC_VECTOR(167 downto 0);
  53:     signal SYNC_IN  : STD_LOGIC_VECTOR(127 downto 0);   
  54:     
  55: begin
  56:     ICON_0     : ICON
  57:         port map(
  58:             CONTROL0 => CONTROL_A,
  59:             CONTROL1 => CONTROL_B);
  60:             
  61:     ILA_0    : ILA 
  62:         port map(
  63:         CLK     => CLK,
  64:         CONTROL => CONTROL_A,
  65:         TRIG0     => TRIG0);
  66:     
  67:     VIO_0    : VIO
  68:         port map(
  69:             CLK     => CLK,
  70:             CONTROL => CONTROL_B,
  71:             SYNC_OUT => SYNC_OUT,
  72:             SYNC_IN => SYNC_IN
  73:         );
  74:         
  75:     AES_CORE_0 : AES_core 
  76:         port map (
  77:             clk        => CLK,
  78:             rstn    => SYNC_OUT(165),
  79:             Enc_dec => SYNC_OUT(164),
  80:             KeyLd    => SYNC_OUT(163),
  81:             KeyAddr => SYNC_OUT(162 downto 160),
  82:             KeyWin     => SYNC_OUT( 159 downto 128),
  83:             DataIn     => SYNC_OUT(127 downto 0),
  84:             DataOut => SYNC_IN,            
  85:             Done => TRIG0);
  86:         
  87:     
  88: end ARCHITECTURE STRUCTURE;
 
综合后会生成RTL电路(见图2),左边是VIO核,中间是AES256核,右上是ICON核,右下是ILA核。但是奇怪的是连接ILA和ICON核竟然会出现多出一个头来。思来想去,未得果。
 

 

图2.Scope_AES_core RTL Schematic

在translate时候出现这样的错误:

    ERROR:NgdBuild:456 - logical net 'CONTROL0<1>' has both active and tristate
   drivers...
   Active driver(s) of net 'CONTROL0<1>':
   -----------------
   'Q' pin on block 'ICON_0/U0/U_ICON/U_TDI_reg' ( FDE )
   Tristate driver(s) of net 'CONTROL0<1>':
   -------------------
   'CONTROL<1>' pin on block 'ILA_0' ( ILA )

说是CONTROL0既是驱动型的又是三态型的。而CONTROL1却没有提示错误。实在不清楚ILA,ICON以及VIO内部的构造。

先把错误记录在这里,但愿明天能解决这个错误。
时间不早了。还是得睡觉休息。 

如果有谁遇到过类似的问题,或者解决过这样的问题。请联系我。
我的邮箱:yq000cn@gmail.com

  写于2010年1月15日23:58
 修改于2010年1月16日11:09

Ref

1. ChipScope Core Inserter 使用说明

类别:Xilinx tools |
上一篇:(转载)别人眼中的国外电子工程师们
以下网友评论只代表其个人观点,不代表本网站的观点或立场