首页 > 其他分享 >SpinalHDL之IO口

SpinalHDL之IO口

时间:2024-07-27 19:28:25浏览次数:14  
标签:IO TriState read SpinalHDL val dataBus io

本文作为SpinalHDL学习笔记第二十五篇,介绍SpinalHDL IO口相关API。

SpinalHDL学习笔记总纲链接如下:

SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客

 

目录:

1.可读开漏 IO(ReadableOpenDrain)

2.三态

1.可读开漏 IO(ReadableOpenDrain)

ReadableOpenDrain 线束定义如下:

case class ReadableOpenDrain[T<: Data](dataType : HardType[T]) extends Bundle with␣
,→IMasterSlave {
val write,read : T = dataType()
override def asMaster(): Unit = {
out(write)
in(read)
}
}

然后,作为主端,可以使用 read 信号读取外部值,并使用 write 设置您想要在输出上驱动的值。

这是一个用法示例:

val io = new Bundle {
val dataBus = master(ReadableOpenDrain(Bits(32 bits)))
}
io.dataBus.write := 0x12345678
when(io.dataBus.read === 42) {
}

2.三态

在许多情况下,三态信号难以处理:

• 它们不是真正的数字性

• 除了 IO 之外,它们不用于数字设计

• 三态概念并不自然地适合 SpinalHDL 内部图。

SpinalHDL 为三态信号提供两种不同的抽象。 TriState 线束和模拟信号和输入输出 信号。两者有不同的目的:

• TriState 应用于大多数目的,尤其是在设计中。该束包含一个附加信号来传递当前的方向。

• Analog 和 inout 应用于设备边界上的驱动以及其他一些特殊情况。

如上所述,推荐的方法是在设计中使用 TriState 。然后,在顶层, TriState 线束被赋值给模拟输入输出,以使综合工具推断出正确的 I/O 驱动。这可以通过输入/出包装器 自动完成,或者根据需要手动完成。

三态

TriState 线束定义如下:

case class TriState[T <: Data](dataType : HardType[T]) extends Bundle with IMasterSlave {
val read,write : T = dataType()
val writeEnable = Bool()
override def asMaster(): Unit = {
out(write,writeEnable)
in(read)
}
}

主端可以使用 read 信号读取外部值,使用 writeEnable 启用输出,最后使用 write 设置输出驱动的值。

这是一个使用示例:

val io = new Bundle {
val dataBus = master(TriState(Bits(32 bits)))
}
io.dataBus.writeEnable := True
io.dataBus.write := 0x12345678
when(io.dataBus.read === 42) {
}

三态阵列

在某些情况下,需要控制每个单独引脚的输出使能(像 GPIO 一样)。在这种情况下,您可以使TriStateArray 线束。

它的定义如下:

case class TriStateArray(width : BitCount) extends Bundle with IMasterSlave {
val read,write,writeEnable = Bits(width)
override def asMaster(): Unit = {
out(write,writeEnable)
in(read)
}
}

它与 TriState 线束相同,不同的是 writeEnable 是一个位 (Bits) 来控制每个输出缓冲区。

这是一个用法示例:

val io = new Bundle {
val dataBus = master(TriStateArray(32 bits)
}
io.dataBus.writeEnable := 0x87654321
io.dataBus.write := 0x12345678
when(io.dataBus.read === 42) {
}

标签:IO,TriState,read,SpinalHDL,val,dataBus,io
From: https://blog.csdn.net/m0_59092412/article/details/140722632

相关文章

  • Composio
    文章目录一、关于Composio为什么是Composo?......
  • Visual Studio版本号、MSVC版本、工具集版本号
    IDE              发布时间   工具集版本   MSC_VER      MSVC++          系统支持       使用频率VisualC++6.0       1998       V60       1200......
  • Windows系统更新R版本及Rstudio
    由于一些包对R的版本的要求比较高,所以有时候我们不得不更新R的版本。但是呢,更新了R版本后,另外有些包的版本又不兼容,唉,更新R包的版本又很费时,所以一般能不更新就不更新吧。下面介绍一下常见的更新R的方法吧。一、更新R版本(1)在RGui或Rstudio中使用以下代码(推荐RGui) #install......
  • 文件编码检测-Python解决UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x
    #检测数据编码格式importchardetwithopen('附件1.csv','rb')asf:result=chardet.detect(f.read())#读取一定量的数据进行编码检测print(result['encoding'])#打印检测到的编码在读取文件时会遇到各种问题,UnicodeDecodeError:'utf-8'codeccan'tde......
  • protobuf 25.4编译以及visual studio项目配置
    title:protobuf编译配置date:2024-07-2716:00:00categories:other工具安装tags:MSProtobuf下载官方下载地址https://github.com/protocolbuffers/protobuf/releases版本没必要最新,注意自22.0版本开始,有重大改变,CMakelist移至根目录而不是cmake文件夹,......
  • STM32的IO复用详解
    前言最近在STM32的IO复用上面吃了一个亏,所以把问题记录下来并且将IO复用的原理再深刻理解一下。起因就是自己做的项目需要用一个SPI读取数据的功能,我是用的STM32F429的HAL库,所以就将SPI的例子复制过来,之前SPI读的是开发板上面的spiflash,用的是SPI5,我自己的项目用的是SPI3,所以......
  • 1251 - Client does not support authentication protocol requested by server; cons
    错误记录:1251-Clientdoesnotsupportauthenticationprotocolrequestedbyserver;considerupgradingMySQLclient错误原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。解决方案:解决:①升级navicat驱动;②......
  • std::optional
    mutable在C++中,mutable关键字的主要作用是允许类的成员变量在常量成员函数中被修改。常量成员函数是用const关键字修饰的成员函数,通常不允许修改类的成员变量。然而,有时我们希望在这些常量成员函数中修改某些特定的成员变量,比如缓存、调试信息等。为了实现这一需求,可以使用mu......
  • ClearCLIP: Decomposing CLIP Representations for Dense Vision-Language Inference
    Motivation&Abs文章关注的任务为用VLM(如CLIP)做开放词汇分割,motivation主要来自于作者的一个观察:分割图中的噪声主要来自于残差连接,这会导致在文本-图像预训练更加强调全局特征,从而牺牲了局部判别能力,从而导致了分割结果中的噪声。为此作者提出了ClearCLIP,对CLIP的特征进行解耦,......
  • 运行 Github Action 测试 Docker 镜像时退出代码 137
    我正在学习Testdriven.io:使用FastAPI和Docker进行测试驱动开发课程,目前正在学习持续集成部分。在本节中,您将使用github操作来构建docker映像并运行测试和linting等。在流程的测试Docker映像步骤中,当尝试进行pytest时,我收到以下错误:错误:进程已完成并退出代码......