VHDL简单优化

时间:2014-05-09 10:32:26

标签: vhdl

我有以下代码,我正在尝试通过使用循环来使其更专业。

ENTITY cc IS
    PORT ( s, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, y0, y1, y2, y3, y4, y5, y6, y7, y8, y9    : IN    BIT;
           m0, m1, m2, m3, m4, m5, m6, m7, m8, m9                                               : OUT   BIT );
END cc;

ARCHITECTURE cc_logic OF cc IS
BEGIN
    m0 <= (NOT(s) XOR x0) XNOR (s OR y0) ;
    m1 <= (NOT(s) XOR x1) XNOR (s OR y1) ;
    m2 <= (NOT(s) XOR x2) XNOR (s OR y2) ;
    m3 <= (NOT(s) XOR x3) XNOR (s OR y3) ;
    m4 <= (NOT(s) XOR x4) XNOR (s OR y4) ;
    m5 <= (NOT(s) XOR x5) XNOR (s OR y5) ;
    m6 <= (NOT(s) XOR x6) XNOR (s OR y6) ;
    m7 <= (NOT(s) XOR x7) XNOR (s OR y7) ;
    m8 <= (NOT(s) XOR x8) XNOR (s OR y8) ;
    m9 <= (NOT(s) XOR x9) XNOR (s OR y9) ;
END cc_logic ;

这可能吗?

1 个答案:

答案 0 :(得分:5)

包含standard的{​​{1}}包也有bit,因此如果是界面 可以改为使用向量而不是单个位,然后代码可以 为VHDL-2002编写的:

bit_vector

请注意,ENTITY cc IS PORT ( s : IN BIT; x : IN BIT_VECTOR(0 TO 9); y : IN BIT_VECTOR(0 TO 9); m : OUT BIT_VECTOR(0 TO 9)); END cc; ARCHITECTURE cc_logic OF cc IS BEGIN loop_gen : FOR idx IN m'RANGE GENERATE m(idx) <= ((NOT s) XOR x(idx)) XNOR (s OR y(idx)); end generate; END cc_logic; 已更改为NOT(s),因为假设是(NOT s) 意图和外部XOR时的逻辑操作是等效的。

也可以在没有生成循环的情况下编写体系结构:

ARCHITECTURE cc_logic OF cc IS
  SIGNAL s_vec : BIT_VECTOR(0 to 9);
BEGIN
  s_vec <= (OTHERS => s);
  m <= ((NOT s_vec) XOR x) XNOR (s_vec OR y);
END cc_logic;

如果使用的工具支持VHDL-2008,那么您甚至可以减少它 更多:

ARCHITECTURE cc_logic OF cc IS
BEGIN
  m <= ((NOT s) XOR x) XNOR (s OR y);
END cc_logic;

最后,您可以考虑使用std_logicstd_logic_vector代替。{ bitbit_vector,因为std_logic中的其他状态 当输入数据未知时,模拟更准确。