3757|2

866

帖子

3

TA的资源

版主

楼主
 

02、安路SparkRoad国产FPGA测评【学习篇】拨码开关控制LED [复制链接]

  本帖最后由 1nnocent 于 2022-7-17 10:55 编辑

    本次实验实现的功能为16位拨码开关控制16个LED灯珠。

    安路开发板使用的编译软件为

 
TangDynasty

    申请板子之前在小龙虾发布的帖子中找到了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管脚:

 

  约束文件代码:

  • ###led_pins--------------------------------------------------
  • 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; }
  • ###switch_pins----------------------------------------------
  • 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 内部的配置存储器
中。

最后下载比特流上板看现象。

  又是高估了我的电脑的驱动。

感谢小龙虾分享的用户手册,所有问题都能在手册中找到答案。

上板效果;

   

最新回复

楼主的FPGA的门级优化和布局优化,挺顺利   详情 回复 发表于 2022-7-17 21:16
点赞 关注
 
 

回复
举报

7017

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主的FPGA的门级优化和布局优化,挺顺利

点评

再编不过,心态就要崩了哈哈哈       。  详情 回复 发表于 2022-7-18 15:13
 
 
 

回复

866

帖子

3

TA的资源

版主

板凳
 
Jacktang 发表于 2022-7-17 21:16 楼主的FPGA的门级优化和布局优化,挺顺利

再编不过,心态就要崩了哈哈哈

 

 

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 8

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表