• EXlif: Extended Logic Interchange Format Syntax(Describing Circuits for Forte)


    exlif格式是对blif格式的拓展,可作为FORTE的输入文件格式
    lif格式将组合电路表述成真值表
    电路中每个内部信号,在blif格式中有对应的真值表、输入(fan in)和解析方程(resolution function)
    在exlif格式中又增加了对时序逻辑元素的构造,如主从触发器(master slave flip-flops)
    同时也增加了对结构层级、三状态驱动、各种类型的断言的构造

    基本语法对象

    空白(white space)

    空格、tab、换行都是空白,除了真值表构造时需要考虑空白,其余都不要

    注释(comments)

    以#开头的行为注释行;
    某行中,一个空格+一个#之后的剩余部分为注释

    行延续(line continuation)

    一行以双下划线()结尾,则该行与下一行视为同一行

    节点名称(node names)

    exlif格式大小写敏感
    一个节点名称由base name组成、或者是一个quoted name

    base name:包括除"="以外的非空白符,正则表达式为:[^= ][^\ =]*
    quoted name:由双引号括起来的任意字符序列
    向量名:形如:base name[2], base name[3:2], base name [1:9], "a strange node name"[2:3]

    模型名称

    和节点名称类似,但不包括向量名

    功能单元块(FUB,functional unit block)

    一个功能单元块相当于Verilog里的一个模块(或VHDL中的一个实体Entity)
    在EXLIF中的FUB:

    .model FUB-name
    <FUB interface template>
    <declaration of signals>
    <FUB body>
    .end
    

    一个EXLIF文件中可定义多个FUB
    也可在一个FUB中定义另一个FUB
    相当于是BLIF中模块,不需要先定义再使用

    FUB解释

    .model FUB-name 模型名称
    .end模型终止标识符

    <FUB interface template>
    • .input [inputs] 定义若干输入信号,形如:
    .model sample
    .inputs in1 in2
    

    信号可以是标量(scalars)或者向量(vectors), 形如abc[12:10]定义一个大小为3的向量,具有的元素为abc[12], abc[11], abc[10]

    • .outputs [output]定义若干输出信号,形如:
    .model sample
    .outputs out1 out2
    

    一个信号可以同时出现在输入和输出信号中,表示模型贯穿信号

    • .vector signal-name upper-bound lower-bound 表示signal-name是一个多位信号, 最高有效位和最低有效位分别用upper-boundlower-bound表示,都是整数。作为一种对于多位信号的缩写,在能够将这些信号显示指出来时,最好是显示指出,因此不推荐使用.vector
    <declaration of signals> 模型属性(性质)
    • .attr name [attr-list] 用于指定FUBs、subFUBs和signals信号的属性。其中name代表FUBs、FUBs实例和signals的名称; [attr-list]表示一系列(属性名、属性值)对,每个元素形如attr-name=attr-value
      attr-name: 名称
      attr-value: 可以是string或者number
      如果某属性名没有对应的属性值,那该属性名需要用双引号括起来。
      attr-list 中必须有一个元素,无论是有属性值的属性还是没有属性值的属性(用双引号括起来)
      例,如下两个声明效果相同:
    1. .attr x file=”foo.hdl”
    .attr x line=”15”  # 对于同一FUB或signal可以有多行属性
    2. .attr x file=”foo.hdl” line=”15”
    
    <FUB body>主体定义
    组合电路信号

    有三种方式来定义组合电路信号的下一状态方程(next state function),分别是

    • .names
    • .expr
    • .bexpr
      其中.names用的比较多
    1. .names [inputs] output
      类似于BLIF中一样,对于若干二值输入和一个二值输出(‘-’表示don't care),定义一个真值表
      如果某个输入信号是vector,则输出信号也必须是同等大小的vector, 真值表也要做相应拓展
      例:
    .names in1 in2 ... out
    in1_value_1 in2_value_1 ... out_value_1
    in1_value_2 in2_value_2 ... out_value_2
    

    再例,一个二输入与门:

    .names a b foo
    11 1
    

    一个二输入或门:

    .names a b foo
    00 0
    

    或者,一个二输入或门:

    .name a b foo
    1- 1
    -1 1
    

    再例, 3个二输入与非门组成的电路:

    .names a[2:0] b[4:2] res[12:10]
    11 0
    

    或者,定义为:

    .names a[2] b[4] res[12]
    11 0
    .names a[1] b[3] res[11]
    11 0
    .names a[0] b[2] res[10]
    11 0
    

    如果,输出是一个vector,输入中存在数组,形如:

    .names sel1 v1[3:0] v2[3:0] res[3:0]
    11- 1
    0-1 1
    

    2..expr output = <expr> 将输入信号定义为输入信号的逻辑表达式,语法如下:

    <expr> ::  <expr> & <expr>               AND
           ||  <expr> + <expr>               OR
           ||  <expr> ^ <expr>               XOR
           ||  <expr> '                      NOT
           ||  T true
           ||  F false
           ||  “vector_name[range1:range2]”  vector
           ||  scalar_name                   node name
           ||  ( <expr> )
    

    优先级: ' > & >^ > +.

    时序逻辑元件
    • .latch latch-input latch-output type control-signal [latch-control-list]: 定义一个存储单元,拥有一个输入和一个输出, latch-output的值是上一状态latch-input的值。latches和flip-flop没有初始值。
    • latch type : edge-sensitive或者level-sensitive, 形如:
      re control-signal: 指定该latch对于control-signal上升沿敏感
      fe control-signal: 指定该latch对于control-signal下降沿敏感
      ah control-signal: 指定该latch对于control-signal高电平敏感
      al control-signal: 指定该latch对于control-signal低电平敏感
      例:
    .latch in1 out1 re clk
    .latch in1 out1 fe clk
    .latch in1 out1 ah clk
    .latch in1 out1 al clk
    
    • latch control constructs: latch控制信号构造
      as: asynchronous set signal 异步设定信号
      ar: asynchronous reset signal 异步复位信号
      en: enable signal 使能信号
      例:
    .latch in1 out1 re clk as=set ar=reset en=en1
    

    以上语句定义一个latch,输入信号为in1,输出信号为out1,受clk信号的上升沿驱动,受到异步设定信号set和异步复位信号reset以及使能信号en1的驱动。

    模型实例的嵌入(子模型?)

    .subckt template-name instance-name [interface-list]定义一个实例化模型,其中template-name是该模型实例对应的模型名, instance-name是该模型实例的名称,interface-list类似于BLIF中一系列(实例信号,接口信号)对,列表元素形如:formal-name=actual-name

    .nondet signal-name

    定义一个非确定性的信号,亦即该信号拥有随机值

    迁移关系的定义

    .trans <transition-name> <signal-name> <transition-type>定义一个迁移关系,其中transition-name是该迁移的名称,signal-name是指该迁移描述的信号,transition-type是指迁移类型,目前包括:

    “high-before”, “high-after”, “low-before”, “low-after”, “rise”, “fall” , “change”, “stable”.
    

    Example

    .model top
    .inputs a b v1[2:0] v3[2:0] clk
    .outputs out1 out2 vres[2:0]
    .expr out1 = a & b
    .expr “vres[2:0]” = “v1[2:0]” & a + “v2[2:0]”’
    .names a b tmp
    00 0
    .subckt bar bar1 clk=clk in[1:0]=v1[2:1] out[1:0]=tmp2[1:0]
    .subckt bar bar2 clk=clk in[1:0]=v3[1:0] out[1:0]=tmp3[1:0]
    .names tmp2[1] tmp2[0] tmp3[1] tmp3[0] out2
    11-- 1
    --11 1
    .end
    .model bar
    .inputs clk in[1:0]
    .outputs out[1:0]
    .latch in[1:0] out[1:0] re clk
    .end
    
  • 相关阅读:
    discuz 门户功能增加自定义keywords字段
    discuz的门户文章页中增加百度分享代码
    discuz 门户页模板中的keywords和description不能正常显示
    windows下python的安装
    discuz 取消门户首页url中的portal.php
    网站被跳转到联通域名无法访问页面
    DedeCms密码解密[转]
    last error : SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate veri
    [转]解决MySQL出现大量unauthenticated user的问题
    ImageUtils
  • 原文地址:https://www.cnblogs.com/bacmive/p/14546090.html
Copyright © 2020-2023  润新知