首页 > 其他分享 >Lattice ICE40LP8K开发

Lattice ICE40LP8K开发

时间:2024-10-31 11:30:37浏览次数:1  
标签:clk CLKHF Lattice 开发 b1 ICE40LP8K SB PLL 时钟

一、开发工具:

ICEcube2,界面非常原始,只有PLL IP核添加功能,其他IP核貌似只能使用primitive替换。

不支持时序分析、在线仿真等功能。

二、原语使用

  1. 全局布线资源

在 iCE40 FPGA 设备中,有 8 个高驱动缓冲器,称为全局缓冲器(Global Buffers,GBUFx),它们连接到 8 条低偏斜(low-skew)的全局线。全局缓冲器和全局线的主要设计目的是用于时钟分布,但也适用于其他高扇出信号,如复位(set/reset)和使能(enable)信号。

使用:

module top (
    input wire clk_in,    // 输入时钟信号
    output wire clk_out   // 输出经过全局缓冲器的时钟
);

    wire clk_gbuf;

    // 实例化全局缓冲器,将输入时钟连接到 GBUF0
    SB_GB gbuf_inst (
        .USER_SIGNAL_TO_GLOBAL_BUFFER(clk_in),  // 用户时钟信号输入
        .GLOBAL_BUFFER_OUTPUT(clk_gbuf)        // 全局缓冲器输出信号
    );

    assign clk_out = clk_gbuf;

endmodule
  1. 高速内部晶振原语

与ICE40UP系列不一样!ICE40LP8K内部没有高速晶振,只能从外部输入

ICE40UP使用内部高速晶振primitives:

//************ intern HSOSC SETTING*************************
 //   Name           Values          Description
    //  CLKHF_DIV   "0'b00" (default)   0'b00 = 48 MHz
    //              "0'b01"             0'b01 = 24 MHz
    //              "0'b10"             0'b10 = 12 MHz
    //              "0'b11"             0'b11 = 6 MHz
//    HSOSC
//        #(
//            .CLKHF_DIV ("0b00")
//        ) OSCInst0 (
//            .CLKHFEN (1'b1),
//            .CLKHFPU (1'b1),
//            .CLKHF (CLKHF)
//        );
  1. IO原语SB_IO

CS64中使用IOB原语接受PAD信号传递到内部逻辑,ICE40LP系列该原语进行了改动和精简。使用SB_IO 替换

    // 双向 I/O 使用 SB_IO 替代 BB_B
