博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Chisel3 - Tutorial - Functionality
阅读量:6267 次
发布时间:2019-06-22

本文共 1086 字,大约阅读时间需要 3 分钟。

 
演示使用函数进行代码复用的方法。
 
参考链接:
https://github.com/ucb-bar/chisel-tutorial/blob/release/src/main/scala/examples/.scala
 
1. 引入Chisel3
 
 
2. 继承自Module类
 
 
3. 定义输入输出接口
 
创建各项输入输出接口。
 
这些接口都是无符号整型数:val x = Input(UInt(16.W))
a. 使用16.W表示位宽为16位;
b. 使用UInt创建无符号整型数;
c. 使用Input/Output表示接口方向;
d. val 关键字表明定义的变量是所属匿名Bundle子类的数据成员;
 
4. 内部连接
 
 
这里使用了函数来定义一个可以复用的逻辑。
 
1) def关键字定义一个函数名为clb
函数签名为:
def clb(a: UInt, b: UInt, c: UInt, d: UInt)
接收四个参数,返回值从函数定义中推断。
 
函数实现为:
(a & b) | (~c & d)
可以推断出返回值类型为UInt。
 
2) io.z直接连接到clb函数的返回值:
io.z := clb(io.x, io.y, io.x, io.y)
 
5. 生成Verilog
 
 
可以直接点运行符号运行。
 
也可以使用sbt shell执行:
 
生成Verilog如下:
 
6. 测试
 
 
 
7. 附录
 
Functionality.scala:
import chisel3._ class Functionality extends Module {val io = IO(new Bundle {val x = Input(UInt(16.W))val y = Input(UInt(16.W))val z = Output(UInt(16.W))})def clb(a: UInt, b: UInt, c: UInt, d: UInt) =(a & b) | (~c & d)io.z := clb(io.x, io.y, io.x, io.y)} object FunctionalityMain {def main(args: Array[String]): Unit = {chisel3.Driver.execute(Array("--target-dir", "generated/Functionality"), () => new Functionality)}}

 

 

转载于:https://www.cnblogs.com/wjcdx/p/10093512.html

你可能感兴趣的文章
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>
MaxCompute 学习计划(一)
查看>>
OEA 中 WPF 树型表格虚拟化设计方案
查看>>
Android程序开发初级教程(一) 开始 Hello Android
查看>>