zoukankan      html  css  js  c++  java
  • BLIF(Berkeley Logic Interchange Format )


    BLIF的目标是用文本的形式描述一个逻辑层级电路(logic-level hierarchical circuit)
    一个电路是由逻辑方程组成的网络(包括组合逻辑和时序逻辑)
    电路可以看作是由组合逻辑节点和时序逻辑元件组成的有向图
    每个节点包含一个单一输出的逻辑方程
    在下面的代码中,尖括号括起非终止符,方括号括起可选结构。

    models

    blif中的模型是展平后的电路
    一个blif文件可包含很多模型,以及对其他文件中的模型的引用

    模型的声明

    .model <decl-model-name>
    .inputs <decl-input-list>
    .outputs <decl-output-list>
    .clock <decl-clock-list>
    <command> 
    ...
    <command>
    .end
    

    <decl-model-name>是指模型名,<decl-input-list><decl-output-list>定义输入信号,以空格分开多个,以换行符结束
    <decl-clock-list>是指可选的时钟信号
    一行中'#'之后的部分为注释
    在没有注释的部分,‘’斜杠符号表示连接两行

    逻辑门 logic gates

    逻辑门将逻辑函数与模型中的信号相关联,也可作为其他逻辑函数的输入

    逻辑门的声明

    .names <in-1> <in-2> ... <in-n> <output>
    <single-output-cover>
    

    <output>指明已定义的逻辑门的输出信号, <in-k>指明已定义的输入信号
    <single-output-cover> 定义一行PLA description, 输入信号的定义域为{0, 1, -},输出信号的定义域为{0,1}
    例:一个逻辑门和它的<single-output-cover>定义

    .names v3 v6 j u78 v13.15
    1--0 1
    -1-1 1
    0-11 1
    

    逻辑门的语义

    在一行<single-output-cover>中,'1'表示该输入信号,'0'表示该输入信号的非,'-'表示没用到该输入信号
    每一行中的所有输入信号用(and)连接
    再使用(or)连接所有行的输入
    例:上述逻辑门可表示为

    v13.15 = (v3 u78’) + (v6 u78) + (v3’ j u78)
    

    如下语句将某个逻辑门j赋予常值'0'

    .names j
    

    如下语句将某个逻辑门j赋予常值'1'

    .names j
    1
    

    External Don’t Cares

    置于模型最后,定义一个独立于该模型的网络

    .exdc
    .names <in-1> <in-2> ... <in-n> <output>
    <single-output-cover>
    

    Latch

    表示一位存储或者状态信息
    latch声明

    .latch <input> <output> [<type> <control>] [<init-val>]
    

    input是输入,output是输出
    type是{fe, re, ah, al, as}中的一种,分别表示“falling edge,” “rising edge,” “active high,” “active low”, “asynchronous”.
    control是latch的时钟信号,如果没有指定时钟信号,则跟随系统的全局时钟信号
    init-val是latch的初始值,可以是{0,1,2,3},'2'表示don't care,'3'表示unknown,默认为'3'
    每个反馈回路(feedback loop)必须包含至少一个锁存器
    例:简单时序电路

    .inputs in 
    .outputs out
    .latch out in 0
    .names in out
    0 1
    .end
    

    Model(subcircuit) references

    一个Model(subcircuit) reference 将一个模型(内部的逻辑方程)插入到另一个模型

    .subckt <model-name> <formal-actual-list>
    

    <model-name>给定被插入的模型名称。该模型不需要在subckt声明前定义,但必须在同一文件或者.search文件及其searching的文件中进行定义
    <formal-actual-list>给定一个mapping,从被插入模型<model-name>的形式终端节点映射到当前模型的实际参数(当前模型的任何信号),形如:

      formal1=actual1 formal2=actual2 ...
    

    一个模型引用(model reference)可以看作被插入模型的一份复制;
    而且可以被调用任意次
    模型引用不只有一个输出
    实例:

    .model 4bitadder
    .input A3 A2 A1 A0 B3 B2 B1 B0 CIN
    .outputs COUT S3 S2 S1 S0
    .subckt fulladder a=A0 b=B0 cin=CIN    s=S0 cout=CARRY1
    .subckt fulladder a=A3 b=B3 cin=CARRY3 s=S3 cout=COUT
    .subckt fulladder b=B1 a=A1 cin=CARRY1 s=XX cout=CARRY2
    .subckt fulladder a=JJ b=B2 cin=CARRY2 s=S2 cout=CARRY3
    
    .names XX S1  # formal output 's' does not fanout to a primary output
    1 1
    .names A2 JJ  # formal input 'a' does not fanin from a primary input
    1 1
    .end
    
    .model fulladder
    .inputs a b cin
    .outputs s cout
    .names a b k
    10 1
    01 1
    .names k cin s
    10 1
    01 1
    .names a b cin cout
    11- 1
    1-1 1
    -11 1
    .end
    

    subfile reference

    一个subfile-reference形如 .search <file-name>
    定义在文件内需要的位置

  • 相关阅读:
    ArcEngine开发——地图浏览
    C#中字符串与数值的相互转换
    ArcGIS数据编辑——反转线段方向
    数据库移植——从MySQL Server到MS SQL Server
    重新学习数据库范式
    使用动态链接库组件进行ArcGIS开发
    ArcGIS数据编辑——按比例拉伸要素的几何形状
    ArcGIS数据编辑——要素概括(简化)/平滑
    使用Paint事件重画GroupBox来修改边框颜色
    ArcEngine开发——从TocControl上获取鼠标点击位置的信息
  • 原文地址:https://www.cnblogs.com/bacmive/p/14373475.html
Copyright © 2011-2022 走看看