SB_IO  #(
    .PIN_TYPE (6'b101001),
    .PULLUP (1'b1)
)U_IBUF_MISO (
    .PACKAGE_PIN(SPI_MISO),          // Bidirectional pin
    .OUTPUT_ENABLE(s_IOL_D_PADDT),  // Tri-state control
    .D_OUT_0(s_IOL_D_PADDO),         // Output data (synchronized output)
    .D_IN_0()                        // Input data (if needed)
);

  1. ram使用 SB_RAMXX

替换ICE40UP中的ram ip核,(一个开发工具,连ram ip核都不提供....)

SB_RAM256x16 Spike_Threshold_DOWN_ram_16_256 (
    .RDATA(Spike_THR_L),                  // 读取数据输出
    .RADDR(Spike_THR_DOWN_CHANNEL),       // 读取地址
    .RCLK(clk),                           // 读取时钟
    .RCLKE(1'b1),                         // 读取时钟使能
    .RE(Spike_THR_DOWN_RD_EN),            // 读取使能
    .WADDR(spike_thr_shift_count - 1),    // 写入地址
    .WCLK(clk),                           // 写入时钟
    .WCLKE(1'b1),                         // 写入时钟使能
    .WE(ram_wr_en_thr_down),              // 写入使能
    .MASK(16'b0),                         // 写入掩码(不使用掩码)
    .WDATA(wr_spike_thr_L)                // 写入数据
);
  1. FIFO

将Radiant中生成的FIFO IP核的.v文件拉过来,在ICEcube2中可以直接使用,仿真也通过。(神奇,且无语)

    FIFO_I18D1024 U_TX_BUF(
                      .clk_i            ( SYS_CLK                       ),
                      .rst_i            ( ~sys_nRst | r_FIFO_RST[7]     ),
                      .wr_en_i          ( r_TX_BUF_WEN                  ),
                      .rd_en_i          ( r_TX_BUF_REN                  ),
                      .wr_data_i        ( {2'b0, r_TX_BUF_WDAT[15:0]}   ),
                      .full_o           ( s_TX_BUF_FULL                 ),
                      .empty_o          ( s_TX_BUF_EMPTY                ),
                      .data_cnt_o       ( s_data_cnt                    ),
                      .rd_data_o        ( s_TX_BUF_RDAT[15:0]           )
                  );
  1. PLL

PLL IP核可以在ICEcube中调用,但是实际使用中PLL的PLACE有着限制,即不是所有IO口输入的系统时钟信号都可以(也是很无语)。

手头只有ICE5LP系列(不是ICE40LP系列!),用的内部高速晶振,后面接PLL报错...

E2694: PLL: U_system_clk_nrst_setting.PLL_SYSCLK_inst.PLL_SYSCLK_inst could not be placed E2693: PLL placement is infeasible for the design E2055: Error while doing placement of the design

后面查了下,使用限制如下:(没有提到内部产生的时钟的使用限制)

但是好在关于内部高速晶振的描述:

B_HFOSC primitive generates 48 MHz nominal clock frequency within +/- 10% variation, with user-programmable divider value of 1, 2, 4, and 8. The HFOSC can drive either the global clock network or fabric routes directly based on the clock network selection.

好像可以直接作为系统时钟使用,因此,把HFSOC后面接个SB_GB就作为系统时钟了。

SB_HFOSC OSCInst0 (
.CLKHFEN(1'b1),
.CLKHFPU(1'b1),
.CLKHF(CLKHF)
);
defparam OSCInst0.CLKHF_DIV = "0b00";

//SB_GB inst***********************************   
     SB_GB sys_clk_gbuf_inst (
        .USER_SIGNAL_TO_GLOBAL_BUFFER(CLKHF),  // clk input
        .GLOBAL_BUFFER_OUTPUT(o_sys_clk)        // GBUF OUT
    );

三、Modelsim仿真

需要在modelsim中添加相应的ICE40LP系统的仿真库,

操作如下:

Click “Add Existing Files” and add the following files:

counter_sbt.v, sb_ice_syn.v, sb_ice_lc.v, counter_tb.vhd for Verilog post-route timing simulation

The sb_ice_syn.v, sb_ice_lc.v verilog files can be found in $INST_DIR/verilog.

If your design contains PLL, add ABIPTBS8.v in $INST_DIR/verilog.

If the design contains Hardened IP primitives, add the encrypted simulation library

sb_ice_ipenc_modelsim.v available in $INST_DIR/Verilog

添加后就可以在Modelsim中进行仿真了。

标签:clk,CLKHF,Lattice,开发,b1,ICE40LP8K,SB,PLL,时钟
From: https://www.cnblogs.com/dy-stairmed/p/18517380

相关文章

  • 推荐5个开发人员最常用的高级爬虫软件
    爬虫,又称为网络爬虫或网页爬虫,是一种自动浏览互联网的程序,它按照一定的算法顺序访问网页,并从中提取有用信息。爬虫软件通常由以下几部分组成:- 用户代理(User-Agent):模拟浏览器访问,避免被网站识别为机器人。- 请求处理:发送HTTP请求,获取网页内容。- 内容解析:使用正则表达式或......
  • 鸿蒙IME Kit高级开发:共享沙箱机制与输入法数据传输
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS的IMEKit不仅提供了基础......
  • 鸿蒙IME Kit高级开发:共享沙箱机制与输入法数据传输
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS的IMEKit不仅提供......
  • fast-poster 海报生成器,一分钟完成海报开发.
    一.项目介绍        FastPoster是一个专为快速开发海报而设计的工具,它允许开发者只需上传背景图并在指定位置放置文本、图片、二维码或头像等组件就能生成海报。该项目提供了一键生成各种语言SDK调用代码的功能,简化了海报制作流程。经过多年的生产环境测试,FastPo......
  • flutter开发适配鸿蒙之开发环境搭建
    第一:环境搭建1.安装DevEcoStudioNEXTIDE,注意版本应该是Next,当前最新的是Beta3.下载之前需要先登录,后面的模拟器创建还要开发者验证、审核啥的,好在审核进度还可以,我这边提交申请后差不多两个小时审核通过.找到自己电脑系统匹配的版本下载,我的电脑是Window的就选择......
  • Flutter开发鸿蒙,终端一体化
    一.Flutter开发鸿蒙,终端一体化1.flutter鸿蒙一体化介绍Flutter作为一个跨平台的UI框架,其主要目的是让开发者能够用一套代码库来构建iOS、Android以及其他平台(如Web、Windows、macOS等)的应用程序。对于HarmonyOS,虽然它本身不是Flutter的目标平台之一,但由于Flutter的灵活......
  • 物品复活软件开发
    BuildinganItemManagementSoftwareUsingPyQt5andSQLiteInthisblog,we'llexplorethecreationofanItemManagementGUIusingPyQt5andSQLite,aligningwiththePSP2.1(PersonalSoftwareProcess)framework.PlanningBeforedivingintodevelop......
  • 一个完整的软件开发流程
    一、开发流程图二、过程产物及要求本表主要列出开发阶段需要输出的过程产物,包括产物名称、成果描述、负责人及备注,即谁、在什么时间、应该提供什么内容、提供内容的基本方向和形式是什么。三、过程说明(一)项目启动1、产品经理和项目干系人确定项目方向,产品型项目......
  • mybatis Mapper代理开发
    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mapper是MyBatis中用于定义SQL语句和映射规则的接口或XML文件。下Mapper接口定义方式:Mapper接口用于定义SQL操作的抽象方法,不需要实现类。注解方式:可以使用注解(如@Select,@Insert,@Upda......
  • NPM 包开发与优化全面指南
    1.理解NPM包的结构1.1package.json文件:包的核心1.2理解包的入口点2.深入理解模块格式2.1CommonJS(CJS)2.2ECMAScript模块(ESM)2.3通用模块定义(UMD)3.高级包优化技术3.1TreeShaking和副作用3.2代码分割和动态导入3.3条件......