1.入门Chisel心得与笔记:模块与端口操作

本文介绍了Chisel,一种敏捷型硬件描述语言,它比Verilog更高效,提供了更高级的语法结构。文章从Chisel语言概述、学习资料入手,重点讲解了端口声明、模块连接,包括Switch结构、批量连接端口的使用,并展示了如何在Module中使用函数简化端口操作。
摘要由CSDN通过智能技术生成

Chisel语言概述

Chisel 是一门敏捷型的硬件描述语言,在近些年越来越火,网络上的学习资源也较为丰富。最近由于项目需求,需要入门Chisel,同时在CSDN记录自己的心得。

敏捷型开发语言

何为敏捷型开发语言呢?换言之可以提升效率的语言。Chisel可以认为是为了提高Verilog这一传统硬件描述语言而设计开发的,最早诞生于伯克利的一个实验室,并且接受了流片的检验,在企业界包括华为海思在内的公司都开始使用这一语言来进行开发,学术界中科院的包云岗教授团队已经在“一人一芯”计划中使用Chisel来开发,并设计了一套验证评估工具,用来开发,据报道15万行得的Verilog语句,只需要大概3万行Chisel语言句即可实现。据笔者了解,Chisel语言可以用更高级的语法结构来生成Veilog代码,相当于是比Verilog高一个层次的代码,但是控制的粒度相对于HLS(高层次综合语言)来说又要更细化一些,因此生成的中间代码具有更好的可读性,硬件资源的控制更好一些。

即控制粒度:
HLS>Chisel>Verilog

目前学术界十分关注这一语言,相信未来这一语言将会获得更大的关注度。

学习资料以及链接

1.官方文档Chisel_Book.pdf(英文版),博客的主要依据
2.官方文档Chisel_Book.pdf(中文版)
3.一个学习资源总结

端口及模块连接

入门介绍的坑后面来补,今天先直接开始上手模块,端口声明的例子如下

端口声明

使用Chisel声明如图所示的模块
使用下面代码声明如下模块,按照自底向上的层次实现封装;

class CompA extends Module {
   
	val io = IO(new Bundle {
   //每一个Module都需要含有IO()用于定义端口,
	                        //IO可以使用 new Bundle()初始化
	val a = Input(UInt (8.W))//Bundle可以理解为一个逻辑约束,其中可以用Input与Output来
	                         //说明是输入或是输出
	val b = Input(UInt (8.W))
	val x = Output(UInt (8.W))
	val y = Output(UInt (8.W))
	})
// function of A
}
class CompB extends Module {
   
	val io = IO(new Bundle {
   
	val in1 = Input(UInt (8.W))
	val in2 = Input(UInt (8.W))
	val out = Output(UInt (8.W))
	})
// function of B
}
class CompC extends Module {
   
	val io = IO(new Bundle {
   
	val in_a = Input(UInt (8.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值