在xilinx FPGA技术社区上的第一篇文章居然是记录一个尚未解决的问题。是一个好兆头呀!![]()
最近尝试着用ChipScope 来调试和验证AES256加密模块。
一般有两种方法添加ChipScope core:
第一种用ChipScope Core Inserter(见参考文献1.)这里不做详述
第二种直接添加IP core,然后用VHDL或者Verilog手动连接这个模块。
ChipScope一般常用的核有:
图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;

图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