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阅读