【问题标题】:How do i get a 100kbps clock for an I2C on Quartus Prime?如何在 Quartus Prime 上为 I2C 获得 100kbps 时钟?
【发布时间】:2022-08-02 21:15:41
【问题描述】:

我正在做一个大学项目,我必须构建一个只有一个从机的 I2C,并且必须传输 5 位数据,4 位用于 0 到 9 范围内的数字和 1 位读取或写,我在这个项目中使用带有 VHDL 的 DE10-LITE,它有一个 50 Mhz 默认时钟,我正在查看 quartus prime 内部的“ALTPLL”,但我找不到设置我的选项时钟到 100kbps,我确实在一些论坛中发现“在 LVDS 模式下设置 PLL”启用了该功能,但由于某种原因,quartus 不允许我激活它。我的 SDA 为 100kbps,SCL 为 50mhz。

  • FPGA代码为10M50DAF484C7G
  • 请参阅I2C Specification。时钟不是连续的,可以是状态机的输出。
  • 这个时钟很慢,所以你不需要使用 PLL 来生成它。如果您的 FPGA 时钟是 100 kHz 的倍数,那么您可以使用简单的时钟分频器逻辑轻松生成 I2C 时钟。

标签: vhdl hardware fpga intel-fpga


【解决方案1】:

正如其他人所说:您不需要PLL。如果您已经有一个 50MHz 的默认时钟,那么您只需使用计数器将其除以 500,然后您就有了 100kHz 时钟。

无论如何,您只想在总线上有请求时才启动计数器。所以 user16145658 是正确的:生成的时钟应该是你的状态机的输出。

【讨论】:

    【解决方案2】:

    您不需要更改 FPGA 的时钟,因为您使用的是 FPGA,您只需要实现一个 i2c 内核即可与 i2c 设备通信。

    而i2c规范规定了i2c的速率

    标准模式 (Sm) 100 kbit/s
    快速模式 (Fm) 400 kbit/s

    【讨论】:

    • 这不能回答问题(如何生成时钟)。
    • 通常i2c内核会提供时钟和总线逻辑,比如FPGA时钟的分频,这些都是在i2c内核中实现的,具体我记不太清了。而且i2c内核很常见,类似于调用c++库函数,如果你想了解详情,可以下载查看i2c核心的实现
    • 我的问题是关于代码本身,我理解这个概念,但我对我应该如何以这种速率传输数据感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2016-11-24
    • 2010-12-19
    相关资源
    最近更新 更多