敏捷硬件开发语言Chisel与数字系统设计(第2版)第2章 Chisel入门与Scala变量函数基础_第1页
敏捷硬件开发语言Chisel与数字系统设计(第2版)第2章 Chisel入门与Scala变量函数基础_第2页
敏捷硬件开发语言Chisel与数字系统设计(第2版)第2章 Chisel入门与Scala变量函数基础_第3页
敏捷硬件开发语言Chisel与数字系统设计(第2版)第2章 Chisel入门与Scala变量函数基础_第4页
敏捷硬件开发语言Chisel与数字系统设计(第2版)第2章 Chisel入门与Scala变量函数基础_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

2.Chisel入门及数据类型2021年11月一、Chisel开发环境安装二、Chisel的常见问题三、Chisel的变量与数据类型四、总结目

录2一、Chisel开发环境安装3Chisel开发环境安装1.1安装步骤安装SBT:安装Git:

Scala的构建工具方便后续项目开发xjtu-chisel@ubuntu:~$sbtsbtVersion

[info]welcometosbt1.4.6(PrivateBuildJava1.8.0_275)

[info]loadingprojectdefinitionfrom/home/xjtu-chisel/project

[info]setcurrentprojecttoxjtu-chisel(inbuildfile:/home/xjtu-chisel/)

[info]1.4.6xjtu-chisel@ubuntu:~$sudoapt-getinstallgit

xjtu-chisel@ubuntu:~$git–version

gitversion2.25.14Chisel开发环境安装1.1安装步骤安装Verilator:安装g++:

开源高性能VerilogHDL仿真器C++编译器,Verilator会用到xjtu-chisel@ubuntu:~$sudoapt-getinstallverilator

xjtu-chisel@ubuntu:~$verilator-version

Verilator4.0282020-02-06revv4.026-92-g890cecc1xjtu-chisel@ubuntu:~$sudoapt-getinstallg++

xjtu-chisel@ubuntu:~$g++-v

gccversion7.5.0(Ubuntu7.5.0-3ubuntu1~18.04)5Chisel开发环境安装1.1安装步骤安装GTKWave:安装Chisel:

波形查看器从github上克隆chisel-template,其自带了Chisel3.4.3,后续项目都是基于这个工程开发xjtu-chisel@ubuntu:~$sudoapt-getinstallgtkwavexjtu-chisel@ubuntu:~$gitclonehttps:///freechipsproject/chisel-template6Chisel开发环境安装1.2工程文件目录Chisel的设计部分文件测试文件和生成电路的主函数自定义工程文件与Chisel互动的外部文件7Chisel开发环境安装1.2环境测试主工程文件:

packagetest

importchisel3._

classANDextendsRawModule{

valio=IO(newBundle{

vala=Input(UInt(1.W))

valb=Input(UInt(1.W))

valc=Output(UInt(1.W))

})

io.c:=io.a&io.b}端口定义二输入与门逻辑8Chisel开发环境安装1.2环境测试生成电路的主函数:

//ANDtest.scala

packagetest

importchisel3.stage.ChiselGeneratorAnnotation

objecttestMainextendsApp{

(newchisel3.stage.ChiselStage).execute(Array("--target-dir","generated/and"),Seq(ChiselGeneratorAnnotation(()=>newAND)))

}9Chisel实现简单电路1.2环境测试moduleAND(

inputio_a,

inputio_b,

outputio_c

);

assignio_c=io_a&io_b;//@[and.scala11:16]

