Action Item - KinGitY/uhdl GitHub Wiki

文档

Quick Start

  • 安装/必要的说明
  • 最基本的例子,声明Component,实现一个Mux
  • 进一步的例子,增加内部变量,即Wire和Reg,说明清楚UHDL对Wire和Reg定义的不同
  • 使用If的例子
  • 使用Case的例子
  • 所有操作符,详见user guide,并给出一个链接
  • 使用python的控制结构,参数化生成IO
  • 使用python的控制结构,参数化实现if和case
  • 使用python的控制结构,通过复杂的config文件来生成电路

User Guide

Demo

Demo

先想想我们要做啥?

新语法

Unconnect/NoLoad

我们的规则中将会加入对信号输出悬空的检查,虽然我们不建议这么做,因为uhdl有足够灵活的语法来让user自己控制好不使用的电路就不生成。

但是我们不能完全禁止这种行为。并且在开发到一半的时候,确实可能留一些信号以后用。或者保留一些debug信号用来观察。

但是我们确实希望user能够更严谨地描述一个电路,因此如果有一个信号确实悬空不用,user应该用Unconnect/Noload的来指明

语法类似于:

Unconnect(self.a)
Unconnect += self.a

具体语法取决于实现。

规则检查

规则检查的开关

每个Component应该都有自己的Config对象,这个Config对象控制规则是否在这个模块中适用

每个Config需要一个优先级

但是这个Component有父Component,那么如果父Component的优先级比本Component高,那么将会使用父Component的Config对象

但是这样做存在一个问题,即使用一个子Component的人,不知道子Component的优先级设置了多高,导致父Component设置了一个以为很高的优先级,希望覆盖子Component。但是实际上并没有做到,导致上层希望在整个component中部署的规则并没有部署。

目前我的想法是在父Component中,使用一些disable方法把子component的config都置为disable。因此所有的config都需要一个enable/disable字段。

此外,为了能够精细化地控制config,每个对象使用的Config应该分为几个子config,每个子config单独开关,并适用上述规则。

此外,为了避免用户瞎搞,这个config应该是每个项目预设几种,作为参数让用户加载的。但这个事情只能作为一种建议实现,因为我们没办法控制用户自己硬要写一个config出来,并且加载。但是这仍旧是一个隐患,这个地方有什么好办法吗?

我认为应该预设的几种Config:

  • 全部规则打开,适用于绝大部分模块
  • 只检查边界IO,Blackbox模块使用
  • 全部规则关闭,适用于debug
  • 还没想好,但是对于规则检查,我们确实需要比较精确的控制,尤其是在以后引入约束之后。

行为型检查

这部分基本完成,在我的理解中行为检查是不需要任何config来驱动的,是永远不可以被disable掉的。

因为行为检查保证的包括width match之类的属性,是uhdl内核各种处理都依赖的基石。

结构型检查

  • 输入悬空检查,遍历output、wire、reg检查rvalue是否存在
  • 输出悬空检查,检查input、wire、reg的输出是否没有被使用

约束

Perf Model

uvm<->sc 初步demo的建立

Remaining idea

  • 插入verilog原语,主要用于例化网表格式的module

例如,插入markbuffer便于在网表中做信号定位

  • 自动生成信号位宽,便于verilog阅读