敏捷硬件开发语言Chisel与数字系统设计 课件 第6章 黑盒_第1页
敏捷硬件开发语言Chisel与数字系统设计 课件 第6章 黑盒_第2页
敏捷硬件开发语言Chisel与数字系统设计 课件 第6章 黑盒_第3页
敏捷硬件开发语言Chisel与数字系统设计 课件 第6章 黑盒_第4页
敏捷硬件开发语言Chisel与数字系统设计 课件 第6章 黑盒_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

6.黑盒西安交通大學XI'ANJIAOTONGUNIVERSITY目

录一、例化黑盒二、复制Verilog文件三、内联Verilog

文件四、inout端口2一、例化黑盒正安文是大XPANIIAOT

UNIVERSITY3>Chisel

的功能相对Verilog

来说还不完善,设计人员在当前版本下无法实现的功能,就需要用Verilog来实现。Chisel接口

(Verilog)

Chisel接口BlackBox>向Chisel代码提供用Verilog

设计的电路的接口例化黑盒1.1背景4在Chisel模块里例化另一个模块,生成Verilog代码时,端口名字里会增加“io_”。假设有一个外部的Verilog

模块,端口列表声明如下:module

Dut(input[31:0]a,input

clk,input

reset,output[3:0]b)Dut

u0(a(u0_a),.clk(u0_clk),.reset(u0_reset),b(u0_b))例化黑盒1.2例化黑盒按照Verilog

的语法,例化代码如下:5思考:倘若将上述Verilog

模块声明成普通的Chisel

模块,然

后直接例化使用,例化的Verilog代码就会变成:Dut

u0(io_a(io_u0_a),io_clk(io_u0_clk),io_reset(io_u0_reset),io_b(io_u0_b))这样做在Chisel层面上会成功吗?不允许模块内部连线为空例化黑盒6class

UseDut

extends

Module{val

io=1O(new

Bundle{val

toDut_a=Input(UInt(

32.W))val

toDut_b=Output(UInt(

4.W))val

u0=Module(

new

Dut)u0.io.a:=

io.toDut_au0.

io.clk:=

clocku0.io.reset:=

resetio.toDut_b

:=

u0.io.bclass

Dut

extends

BlackBox{valio

=IO(

new

Bundle{

val

a=Input(Ulnt(

32.W))

val

clk=Input(Clock())val

reset=Input(Bool()valb=Output(UInt(4

.W))例化黑盒定义Dut

,不继承自Module,

而继承自BlackBox。无需给黑盒的端口名加

"io_"71.3

Map[String,Param]BlackBox

的构造方法可以接收一个Map[String,Param]

类型的参数。作用

:使得例化外部的Verilog

模块时具有配置模块的“#(参数配置)”。映射的键固定是字符串类型,对应Verilog里声明的参数名。映射的值对应传入的配置参数,可以是字符串,也可以是整数和浮点数。例化黑盒8例化黑盒实例importchisel3.experimental.class

Dut

extendsBlackBox(Map(

"DATA_WIDTH"->

32

,"MODE"

->

"

Sequential","RESET"

->

"Asynchronous"

)){val

io

=1O(

new

Bundle

{val

a=Input(UInt(32.W))val

clk=Input(Clock()val

reset=Input(Bool()val

b=Output(UInt(4,W))单例对象chisel3.experimental里定义了相应的隐式转换,可以把BigInt、Int、Long、Double

和String

转换成对应的Param类型1.4动态定义模块的名字在转成Verilog

时的模块名不使用定义的类名,而是使用重写的desiredName

方法的返回字符串override

def

desiredName="Tea"class

Salt

extends

Module{val

io=IO(

new

Bundle

{})val

drink

=Module(

new

Coffee)override

def

desiredName

=

"

SodiumMonochloride"class

Coffee

extends

BlackBox{val

io=1O(new

Bundle{val

l=Input(UInt(

32.W))val

O=Output(UInt(32.W))例化黑盒使用重写的desiredName方法将Salt改为SodiumMonochloride使用重写的desiredName

方法将Coffee改为Tea10二、复制Verilog文件正安文是大XPANIIAOT

UNIVERSITY112.1复制方式一>chisel3.util

包里有一个特质HasBlackBoxResource如果在黑盒类里混入这个特质,并且在src/main/resources文件夹里有对应的Verilog源文件,则在Chisel转换成Verilog

时,就会把Verilog

文件一起复制到目标文件夹。复

制Verilog

件12复

制Verilog

件2.2实例class

Dut

extends

BlackBox

with

HasBlackBoxResource{

val

io=I0(

new

Bundle{val

a

=Input(UInt(32.W))val

clk=Input(Clock())val

reset=Input(Bool()val

b=Output(UInt(

4.W))addResource("/dut.v")/注意路径写成"./dut.v"是不对的。方法的入参是Verilog文件的相对地址,即相对src/main/resources的地址132.3复制方式二>chisel3.util包里还有一个特质HasBlackBoxPath如果在黑盒类里混入这个特质,并且在任意文件夹里有对应的Verilog

源文件,那么在Chisel转换

成Verilog

时,就会把Verilog

文件一起复制到目标文件

。复

制Verilog

件142.4实例class

Dut

extendsBlackBox

with

HasBlackBoxPath{

val

io

=I0(

new

Bundle{val

a=Input(UInt(

32.W))val

clk=Input(Clock())val

reset=Input(Bool()val

b=

Output(UInt(4.W))addPathí

"./src/main/scala/dut.v")此时的路径是相对于chisel-template这个工程文件夹的路径,我们需要提供相对路径或者全路径。复

制Verilog

件15三、内联Verilog文件正安文是大XPANIIAOT

UNIVERSITY16目标文件夹里就会生成一个单独的Verilog文件,复制

内嵌的代码。该方法适合小型Verilog

设计!chisel3.util

包里有一个特质HasBlackBoxInline调用特质里的方法:setlnline

(blackBoxName:String,

blackBoxlnline:String)内

联Verilog

件3.1内联Verilog文件17内

联Verilog

件class

Dut

extends

BlackBox

with

HasBlackBoxInline{val

io=IO(

new

Bundle{val

a

=Input(UInt(

32.W))val

clk

=Input(Clock())val

reset

=Input(Bool())val

b

=Output(UInt(

4.W))setInline(

"dut.v"

,|module

dut(input

[31:0]a,input

clk,input

reset,output

[3:0]b);assign

b=b_temp;lendmodule""

.stripMargin)实

:字符串中的“|”

表示文件的边界四、inout端口正安文是大XPANIIAOT

UNIVERSITY19>Chisel

目前只支持在黑盒中引入Verilog的inout端口。Bundle中使用

“Analog

(位宽)”声明Analog

类型的端口编译Verilog

的inout

端口NOTE:

要用

“chisel3.experimental.”

进行导入。inout

口4.1

inout20class

Inout!CextendsBundle{vala=Analog(

16

.W)vaY

b=inpui(Uint(16.W))val

sel=Input(Bool())val

c=Output(UInt(

16.W))}class

InoutPort

extendsBlackBoxwithHasBlackBoxlnline{

val

io=IO(

newInoutIO)setlnline(

"InoutPort.v",|module

InoutPort(inout

[15:0]a,……output

[15:0]c);assign

a

=sel?'bz:b;lendmodule".stripMargin)class

Makelnout

extends

Module{val

io

=I0(

new

InoutIO)val

m=Module(

new

InoutPort)m.io

<>

io}

21实

:只能用于与黑盒连接,不能在Chis

温馨提示

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

最新文档

评论

0/150

提交评论