敏捷硬件开发语言Chisel与数字系统设计 课件 第9章 其他议题_第1页
敏捷硬件开发语言Chisel与数字系统设计 课件 第9章 其他议题_第2页
敏捷硬件开发语言Chisel与数字系统设计 课件 第9章 其他议题_第3页
敏捷硬件开发语言Chisel与数字系统设计 课件 第9章 其他议题_第4页
敏捷硬件开发语言Chisel与数字系统设计 课件 第9章 其他议题_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.其他议题一、重命名模块名称二、命名规则三、重命名模块内信号名称四、参数化的Bundle五、FixedPoint六、assert七、总结目录

2一、重命名模块名称

3一、重命名模块名称Chisel生成Verilog的模块名默认使用Chisel中的类名。通过重写desiredName方法重命名生成Verilog的模块名。模块和黑盒都适用。

4一、重命名模块名称例:ChiselVerilogclassCoffeeextendsBlackBox{

valio=IO(newBundle{

valI=Input(UInt(32.W))

valO=Output(UInt(32.W))

})

overridedefdesiredName="Tea"

}

classSaltextendsModule{

valio=IO(newBundle{})

valdrink=Module(newCoffee)

overridedefdesiredName="SaltDrink"

}moduleSaltDrink(

inputclock,

inputreset

);

wire[31:0]drink_I;

wire[31:0]drink_O;

Teadrink(

.I(drink_I),

.O(drink_O)

);

assigndrink_I=32'h0;

endmodule

5二、命名规则

6二、命名规则Chisel难以可靠地捕获信号名称是一个历史性问题,主要是因为Chisel依靠反射来查找名称。Chisel3.4引入了一个Scala编译器插件,它能可靠地捕获信号名称。插件的作用:

①给中间变量名加前缀

②函数调用或者作用域里面定义的信号名生成 Verilog时使用Chisel变量名

7三、重命名模块内信号名称

8三、重命名模块内信号名称chisel3.experimental包里的prefix和noPrefix可以用来增加自定义前缀和去除前缀: prefix用来增加自定义前缀,但是会保留前缀中的左侧变量名; noPrefix可以去掉前缀中的左侧变量名;如果只想生成自定义的前缀,先使用prefix加自定义前缀,再使用noPrefix去除前缀中的左侧变量名。注:如果先使用noPrefix再使用prefix只能去掉前缀中的左侧变量名,不会添加自定义前缀名。3.1前缀

9三、重命名模块内信号名称如果想更改生成Verilog的信号名称,可以使用suggestName方法。如果在生成中间变量过程中使用suggestName,会生成相应的前缀。如果想去掉该前缀,使用noPrefix去除。

suggestName添加的名字可能不会出现在Verilog中,比如该信号被优化掉。三、重命名模块内信号名称3.2suggestName

10重命名模块内信号名称

forceName是chisel3.util.experimental里的单例对象,它可以更改信号名、端口名、实例名。用法是foceName(信号名/端口名/实例名,字符串)注:使用时需要importchisel3.util.experimental.forceName三、重命名模块内信号名称3.3forceName

11四、参数化的Bundle

12当一个Bundle类的对象用于创建线网、IO等操作时,它并不是把自己作为参数,而是交出自己的一个复制对象,也就是说编译器需要知道如何来创建当前Bundle对象的复制对象。Chisel提供了一个内部的API函数cloneType,任何继承自Data的Chisel对象,要复制自身时,都是由cloneType负责返回该对象的复制对象。四、参数化的Bundle

13当自定义的Bundle的主构造方法没有参数时,Chisel会自动推断出如何构造Bundle对象的复制。但是,如果自定义的Bundle带有参数列表,那么Chisel就可能无法推断了。此时需要自己重写Bundle类的cloneType方法,其形式如下:overridedefcloneType=(newCustomBundle(arguments)).asInstanceOf[this.type]四、参数化的Bundle

14五、FixedPoint

15五、FixedPoint在设计电路中有时需要用到定点数,在chisel3.util.experimental包里定义了FixedPoint密封类和伴生对象。构造FixedPoint需要两个参数:

FixedPoint(width:Width,binaryPoint:BinaryPoint) width:定点数的位宽 binaryPoint:尾数位位宽

FixedPoint类也定义了很多方法,包括算术运算、位操作、比较操作等,详情见API文档和源码。

16六、assert

17六、assert

有时需要在构建电路时限制参数条件,或者对电路内信号进行断言,如果信号不满足断言的条件则报错,实现上述功能可以使用chisel3包中的assert方法。assert方法可以接受一个参数、两个参数、多个参数。一个参数:只有判断条件,可以是Bool类型或者是Boolean类型,也就是说assert同时支持scala和chisel的逻辑判断。两个参数:判断条件和字符串,如果判断条件不成立,报错信息会输出这个字符串。多个参数:判断条件、字符串和信号名,当判断条件是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论