【问题标题】:How to get a faster clock in verilog on a Lattice iCEstick?如何在 Lattice iCEstick 上获得更快的 verilog 时钟?
【发布时间】:2020-05-16 19:16:37
【问题描述】:

棒上有一个 12MHz 的振荡器。 http://www.latticesemi.com/icestick

我已经设法编写了 verilog 代码来将此时钟分频,并且闪光灯 LED 的频率为 1Hz。 (我刚开始学习verilog。)

我相信这款 FPGA 可以在高达 133MHz 的频率下工作。

有没有办法从 12MHz 振荡器生成更快的时钟信号(verilog)?

【问题讨论】:

  • FPGA上有DCM吗?
  • 我发现有一个锁相环...
  • 优秀..应该很容易使用..

标签: verilog fpga


【解决方案1】:

答案尚未测试。

通过https://www.reddit.com/r/yosys/comments/3yrq6d/are_plls_supported_on_the_icestick_hw/

发件人:https://github.com/SubProto/icestick-vga-test/blob/master/vga.v

wire clk;

  SB_PLL40_CORE #(.FEEDBACK_PATH("SIMPLE"),
                  .PLLOUT_SELECT("GENCLK"),
                  .DIVR(4'b0001),
                  .DIVF(7'b1000010),
                  .DIVQ(3'b100),
                  .FILTER_RANGE(3'b001),
                 ) uut (
                         .REFERENCECLK(pclk),
                         .PLLOUTCORE(clk),
                         .LOCK(D5),
                         .RESETB(1'b1),
                         .BYPASS(1'b0)
);

还有:

iCE40 系统时钟 PLL 该 iCE40 锁相环 (PLL) 提供各种用户可合成的时钟频率,以及客户 tom 相位延迟。 iCE40 器件中的 PLL 可以在软件宏的帮助下配置和使用,或者 PLL 模块发生器。 PLL Module Generator 实用程序可帮助用户快速配置所需的设置 在 GUI 的帮助下生成配置 PLL 宏的 Verilog 代码。图 2 显示了 iCE40 系统 CLOCK PLL 框图。

http://www.latticesemi.com/~/media/LatticeSemi/Documents/ApplicationNotes/IK/iCE40sysCLOCKPLLDesignandUsageGuide.pdf?document_id=47778

【讨论】:

  • FILTER_RANGE 实际上是做什么的?如果我不设置它,或者如果我将它设置为0,它就无法正常工作。
【解决方案2】:

我使用了更高的时钟频率,在使用 TinyFPGA BX 的 VGA 显示器上显示乒乓球比赛。 TinyFPGA BX 和 Lattice iCEstick 非常相似。因此,我想分享我的代码。您可能需要使用官方 Lattice 软件来进行更简单的 GUI(图形用户界面)配置。 https://www.latticesemi.com/software

module top(
input wire clk_16,
output USBPU
);

assign USBPU = 0; // drive USB pull-up resistor to '0' to disable USB 
output wire;
SB_PLL40_CORE #(
                .FEEDBACK_PATH("SIMPLE"),
                .DIVR(4'b0000),         // DIVR =  0
                .DIVF(7'b0110001),      // DIVF = 49
                .DIVQ(3'b101),          // DIVQ =  5
                .FILTER_RANGE(3'b001)   // FILTER_RANGE = 1
        ) uut (
                .LOCK(locked),
                .RESETB(1'b1),
                .BYPASS(1'b0),
                .REFERENCECLK(clk_16),  // clk_16_MHz is the original clock
                .PLLOUTCORE(clk)        // clk is the modified clock with higher frequency
                );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2019-06-16
    • 2010-12-19
    • 2023-04-10
    相关资源
    最近更新 更多