原创 Lattice CrossLinkNx LIFCL-40应用连载1:新建一个工程

2021-1-15 11:26 3670 37 3 分类: FPGA/CPLD 文集: Lattice
作者:Hello,Panda1         
1.目的

本入门分享一共三篇,目的是为了帮助新手利用Lattice Radiant Software创建第一个新工程、使用在线调试器和使用RSIC-V软核。基本的软硬件配置如下:

(1)   软件开发平台:Lattice Radiant Software 2.0.1.281.2Lattice

Propel1.1

(2)   评估板:CrossLinkNx Base(编号YSPL0010A,公司自制)

(3)   器件  LIFC-40-7MG121CES器件)

(4)   调试器:Lattice HW-USBN-2B

2  创建第一个工程

本章介绍如何创建第一个CrosslinkNX工程。

2.1  创建新工程

目标:创建一个新工程,使用内部的osc产生50MHz的时钟作为系统的工作时钟,利用计数器产生50Hz的方波,生成bit文件并将bit文件烧写到SPI Flash中。

Step1:打开 Radiant软件,选择File->New->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下,选择input File->Add->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                    [15 : 0]                     r_chip_cnt   = 16'd0 ;

reg                                               r_chip_rstn  = 1'b0  ;

reg                    [9 : 0]                      r_low_cnt  ;

reg                    [9 : 0]                      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 <= (r_chip_cnt >= 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

         if(r_low_cnt  >= 10'd999) begin

               r_low_cnt  <= 10'd0;

               r_high_cnt <= (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  <= (r_high_cnt >= 10'd499) ? 1'b1 : 1'b0;

       end

end

 

assign o_wave_50hz = r_wave;

 

endmodule

 

备注:50Hz频率的周期为20ms50MHz的周期为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 EditorTiming Constraint Editor等图形界面添加,本例选择第一种,约束文件的语法请参考Lattice的官方文件,也可在软件Tools->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} [get_ports o_wave_50hz]

ldc_set_port -iobuf {IO_TYPE=LVCMOS18H SLEWRATE=SLOW} [get_ports o_wave_50hz]

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运行。

首先,点击Tools->Programer按钮,进入烧写工具界面。

2.4.1 下载到FPGA SRAM

如下图所示,双击Target MemoryOperation下面的复习项弹出配置菜单,根据实际硬件情况选择JTAG的类型、选择Target MemorySRAM是,File Name选项指定到bit文件所在位置,Port Interface选择为JTAGAcess Mode选择为Direct ProgramingOperationFast Configuration

10 下载到FPGA SRAM配置界面

点击绿色的下载按钮,等待下载完成,完成后下方的output栏会提示successful

2.4.2  固化到SPI Flash

bit文件固化到spi flash,首先应将其下载到fpgasram使能MASTER_SPI_PORT使JTAG2SPI命令可以正常工作。烧写到SPI Flash的文件既可以是bit文件,也可以是mcs文件,本例选择直接烧写bit文件。

如下图所示,选项如下:

(1)   Target MemoryExtern SPI Flash Memory

(2)   Port InterfaceJTAG2SPI

(3)   OperationEraseProgramVerify

(4)   Programming File路径指向bit文件所在位置;

(5)   选择SPI Flash的型号;

(6)   根据bit文件的大小设置烧写到Flash的起始地址。

设置完成后点击绿色的下载按钮,等待下载到SPI Flash完成,output栏会提示进度和完成状态。

11 固化到SPI Flash配置界面

2.5  功能确认

用示波器测量输出引脚,可以看到频率为50Hz,幅度为1.8V的方波。

12 功能确认
欢迎大家扫描下面的二维码加入QQ讨论群或微信公众号共同讨论,共同进步。

作者: panda君, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3403128.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

curton 2021-1-15 17:28

学习了




欢迎点击


论坛> >机器人/工业电子> >工业电子与自动化


https://mbb.eet-china.com/forum/topic/85437_1_1.html
相关推荐阅读
panda君 2023-01-06 10:43
Lattice CrossLink-Nx LIFCL-40应用连载8:MIPI DSI接口驱动LCD显示器
作者:Hello,Panda  一、案例需求 使用LIFCL-40 FPGA的MIPI DSI硬核接口驱动7寸LCD显示器: (1)    显示器:7寸,...
panda君 2022-10-30 11:03
Lattice Crosslink-NX器件(LIFCL-40-7MG121I)用作视频输入桥接时支持的CMOS型号及可达性能汇总
作者:Hello,Panda大家早上好、中午好、晚上好。 熊猫君前几天回老家了,手上没得啥新素材码字,决定水一文,将Lattice Crosslink-NX系列器件中熊猫君前一阵子用得比较多的那个型...
panda君 2022-10-16 21:26
关于Radiant软件下Crosslink-NX物理层IP核MIPI_DPHY无法产生正确的非连续时钟时序的BUG修复办法
作者:Hello,Panda 一、问题描述: (1)器件:Lattice Crosslink-NX LIFCL-40-7MG121I ; (2)软件:Radiant 3.1; (3)MIPI_...
panda君 2022-10-12 16:21
易灵思Ti60 FPGA专题(1)-器件和需求介绍
作者:Hello,Panda各位朋友们,先生们,女士们,大家早上好,中午好,晚上好。熊猫君最近正在折腾HK的易灵思FPGA芯片做一个Camera,现在弄得差不多了,计划分享一期易灵思的专题,大概有6集...
panda君 2022-10-07 13:52
关于Xilinx ZYNQ Ultrascale+ MPSoC使用原生PS端DP接口实现Live模式输出的经验分享
作者:Hello,Panda今天熊猫君要分享的是如何使用Xilinx  ZYNQ Ultrascale+ MPSoC的PS端原生DP接口实现LIVE模式输出3860*2160,30Hz视频。...
panda君 2022-08-11 12:04
Crosslink-NX器件应用案例(2): MIPI的多源合成(MUX)与分发(DeMUX)
作者:Hello,Panda好久没有码文章了,今天讨论讨论MIPI多通道合成输出(MUX)和输入分发输出(DeMUX)的问题。这也是类似于Crosslink-NX此类器件的一个典型应用方向,通过增加传...
我要评论
1
37
关闭 站长推荐上一条 /2 下一条