tag 标签: lattice

相关博文
  • 热度 7
    2023-1-6 10:43
    1904 次阅读|
    0 个评论
    Lattice CrossLink-Nx LIFCL-40应用连载8:MIPI DSI接口驱动LCD显示器
    作者:Hello,Panda 一、 案例需求 使用 LIFCL-40 FPGA 的 MIPI DSI 硬核接口驱动 7 寸 LCD 显示器: (1) 显示器: 7 寸, 1024*600 横屏, 60Hz ; (2) MIPI 物理层: 4-Lane , 600Mbps/lane (最大可支持 3840*2160 分辨率 30Hz , 1920*1200 分辨率 120Hz ,最大支持 2.5Gbps/lane 速率); (3) DSI :支持突发模式, 24-bpp RGB 数据; (4) 代码:全手写,不使用 Lattice 官方 IP 核。 二、 硬件电路 采用 LIFCL-40 基础视觉开发平台,由 FPGA 产生本地测试图像,接口电路见下图 1 所示。 图 1 MIPI DSI LCD 驱动接口 如上图所示, MIPI DSI 数据通道为 4-lane MIPI D-PHY , LCD_RST_3V3 为 LCD 复位信号,低电平复位; LCD_PWM_3V3 为背光驱动信号, 10~20KHz PWM 信号。 三、 软件设计 软件使用 Radiant3.2 开发,软件的整体结构如下图 2 所示。 图 2 驱动 LCD 软件结构 (1) 片上晶振产生 50MHz 时钟给 MIPI D-PHY 物理层内部的 PLL 产生 300MHz 的源同步时钟和 75MHz 的字节时钟; (2) 核心板外部 50MHz 产生 65MHz 视频时钟,用于产生 1024*600 60Hz 的视频时序和产生测试数据; (3) 产生的数据经 FIFO 后给 u_dsi_nocil_4lane_inst 模块发送到 MIPI 物理层模块 u_mipi_dsi_phy_inst 进行串行化发出; (4) DSI 模块 u_dsi_nocil_4lane_inst 用于产生符合 MIPI D-PHY 物理层规范的长短包发送时序。 在开机后,延时 200ms 以上等待 LCD 显示屏初始化完毕后再发送 Turn On Peripheral Command 和 Color Mode Off Command 短包命令打开设备并进入正常显示模式。 MIPI DSI 数据发送模式选择为 Burst Mode ,如下图 3 所示。一帧发送一个 VSS (帧起始)短帧,其他行发送 HSS (行)起始短包,显示数据区域( VACT )行发送实际的 RGB-24bpp 打包的像素长包数据,其他区域 VSA 、 VBP 、 VFP 区域发送 Blanking 数据。 图 3 Burst 模式时序图 整个工程的代码结构见下图 4 所示: 图 4 工程代码结构 四、 显示效果 如下图所示,将显示器的软排线连接到板子的 J7 连接器,将 bit 文件烧入 flash ,重新上电显示效果见下图 5: 图 5 显示效果图
  • 热度 11
    2021-12-21 01:00
    4571 次阅读|
    0 个评论
    lattice CrosslinkNx LIFCL-40应用连载5-如何使用MIPI D-PHY硬核IP?
    作者:Hello,Panda 1.目标 配置CMOS Sensor OV9734,并通过MIPI DPHY硬核接收数据。 (1)使用一个RISC-V软核,实通过AHB总线访问I2C FIFO,通过I2C总线配置OV9734 Sensor; (2)使用MIPI DPHY硬核接收图像数据,并实现CSI层恢复成为图像像素。 (3)OV9734配置为连续时钟模式,单Lane,数据率360Mbps,1280*720P,30fps。 2.软件设计 本例涉及到使用RISC-V软核,MIPI DPHY硬核,I2C FIFO和MIPI CSI解析层等。软件架构如下图1所示。 图1 FPGA软件总体框图 2.1 RISC-V软核 软核在propel Builder开发环境中进行例化和配置,如下图2所示,例化了RISC-V软核、本地32KB运行RAM、Ahb2Apb桥、Apb interconnect、GPIO和UART等基础IP,另外自定义一个Apb export IP用于给引出到外部的APB总线分配地址。 图2 RISC-V软核配置 2.2 MIPI DPHY硬核 Crosslink-NX器件有两个2.5Gbps lane速率的MIPI D-PHY硬核。使用硬核IP MIPI_DPHY(V1.3.0)模组进行例化(注:在Radiant中,不同版本的IP端口相差很大),例化参数如下图3。 图3 例化参数 在本例中,结合OV9734的配置,接口时钟为180MHz,Lane(bus width)数为1,时钟模式为continuous,Gearing Ratio为1:8,模式为包括控制模块CIL。 MIPI硬核在使用前需通过lmmi总线对其内部寄存器进行配置,配置寄存器空间见下图4,详细的寄存器描述请参考官方数据手册,lattice文档编号为:FPGA-IPUG-02061-1.5。 图4 寄存器地址空间 针对本例的D-PHY接口参数,配置值见下图5(请特别注意,虽然在IP生成器里面进行了参数例化,还必须通过lmmi总线向寄存器控制配置正确的值硬核才可正常工作)。 图5 本例寄存器空间配置值 按照之前相关连载文章的示例,编译和在线下载bit文件,运行Lattice Propel下的RISC-V软核C代码配置好OV9734,系统即可正常采集到MIPI输出的图像数据,如下图6所示。 图6 在线调试抓取到的D-PHY硬核输出数据 2.3 CSI层 Lattice Radiant开发环境中提供了官方IP,CSI-2/DSI D-PHY Receiver这个IP,内容很全面,但是需要购买付费授权,以熊猫君羞涩的口袋,自然是购买不起,咱只能自己手撸一个针对本例的CSI解析代码,说实在的,做一个能稳定针对特定格式的代码,解析帧头,做一个帧头效验和数据效验,并将其转化为stream格式输出,不难,一会儿就做好了。下图7是在线调试抓取到的CSI-2解析后的数据。 图7 在线调试抓取到的CSI-2层解析后的数据 2.4 Video Bridge 该模块将来自CSI层数据按照DT指定的格式拼接并生成标准的视频时序。后端即可接入通用的ISP处理模块进行进一步的算法运算处理。下图8是接收OV9734的MIPI数据后直接显示的RAW照片。 图8 显示RAW照片 3.结语 因Crosslink-NX集成了2.5Gbps Lane速率的MIPI硬核,因此开发变得像通用处理器一样简单,只要认真阅读手册,很快就能上手出图。另外,针对特定DT格式的CSI层的协议解析也很容易,可以不依赖官方的付费IP,对熟悉的同学们而言,几乎就是一日之功而已。最后,欢迎搭建加入QQ讨论群或关注“ZYNQ分享客”微信公众号,共同讨论进步!
  • 热度 5
    2021-1-15 11:47
    3865 次阅读|
    1 个评论
    Lattice CrossLinkNx LIFCL-40应用连载2-使用Reveal Inserter逻辑分析工具
    作者:Hello,Panda 3. 使用在线调试器( ILA ) Lattice 系列工具使用在线调试器的方法比 Xilinx 要复杂,和 Altera 的类似,但还是要稍微复杂一些。本例在上一个产生 50Hz 方波的工程基础上进行说明。 3.1 添加 Logic Analyzer 核 首先,需要将工程布局布线通过生成网表。 Step1 :点击 Reveal Inserter 按钮或点击快捷按钮,选择 Add Logic Analyzer 。 图 1 选择逻辑分析仪 Step2 :添加采样时钟、采样深度、待观测信号等。如下图所示,将左边的时钟信号拖到 sample clock 位置,将需要观测的信号拖到 Trace 下的空白处。配置采样深度为 1024 和实现的资源为 EBR 。 图 2 配置 Trace Signal Step3 :配置触发信号、触发条件等 如下图所示,将触发信号添加到 Tigger Unit 单元下并设置触发条件,然后进行“规则检查”,规则检查无误后点击“添加到工程”按钮并保持工程。 图 3 配置触发信号、触发条件等界面 Step3 :生成新的 bit 文件。 Step4 :将新生成的 bit 文件下载到 FPGA 。 1.2 在线调试 将包含 Logic Analyzer 的 bit 文件下载到 FPGA 以后,选择 Reveal Analyzer/Controller 或者点击快捷按钮,按下图红框处所列找到 USB Port 和 Debug Device ,点击 OK 确认。 图 4 启用 Analyzer/Controller 如下图所示,点击运行按钮,点击“ run ”运行按钮,等待触发完成即可看到如图所示的波形,可以根据自己的需要鼠标右击波形根据选项调整波形的显示格式属性。 图 5 触发显示波形 欢迎大家扫描下面的二维码加入QQ讨论群或微信公众号共同讨论,共同进步。
  • 热度 3
    2021-1-15 11:26
    3727 次阅读|
    1 个评论
    Lattice CrossLinkNx LIFCL-40应用连载1:新建一个工程
    作者:Hello,Panda 1 1.目的 本入门分享一共三篇,目的是为了帮助新手利用 Lattice Radiant Software 创建第一个新工程、使用在线调试器和使用 RSIC-V 软核。基本的软硬件配置如下: (1) 软件开发平台: Lattice Radiant Software 2.0.1.281.2 和 Lattice Propel1.1 。 (2) 评估板: CrossLinkNx Base (编号 YSPL0010A ,公司自制) (3) 器件 : LIFC-40-7MG121C ( ES 器件) (4) 调试器: Lattice HW-USBN-2B 2 创建第一个工程 本章介绍如何创建第一个 CrosslinkNX 工程。 2.1 创建新工程 目标:创建一个新工程,使用内部的 osc 产生 50MHz 的时钟作为系统的工作时钟,利用计数器产生 50Hz 的方波,生成 bit 文件并将 bit 文件烧写到 SPI Flash 中。 Step1 :打开 Radiant 软件,选择 Project 。 图 1 创建新工程界面 Step2 :选择工程路径和工程名,这里命名为 wave_50hz 。 图 2 选择新工程路径和命名 Step3: 一路下一步,根据自己用的芯片选择器件,我的板子上是 LIFCL-40-7M121C ,如下图 图 3 选择器件 Step4 :一路下一步,直到工程创建完毕。 2.2 添加和编译文件 一个完整的工程,至少具备顶层文件、约束文件和若干 IP ,本例生成一个简单的 50Hz 方波,因此需要一个 OSC IP 来产生时钟、一个约束文件来指定 IO 、一个顶层 vhd 文件。 2.2.1 生成 OSC IP Lattice CrossLink NX FPGA 内部有一个 450MHz 时钟单元,通过 IP 来例化调用。 Step1 :选择 IP Catalog ,双击 OSC IP 核,并将之命名为 sys_osc 。 图 4 生成 OSC IP Step2 :选择 Next ,配置 HFCLK Divider 参数为 9 ,点击 Generate 。 图 5 配置 OSC IP 2.2.2 编写顶层文件 Step1 :在 File List 下,选择 New File 建立一个新文件,选择类型为 Verilog Files ,命名为 wave­_50hz_top, 点击 new 完成创建。 图 6 创建 HDL 文件 图 7 选择新创建文件属性 Step2 :编写文件 为形成良好的编码习惯,一个 verilog 文件里面需要包含注释、仿真精度和实体模块等信息,本文件例化之前生成的 sys_osc ,并编写产生方波的文件,示例如下: //------------------------------------------------------------ //File Name: wave_50hz_top // //Project : top moudle of generate 50Hz sqrt wave // //Module : top // //Content : none // //Description : 50MHz clock generate by intel OSC // //Spec. : none // //Author : Hello,Panda //------------------------------------------------------------ //History : //20200804: V1.0 -Initial Creation //------------------------------------------------------------ `timescale 1ns / 1ps module wave_50hz_top( output wire o_wave_50hz //output port ); reg r_chip_cnt = 16'd0 ; reg r_chip_rstn = 1'b0 ; reg r_low_cnt ; reg r_high_cnt ; reg r_wave ; wire w_chip_clk_50m; /***************************************************************/ //part1:osc genrate clock /***************************************************************/ sys_osc u_sys_clk_inst( .hf_out_en_i (1'b1 ) ,.hf_clk_out_o (w_chip_clk_50m ) ); always @ (posedge w_chip_clk_50m) begin r_chip_cnt <= (&r_chip_cnt) ? r_chip_cnt : (r_chip_cnt + 1'b1); r_chip_rstn = 16'd32768) ? 1'b1 : 1'b0; end /***************************************************************/ //part2:generate wave /***************************************************************/ always @ (posedge w_chip_clk_50m) begin if(~r_chip_rstn) begin r_low_cnt <= 10'd0; r_high_cnt <= 10'd0; r_wave <= 1'b0 ; end else begin = 10'd999) begin r_low_cnt <= 10'd0; r_high_cnt = 10'd999) ? 10'd0 : (r_high_cnt + 1'b1); end else begin r_low_cnt <= r_low_cnt + 1'b1; r_high_cnt <= r_high_cnt ; end r_wave = 10'd499) ? 1'b1 : 1'b0; end end assign o_wave_50hz = r_wave; endmodule 备注: 50Hz 频率的周期为 20ms , 50MHz 的周期为 20ns ,即需要计数器计满 1000*1000 个节拍为 20ms 。 Step3 :添加 wave_50hz_top 为顶层文件 右键 inpl_1 选择 Set Top level Unit, 将 wave_50hz_top 指定为顶层文件。 图 8 设置顶层文件 2.2.3 编写约束文件 本例中约束文件包括 IO 、使能 JTAG 和使能 MASTER_SPI_PORT 原语。约束文件既可以先行写好添加,也可以通过综合以后在 Device Constraint Editor 、 Timing Constraint Editor 等图形界面添加,本例选择第一种,约束文件的语法请参考 Lattice 的官方文件,也可在软件 Source Templates 里看到一部分。 Step1 :新建一个 Post-Systhesis 约束文件,命名为 wave_50hz.pdc, 点击 new 。 图 9 创建约束文件 Step2 :编写约束 (1) 指定 IO :指定 IO 引脚号为 G1 ,电平标准 1.8V LVCMOS 和其他属性; (2) 使能 JTAG :使能 JTAG ; (3) 使能 MASTER_SPI_PORT ,并指定其工作时钟频率为 3.5MHz 。 ldc_set_location -site {G1} ldc_set_port -iobuf {IO_TYPE=LVCMOS18H SLEWRATE=SLOW} ldc_set_sysconfig {MASTER_SPI_PORT=SERIAL BOOTMODE=SINGLE CONFIGIO_VOLTAGE_BANK0=1.8 CONFIGIO_VOLTAGE_BANK1=1.8 MCCLK_FREQ=3.5 CONFIG_IOSLEW=FAST} ldc_set_sysconfig {JTAG_PORT=ENABLE} 2.3 布局布线和导出文件 点击 Export Files 按钮,软件可以一键完成综合、布局布线、生成 bit 文件等工作。 2.4 Bit 文件下载 有两种类型,一种是下载到 FPGA 的配置 SRAM ,掉电即丢失,适合调试时使用。一种是烧写到 SPI Flash 进行程序固化,上电加载到 FPGA 运行。 首先,点击 Programer 按钮,进入烧写工具界面。 2.4.1 下载到 FPGA SRAM 如下图所示,双击 Target Memory 或 Operation 下面的复习项弹出配置菜单,根据实际硬件情况选择 JTAG 的类型、选择 Target Memory 为 SRAM 是, File Name 选项指定到 bit 文件所在位置, Port Interface 选择为 JTAG , Acess Mode 选择为 Direct Programing , Operation 为 Fast Configuration 。 图 10 下载到 FPGA SRAM 配置界面 点击绿色的下载按钮,等待下载完成,完成后下方的 output 栏会提示 successful 。 2.4.2 固化到 SPI Flash 将 bit 文件固化到 spi flash ,首先应将其下载到 fpga 的 sram 使能 MASTER_SPI_PORT 使 JTAG2SPI 命令可以正常工作。烧写到 SPI Flash 的文件既可以是 bit 文件,也可以是 mcs 文件,本例选择直接烧写 bit 文件。 如下图所示,选项如下: (1) Target Memory : Extern SPI Flash Memory ; (2) Port Interface : JTAG2SPI ; (3) Operation : Erase , Program , Verify ; (4) Programming File 路径指向 bit 文件所在位置; (5) 选择 SPI Flash 的型号; (6) 根据 bit 文件的大小设置烧写到 Flash 的起始地址。 设置完成后点击绿色的下载按钮,等待下载到 SPI Flash 完成, output 栏会提示进度和完成状态。 图 11 固化到 SPI Flash 配置界面 2.5 功能确认 用示波器测量输出引脚,可以看到频率为 50Hz ,幅度为 1.8V 的方波。 图 12 功能确认 欢迎大家扫描下面的二维码加入QQ讨论群或微信公众号共同讨论,共同进步。
  • 热度 44
    2020-12-22 09:19
    7305 次阅读|
    0 个评论
    Lattice CrossLink NX系列FPGA使用扼要分享
    作者: Hello , Panda 前一阵子因项目需要,积极寻找一款尺寸小,功率低,接口适配,性能中等的 FPGA 芯片用作图像的采集、处理和传输,最终锁定了 Lattice 的下一代 CrossLink 系列器件 CrossLinkNX 。 这个系列的器件有两个子类,分别是 17K 逻辑的 LIFCL-17 和 39K 逻辑的 LIFCL-40 子类。其中 LIFCL-17 封装最小的是 wlcsp72-3.7mm*4.1mm ,最大的是 caBGA256-14mm*14mm ,内部 EBR RAM 容量 432Kb , Large RAM 容量 2560Kb , 1~2 个 2.5Gbps MIPI DPHY 硬核,不支持 PCIe ; LIFCL-40 封装最小的是 QFN72-10mm*10mm ,最大的是 caBGA400-17mm*17mm ,内部 EBR RAM 容量 1512Kb , Large RAM 容量 1024Kb , 1~2 个 2.5Gbps MIPI DPHY 硬核,支持 PCIe 硬核和 DDR 。下图 1 是 CrossLink NX 系列器件的资源截图。 图 1 CrossLink NX 系列器件资源列表 我的应用很简单,采集一路或 2 路 1080P/720P 的 CMOS 成像帧率高点儿的 Sensor 图像进来,接口可以是 MIPI DPHY 或者 LVDS (及兼容的 SubLVDS 或 Hispi ),经过 RAW 图像域处理或者简单 ISP 处理后做一些算法,通过 USB3.0 或千兆以太网输出预览图或者处理结果,这个 FPGA 集成了 SGMII CDR ,可以无需其他外设就实现千兆以太网协议。因为要装在空间受限的位置,所以我考虑的就是小封装的器件,带 PCIe 这种根本就用不上,最终用了 caBGA121-6mm*6mm LIFCL-40 , RAM 、乘法器和逻辑资源、接口刚刚够。因此对这种要体积小,功耗低,性能和接口都需要中等偏上,成本适中的应用来说,是一种较为合适的选择。下图 2 是我的一个原型验证电路(正式产品的体积是 24mm*24mm*35mm ,比这个核心板 22mm*22mm 的尺寸大一点儿)。 图 2(a) 核心板 图 2 ( b )验证载板 总的来说,个人认为 CrossLink NX 系列 FPGA 主要还是面向以下领域: ( 1 )视频桥接:延续上一代 Crosslink 系列器件的特点,升级 MIPI DPHY 硬核到支持 2.5Gbps/Lane 速率,升级真差分 IO 支持 LVDS 电平 1.25Gbps 。在汽车影音系统、多屏或多画面显示需要用到多路 MIPI 拼成 1 路 MIPI 或一路 MIPI 到多路 MIPI 的分发, LVDS 和 MIPI 之间的转换缩放以及挂在一些纯计算类的处理器作为前端接口等应用,无疑是比较适合的选择; ( 2 )工业相机:升级了 MIPI 速率、 LVDS 速率和逻辑运行时钟速率之后,无疑可以干很多事情,可以支持更大幅面和更高帧率的工业采集和处理,再加上体积小,特别适合一些对体积有要求的比如焊缝跟踪系统、基于视觉的复杂无损探伤系统、复杂的机器视觉系统前端等等,体积、功耗低、速率高是一大优势。 ( 3 )消费级应用:因为芯片在价格等各方面还算适中,所以在消费级领域还是有一定的市场, wlcsp72 这类小封装的器件甚至可以做到手机里面去用于做一些时序控制,多协议视频图像流的桥接转换等等,当年 IPhone 手机就用了 lattice 的小封装器件。一些消费产品配套可编程逻辑器件确实增加了产品的灵活性。 说了这么这么多,吐槽一下开发工具,我是用 Radiant 来做的,这个软件的体验和 Quartus 、 Vitis/Vivado/ISE 以及他自家的 Diamond 比,还是差了一大截,比较的一言难尽,想不通为啥还要从 Diamond 里面独立出来这么一个来。 另外就是这个器件截止发博日,只有部分器件量产,还有一些是工程样片阶段,在功能上还有一些 BUG ( lattice 会出具一份告知文件),周期上也不短。因此要选用这个器件,需要实现跟 FAE 沟通清楚。 以下图片是微信公众号和 QQ 技术交流群的二维码,欢迎一起讨论交流。 另外,文中所述电路套件的User Guide说明请下载附件查看。 链接:https://pan.baidu.com/s/1-oUhHOAUa9R8IsqIHnipIQ 提取码:7x6u
相关资源