作者: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讨论群或微信公众号共同讨论,共同进步。