逻辑优化基础-strash

1. 简介

Strash (Structural Hash) 是一种基于哈希表的逻辑综合算法,用于减少逻辑电路中重复的子电路。

Strash 算法通过将逻辑电路中的每个门表示为一个节点,并将这些节点哈希到哈希表中,以识别相同的节点并将它们合并为一个节点。这样可以减少电路中的节点数量,从而减少电路的延迟和功耗。

2. 算法实现

Strash 算法的实现需要定义一个哈希函数来将节点映射到哈希表中的桶。一般来说,哈希函数应该满足以下条件:

  1. 相同的节点应该映射到同一个桶中。
  2. 不同的节点应该尽可能映射到不同的桶中。
  3. 哈希函数应该快速计算。

哈希表中的每个桶都包含一个链表,其中存储了哈希函数将同一节点映射到该桶的所有节点。当算法需要插入新节点时,它首先计算节点的哈希值,并在哈希表中查找与该哈希值相同的桶。如果桶中已经有与新节点相同的节点,则直接使用该节点,否则将新节点插入到桶的链表中。

以下是 Strash 算法的基本流程:

  1. 为输入电路中的每个门创建一个节点。
  2. 将每个节点哈希到哈希表中。
  3. 对于每对逻辑门 A 和 B,检查它们是否等价。如果它们等价,则将它们合并为一个节点。
  4. 删除重复节点,并将电路重新连接。

Strash 算法通常用于先进的逻辑综合工具中,以减少电路的规模和功耗

3. 示例

Strash hash是一种逻辑综合算法,它可以利用相邻的门之间的共同输入将它们合并成一个门,假设有以下Verilog代码描述的逻辑电路:

module example(a, b, c, d, f);
    input a, b, c, d;
    output f;
    wire w1, w2, w3, w4;
    assign w1 = ~(a & b);
    assign w2 = ~(a & c);
    assign w3 = ~(b & c & d);
    assign w4 = ~(w1 | w2 | w3);
    assign f = ~(a & b & c & d) & w4;
endmodule

可以看到,该电路包含了多个逻辑门,其中包括与门、或门、非门等等。如果使用传统的布尔运算进行化简,这个电路将非常复杂。但是,通过Strash算法进行优化,可以将其简化为如下所示的形式:

module example(a, b, c, d, f);
    input a, b, c, d;
    output f;
    wire w1, w2, w3;
    assign w1 = ~(a & b);
    assign w2 = ~(a & c);
    assign w3 = ~(b & c & d);
    assign f = ~(a & b & c & d) & ~(w1 | w2 | w3);
endmodule

可以看到,使用Strash算法进行优化之后,电路变得更加简洁,只有三个逻辑门,比原来的电路少了很多。这种优化方法可以极大地减少逻辑门的数量,从而降低了电路的面积和功耗,提高了电路的性能和可靠性。

相关论文:

  1. Brayton, R.K., Hachtel, G.D., Sangiovanni-Vincentelli, A.L.: A survey of optimization techniques for integrated circuit design. Proceedings of the IEEE 69(10), 1349–1363 (1981).
  2. Somenzi, F.: Binary decision diagrams: Theory and implementation. Springer (2011).
  3. Brayton, R.K., Hachtel, G.D., Sangiovanni-Vincentelli, A.L.: Logic Minimization Algorithms for VLSI Synthesis. Springer (1984).
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值