risc-v中文社区

 找回密码
 立即注册
查看: 2525|回复: 0

[原创] verilog中的inout与chisel3中的Analog

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-11 22:29:05 | 显示全部楼层 |阅读模式
import chisel3._
import chisel3.experimental._
import chisel3.util.HasBlackBoxInline

//chisel3中基本上各种Module的时钟和复位信号都是默认的
// (
//   abstract class MultiIOModule extends RawModule 中 final val clock:Clock= {...}
//   而 abstract class Module extends RawModule 中 final val clock:Clock = IO(Input(Clock()).suggestName("clock")
//   final val reset:Reset = IO(Input(mkReset)).suggestName("reset"))
// )
//但RawModule则是需要用户指定时钟和复位信号(从上面节选出来的代码可以知道RawModule中无clock和reset,RawModule的子类才有),
//如果RawModule不指定时钟和复位信号,则可以用于组合逻辑:
// class MyAndModule extends RawModule {
//  val io = IO(new Bundle {
//  val a = Input(UInt(8.W))
//  val b = Input(UInt(8.W))
//  val c = Output(UInt(8.W)) })
//  io.c = io.a & io.b
//  }
//verilog中多时钟域设计时,比如异步FIFO,可以带有多个时钟信号,很容易理解
//在chisel3中则相对来说要复杂些,因为这与scala中变量作用域有关系,同时,时序元件都是隐式跟随当前时钟域
//在verilog中有inout端口,在chisel3中与inout相对应的是Analog
//Analog的apply带一个Width参数
//一个Module中的IO端口可以为Input,可以为Output,也可以为Analog,
//Analog端口只能用于与BlackBox(是BaseModule的子类)连接,当然,为了加载verlog的模块代码,可以混入
//trait HasBlackBoxInline,可以加入黑盒中的verilog代码,并且还可以取一个名字
class InOutIO extends Bundle {
  val a = Analog(32.W)
  val b = Input(UInt(32.W))
  val sel = Input(Bool())
  val c = Output(UInt(32.W))
}
class InOutPort extends BlackBox with HasBlackBoxInline{
  val io = IO(new InOutIO)
  setInline("InoutPort.v",
    """
      module InoutPort(
       inout [31:0] a,
       input [31:0] b,
       input sel,
       output [31:0] c);
       assign a = sel ? 'bz : b;
       assign c = sel ? a : 'bz;
      endmodule
    """.stripMargin)
}
class MakeInout extends Module {
  val io = IO(new InOutIO)
  val mInOutPort = Module(new InOutPort)
  mInOutPort.io <> io //Data中的final def <> 单向连接 宽度,数量都要一致
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-27 17:12 , Processed in 0.014845 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表