02、安路SparkRoad国产FPGA测评【学习篇】拨码开关控制LED
[复制链接]
本帖最后由 1nnocent 于 2022-7-17 10:55 编辑
本次实验实现的功能为16位拨码开关控制16个LED灯珠。
安路开发板使用的编译软件为
申请板子之前在小龙虾发布的帖子中找到了TD_User_Guide_V4.6.pdf。手册中详细地介绍了软件的安装过程,以及软件的使用方法,甚至还有各种IP核的配置教程,对使用这个软件帮助非常大。新建工程,直接按照历程的文件名进行命名,结果:
工程名称不能以数字开始,那么历程文件为啥可以?估计建完工程之后改的。
特意试了一下中文路径,果然也是不行:
现在添加source文件,本次实验较简单,定义输入接口(拨码开关)、输出接口(LED灯珠),位宽都为16位。
- module switch_led(
- input wire[15:0] switch,
- output wire[15:0] led
- );
-
- assign led = switch;
-
- endmodule
突然发现TD还能转换工程,可以将TD工程转换成其他工程(ISE、 Quartus II、 Diamond),同时也能将其他工程转换成TD工程。其他软件好像没发现这个功能。
添加管脚约束文件,需要约束的管脚为输入输出的端口。查看原理图可以找到拨码开关和LED灯珠对应的FPGA管脚:
约束文件代码:
-
- set_pin_assignment {led[15]} { LOCATION = T13; }
- set_pin_assignment {led[14]} { LOCATION = T12; }
- set_pin_assignment {led[13]} { LOCATION = R12; }
- set_pin_assignment {led[12]} { LOCATION = M7; }
- set_pin_assignment {led[11]} { LOCATION = T9; }
- set_pin_assignment {led[10]} { LOCATION = T8; }
- set_pin_assignment {led[9]} { LOCATION = T7; }
- set_pin_assignment {led[8]} { LOCATION = R7; }
- set_pin_assignment {led[7]} { LOCATION = P5; }
- set_pin_assignment {led[6]} { LOCATION = N5; }
- set_pin_assignment {led[5]} { LOCATION = P4; }
- set_pin_assignment {led[4]} { LOCATION = M5; }
- set_pin_assignment {led[3]} { LOCATION = N4; }
- set_pin_assignment {led[2]} { LOCATION = N3; }
- set_pin_assignment {led[1]} { LOCATION = M4; }
- set_pin_assignment {led[0]} { LOCATION = M3; }
-
- set_pin_assignment {switch[15]} { LOCATION = R15; }
- set_pin_assignment {switch[14]} { LOCATION = T15; }
- set_pin_assignment {switch[13]} { LOCATION = R14; }
- set_pin_assignment {switch[12]} { LOCATION = T14; }
- set_pin_assignment {switch[11]} { LOCATION = N9; }
- set_pin_assignment {switch[10]} { LOCATION = P9; }
- set_pin_assignment {switch[9]} { LOCATION = R9; }
- set_pin_assignment {switch[8]} { LOCATION = N8; }
- set_pin_assignment {switch[7]} { LOCATION = P8; }
- set_pin_assignment {switch[6]} { LOCATION = N6; }
- set_pin_assignment {switch[5]} { LOCATION = P6; }
- set_pin_assignment {switch[4]} { LOCATION = M6; }
- set_pin_assignment {switch[3]} { LOCATION = T6; }
- set_pin_assignment {switch[2]} { LOCATION = T5; }
- set_pin_assignment {switch[1]} { LOCATION = R5; }
- set_pin_assignment {switch[0]} { LOCATION = T4; }
写完后保存并添加进工程,之后是界面设置IO约束:
用户手册对IO界面的配置属性描述得非常清楚:
用户还可以通过不同颜色来区分不同 Bank,如下图所示。其中,红色: 时钟、品红色:电源、 灰色:接地,这三种类型的端口不属于任何 Bank。 左上角的红色原点对应芯片上的小凹点,表示芯片引脚的起始点。
赛灵思的管脚约束文件需要配置IOStandard属性,但是在TD的管脚约束文件中没有看到配置的语句,直接是指定管脚语句set_pin_assignment {switch[15]} { LOCATION = R15; }。当时在添加管脚约束文件时以为需要在“界面设置IO约束”界面中添加,但是打开界面后发现IOStandard已经设置好了:
在上述添加关键约束文件时只设置了绿色框的信息,并没有设置IOStandard信息,但是在“界面设置IO约束”界面中已经有信息了,按道理是自己设定,不过现场改也是可以的。后面在用户手册中看到了“IOStandard的设置”部分中提到系统有给默认电平:
IOstandard 的设置:
IOStandard 设置 IO 端口的电平标准。每个 Bank 都可以随意设置为支持该器件的
电平标准,不同的电平标准在同一个 Bank 中的电平要一致。TD 提供 LVCMOS、 LVDS、
LVTTL33、 PCI33 供用户选择。其中 LVCMOS 有 1.2v, 1.5V, 1.8V, 2.5V, 3.3V 的电
压可选择。 LVDS为差分对输入输出,当所选的IO端口为输入信号时,只能选择LVDS25,
LVDS33, LVPECL33; 所选 IO 端口为输出信号时,可选 LVDS25_E, LVDS33_E,
LVPECL33_E。默认的电平标准为 LVCMOS25(default)。
TD还可以对IO设置不同的驱动能力,赛灵思好像没有看到类似的功能:
以下是用户手册对驱动能力的描述:
DriveStrength 的设置
DriveStrength 设置 IO 端口的驱动能力。不同电平标准的驱动能力不同,如
LVCMOS25 的驱动能力为 4,8,12,16,单位为 mA。 DriveStrength 的值越小,表示驱动能
力越弱, DriveStrength 的值越大,表示驱动能力越强。
以下是所有IOStandard的驱动能力:
接下来是HDL2Bit 流程
在输入设计源文件和约束文件后,下一步进入 HDL2Bit 的设计实现流程。 HDL2Bit
流程包括设计读入(Read Design)、 RTL 级优化(Optimize RTL)、门级优化(Optimize
Gate)、布局优化(Optimize Placement)、布线优化(Optimize Routing) 和生成位流
(Generate Bitstream) 六个步骤。
这里步骤比赛灵思多了不少,只有综合-实现-生成比特流。虽然步骤麻烦但是操作上还是挺人性化可以一键运行六个步骤:
在多数情况下,用户只要双击 HDL2Bit,软件自动运行全部流程。 用户也可以用
Process 下拉菜单中的 Run, Rerun, Stop 来控制。 Process 菜单中的 Run 和 Stop 在导航
栏中有相应的按钮( 和 ),用户可以直接点击操作。
《1》读入文件
该步分析用户源文件的语法语义的正确性, 并产生原始行为级电路结构。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Read Design, 或右键单击 Read Design,选择 run
3. 参数配置
有错误,管脚约束文件是直接复制的例程里的,竟然不行是真没想到,错误都是管脚不能指定为用户管脚。
找了下原理图,这些引脚也是直接连到LED或拨码开关上了咋还错了,还是打开原例程对比一下,确实是和原例程一样,但是什么问题呢,不知道过了多久发现是芯片设置错了,当时是根据手册设置的芯片,这个手册应该是用的其他芯片。我直接按照上面的默认AL3。。。
完美解决:
《2》RTL 级优化
在读入设计文件后, TD 将对设计进行 RTL 级优化。本阶段将进行多路选择器优化、
数据通路优化、特殊功能模块自动识别等。 RTL 级优化将产生包含基本门(AND、 OR、
FF/Latch)和特殊功能模块的电路。
学新东西就是走一步一个坑:安装的时候没有说装License,就没去装。
安装完License后进行下一步:
《3》门级优化
门级优化包括普通逻辑的优化和映射、特殊逻辑的优化和映射等综合优化。门级优
化将产生包含逻辑单元和专用功能单元的电路。
这里没有坑,再下一步:
《4》布局优化
在得到正确的物理单元网表以后,需要对设计进行物理布局优化、 IO 单元布局、
物理单元布局和物理级逻辑优化等。布局优化将产生并处理只含有物理功能块(IOPAD、
SLICE、 RAM、 DSP 等)的电路。
又过了,还有点不习惯哈哈哈
《5》布线优化
布局优化后,进行布线优化。布线优化将完成所有模块互联信号的物理连接。这一
步也是用户设计实现的最后一步。 这一步完成后,所有的物理信息都被确定。布线优化
后可查看设计的详细信息,也可获得准确的电路时序信息。
现在来到最后一步。
《6》生成位流文件
Generate Bitstream 是将 FPGA 芯片中可编程开关的配置信息用二进制 0、 1 的格式
表示成位流(bitstream)数据供编程下载用。 位流生成器为器件编程产生位流文件,下载
工具将位流文件载入到外部的 SPI Flash 存储芯片或直接载入 FPGA 内部的配置存储器
中。
最后下载比特流上板看现象。
又是高估了我的电脑的驱动。
感谢小龙虾分享的用户手册,所有问题都能在手册中找到答案。
上板效果;
|