endmodule生成Verilog文件:对于大规模电路,用生成的Verilog文件在专业EDA工具里仿真。10二、Chisel常见问题11Chisel常见问题2.1常见问题寄宿在Scala里面。转变成Verilog时不会采用不可综合语法。只支持0,1逻辑。自动检测未被驱动的输出型线网或端口。代码包不会被隐式导入。Chisel仍在更新中。12三、Chisel的变量与数据类型13Chisel的变量与数据类型3.1数据类型长方形是trait,三角形是object,椭圆形是class。14Chisel的变量与数据类型3.2数据字面量构造UInt对象:1.U//字面值为“1”的UInt对象0xd.U//字面值为“14”的UInt对象构造SInt对象:-8.S//字面值为“-8”的SInt对象构造Bool对象:true.B//字面值为“true”的Bool对象构造UInt,SInt对象,其实调用了fromtIntToLiteral(1).U的方法,Bool则是fromBooleanToLiteral15Chisel的变量与数据类型3.3数据宽度默认情况,数据宽度按字面值取最小:1.U字面值为“1”、宽度为1bit的UInt对象构造指定宽度的对象:1.U(32.W)字面值为“1”、宽度为32bit的UInt对象-8.S(32.W)字面值为“-8”、宽度为32bit的SInt对象取数据的某一位:1.U(31)字面值为“0”、宽度为1bit的UInt对象1.U(0)字面值为“1”、宽度为1bit的UInt对象16Chisel的变量与数据类型3.4类型转换类型转换包括asUInt、asSInt、asBool和asBools:"ha".asUInt(8.W)-1.S(3.W).asUInt、辅助完成子字赋值:

classTestModuleextendsModule{

valio=IO(newBundle{

valin=Input(UInt(10.W))

valbit=Output(Bool())

valout=Output(UInt(10.W))

})

valbools=VecInit(io.in.asBools)

bools(0):=io.bit

io.out:=bools.asUInt}17Chisel的变量与数据类型3.5向量定义:参数:

第一个参数:元素的个数

第二个参数:元素的类型与位宽提取向量中某个元素:

valmyVec=Wire(Vec(3,UInt(32.W)))valmyReg_0=myVec(0)

valmyReg_1=myVec(1.U)18Chisel的变量与数据类型3.5向量高级用法一

19Chisel的变量与数据类型3.5向量20Chisel的变量与数据类型3.5向量高级用法二

21Chisel的变量与数据类型3.5向量22Chisel的变量与数据类型3.5包裹构建端口列表可以包含向量classMyModuleextendsModule{

valio=IO(newBundle{

valin=Input(UInt(32.W))

valout=Output(UInt(32.W))

})classMyBundleextendsBundle{

valfoo=UInt(4.W)

valbar=Vec(2,UInt(4.W))

}23Chisel的变量与数据类型3.5包裹字段拼接classMyBundleextendsBundle{

valfoo=UInt(4.W)//高位

valbar=UInt(4.W)//低位

}

valbundle=Wire(newMyBundle)

bundle.foo:=0xc.U

bundle.bar:=0x3.U

valuint=bundle.asUInt//12*16+3=195wire[7:0]uint;

reg[3:0]foo=4’hc;reg

[3:0]bar=4’h3;

assignuint={

foo,

bar};//把foo和bar拼接成uint。24Chisel的变量与数据类型3.5包裹完成拼接变量的赋值wire[1:0]a;

wire[3:0]b;

wire[2:0]c;

wire[8:0]z=[...];

assign{a,b,c}=z;classMyBundleextendsBundle{

vala=UInt(2.W)

valb=UInt(4.W)

valc=UInt(3.W)

}

valz=Wire(UInt(9.W))

z:=...

valunpacked=z.asTypeOf(newMyBundle)

unpacked.a

unpacked.b

unpacked.c25Chisel的变量与数据类型3.5内建操作符Chisel的内建操作符操作符释义位操作符作用类型:

SInt,UInt,BoolvalinvertedX=~x位取反valhiBits=x&"h_ffff_0000".U位与valflagsOut=flagsIn|overflow位或valflagsOut=flagsIn^toggle位异或缩减位操作符作用类型:

SInt,UInt

返回类型:BoolvalallSet=x.andR缩减与valanySet=x.orR缩减或26Chisel的变量与数据类型3.6位宽推断Chisel的位宽推断操作符位宽z=x+y

or

z=x+%yw(z)=max(w(x),w(y))z=x+&yw(z)=max(w(x),w(y))+1z=x-y

or

z=x-%yw(z)=max(w(x),w(y))z=x-&yw(z)=max(w(x),w(y))+1z=x&yw(z)=min(w(

温馨提示

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

最新文档

评论

0/150

提交评论