1nnocent 发表于 2022-7-17 10:55

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

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

<p>&nbsp; &nbsp; 本次实验实现的功能为16位拨码开关控制16个LED灯珠。</p>

<p>&nbsp; &nbsp; 安路开发板使用的编译软件为</p>

<table>
        <tbody>
                <tr>
                        <td width="200">&nbsp;
                        <table>
                                <tbody>
                                        <tr>
                                                <td>TangDynasty</td>
                                        </tr>
                                </tbody>
                        </table>
                        </td>
                </tr>
        </tbody>
</table>

<p>&nbsp; &nbsp; 申请板子之前在小龙虾发布的帖子中找到了TD_User_Guide_V4.6.pdf。手册中详细地介绍了软件的安装过程,以及软件的使用方法,甚至还有各种IP核的配置教程,对使用这个软件帮助非常大。新建工程,直接按照历程的文件名进行命名,结果: &nbsp;</p>

<p>工程名称不能以数字开始,那么历程文件为啥可以?估计建完工程之后改的。</p>

<p>特意试了一下中文路径,果然也是不行: &nbsp;</p>

<p>现在添加source文件,本次实验较简单,定义输入接口(拨码开关)、输出接口(LED灯珠),位宽都为16位。</p>

<pre>
<code>module switch_led(
        input        wire        switch,
        output        wire        led
);

assign led = switch;

endmodule</code></pre>

<p>&nbsp; &nbsp; 突然发现TD还能转换工程,可以将TD工程转换成其他工程(ISE、 Quartus II、 Diamond),同时也能将其他工程转换成TD工程。其他软件好像没发现这个功能。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 添加管脚约束文件,需要约束的管脚为输入输出的端口。查看原理图可以找到拨码开关和LED灯珠对应的FPGA管脚:</p>

<p>&nbsp;</p>

<p>&nbsp; 约束文件代码:</p>

<pre>
<code>###led_pins--------------------------------------------------
set_pin_assignment {led} { LOCATION = T13;}
set_pin_assignment {led} { LOCATION = T12;}
set_pin_assignment {led} { LOCATION = R12;}
set_pin_assignment {led} { LOCATION = M7;}
set_pin_assignment {led} { LOCATION = T9;}
set_pin_assignment {led} { LOCATION = T8;}
set_pin_assignment {led} { LOCATION = T7;}
set_pin_assignment {led} { LOCATION = R7;}
set_pin_assignment {led} { LOCATION = P5;}
set_pin_assignment {led} { LOCATION = N5;}
set_pin_assignment {led} { LOCATION = P4;}
set_pin_assignment {led} { LOCATION = M5;}
set_pin_assignment {led} { LOCATION = N4;}
set_pin_assignment {led} { LOCATION = N3;}
set_pin_assignment {led} { LOCATION = M4;}
set_pin_assignment {led} { LOCATION = M3;}
###switch_pins----------------------------------------------
set_pin_assignment {switch} { LOCATION = R15;}
set_pin_assignment {switch} { LOCATION = T15;}
set_pin_assignment {switch} { LOCATION = R14;}
set_pin_assignment {switch} { LOCATION = T14;}
set_pin_assignment {switch} { LOCATION = N9;}
set_pin_assignment {switch} { LOCATION = P9;}
set_pin_assignment {switch} { LOCATION = R9;}
set_pin_assignment {switch} { LOCATION = N8;}
set_pin_assignment {switch} { LOCATION = P8;}
set_pin_assignment {switch} { LOCATION = N6;}
set_pin_assignment {switch} { LOCATION = P6;}
set_pin_assignment {switch} { LOCATION = M6;}
set_pin_assignment {switch} { LOCATION = T6;}
set_pin_assignment {switch} { LOCATION = T5;}
set_pin_assignment {switch} { LOCATION = R5;}
set_pin_assignment {switch} { LOCATION = T4;}</code></pre>

<p>写完后保存并添加进工程,之后是界面设置IO约束:</p>

<p>&nbsp; 用户手册对IO界面的配置属性描述得非常清楚:</p>

<p>用户还可以通过不同颜色来区分不同 Bank,如下图所示。其中,红色: 时钟、品红色:电源、 灰色:接地,这三种类型的端口不属于任何 Bank。 左上角的红色原点对应芯片上的小凹点,表示芯片引脚的起始点。<br />
&nbsp;</p>

<p>&nbsp; 赛灵思的管脚约束文件需要配置IOStandard属性,但是在TD的管脚约束文件中没有看到配置的语句,直接是指定管脚语句set_pin_assignment {switch} { LOCATION = R15; }。当时在添加管脚约束文件时以为需要在&ldquo;界面设置IO约束&rdquo;界面中添加,但是打开界面后发现IOStandard已经设置好了:</p>

<p>&nbsp; &nbsp; &nbsp; 在上述添加关键约束文件时只设置了绿色框的信息,并没有设置IOStandard信息,但是在&ldquo;界面设置IO约束&rdquo;界面中已经有信息了,按道理是自己设定,不过现场改也是可以的。后面在用户手册中看到了&ldquo;IOStandard的设置&rdquo;部分中提到系统有给默认电平:</p>

<p>&nbsp;&nbsp;<span style="color:#2ecc71;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOstandard 的设置:<br />
IOStandard 设置 IO 端口的电平标准。每个 Bank 都可以随意设置为支持该器件的<br />
电平标准,不同的电平标准在同一个 Bank 中的电平要一致。TD 提供 LVCMOS、 LVDS、<br />
LVTTL33、 PCI33 供用户选择。其中 LVCMOS 有 1.2v, 1.5V, 1.8V, 2.5V, 3.3V 的电<br />
压可选择。 LVDS为差分对输入输出,当所选的IO端口为输入信号时,只能选择LVDS25,<br />
LVDS33, LVPECL33; 所选 IO 端口为输出信号时,可选 LVDS25_E, LVDS33_E,<br />
LVPECL33_E。</span><span style="color:#e74c3c;">默认的电平标准为 LVCMOS25(default)。</span></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;TD还可以对IO设置不同的驱动能力,赛灵思好像没有看到类似的功能:</p>

<p>&nbsp; 以下是用户手册对驱动能力的描述:</p>

<p><span style="color:#1abc9c;">DriveStrength 的设置<br />
DriveStrength 设置 IO 端口的驱动能力。不同电平标准的驱动能力不同,如<br />
LVCMOS25 的驱动能力为 4,8,12,16,单位为 mA。 DriveStrength 的值越小,表示驱动能<br />
力越弱, DriveStrength 的值越大,表示驱动能力越强。</span></p>

<p>以下是所有IOStandard的驱动能力:<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 接下来是HDL2Bit 流程<br />
&nbsp;<span style="color:#1abc9c;">&nbsp;&nbsp;&nbsp;在输入设计源文件和约束文件后,下一步进入 HDL2Bit 的设计实现流程。 HDL2Bit<br />
流程包括设计读入(Read Design)、 RTL 级优化(Optimize RTL)、门级优化(Optimize<br />
Gate)、布局优化(Optimize Placement)、布线优化(Optimize Routing) 和生成位流<br />
(Generate Bitstream) 六个步骤。</span></p>

<p>这里步骤比赛灵思多了不少,只有综合-实现-生成比特流。虽然步骤麻烦但是操作上还是挺人性化可以一键运行六个步骤:</p>

<p><span style="color:#1abc9c;">&nbsp;&nbsp;&nbsp;&nbsp;在多数情况下,用户只要双击 HDL2Bit,软件自动运行全部流程。 用户也可以用<br />
Process 下拉菜单中的 Run, Rerun, Stop 来控制。 Process 菜单中的 Run 和 Stop 在导航<br />
栏中有相应的按钮( 和 ),用户可以直接点击操作。</span></p>

<p>《1》读入文件<br />
<span style="color:#1abc9c;">该步分析用户源文件的语法语义的正确性, 并产生原始行为级电路结构。<br />
1. 在 FPGA Flow 面板中展开 HDL2Bit<br />
2. 双击 Read Design, 或右键单击 Read Design,选择 run<br />
3. 参数配置</span></p>

<p>有错误,管脚约束文件是直接复制的例程里的,竟然不行是真没想到,错误都是管脚不能指定为用户管脚。</p>

<p></p>

<p>&nbsp; 找了下原理图,这些引脚也是直接连到LED或拨码开关上了咋还错了,还是打开原例程对比一下,确实是和原例程一样,但是什么问题呢,不知道过了多久发现是芯片设置错了,当时是根据手册设置的芯片,这个手册应该是用的其他芯片。我直接按照上面的默认AL3。。。</p>

<p>&nbsp; 完美解决: &nbsp;</p>

<p>《2》RTL 级优化<br />
<span style="color:#1abc9c;">在读入设计文件后, TD 将对设计进行 RTL 级优化。本阶段将进行多路选择器优化、<br />
数据通路优化、特殊功能模块自动识别等。 RTL 级优化将产生包含基本门(AND、 OR、<br />
FF/Latch)和特殊功能模块的电路。</span></p>

<p>学新东西就是走一步一个坑:安装的时候没有说装License,就没去装。</p>

<p>&nbsp; 安装完License后进行下一步:</p>

<p>《3》门级优化<br />
<span style="color:#1abc9c;">门级优化包括普通逻辑的优化和映射、特殊逻辑的优化和映射等综合优化。门级优<br />
化将产生包含逻辑单元和专用功能单元的电路。</span><br />
这里没有坑,再下一步:</p>

<p>《4》布局优化<br />
<span style="color:#1abc9c;">在得到正确的物理单元网表以后,需要对设计进行物理布局优化、 IO 单元布局、<br />
物理单元布局和物理级逻辑优化等。布局优化将产生并处理只含有物理功能块(IOPAD、<br />
SLICE、 RAM、 DSP 等)的电路。</span></p>

<p>又过了,还有点不习惯哈哈哈</p>

<p>《5》布线优化<br />
<span style="color:#1abc9c;">布局优化后,进行布线优化。布线优化将完成所有模块互联信号的物理连接。这一<br />
步也是用户设计实现的最后一步。 这一步完成后,所有的物理信息都被确定。布线优化<br />
后可查看设计的详细信息,也可获得准确的电路时序信息。</span></p>

<p>现在来到最后一步。</p>

<p>《6》生成位流文件<br />
<span style="color:#1abc9c;">Generate Bitstream 是将 FPGA 芯片中可编程开关的配置信息用二进制 0、 1 的格式<br />
表示成位流(bitstream)数据供编程下载用。 位流生成器为器件编程产生位流文件,下载<br />
工具将位流文件载入到外部的 SPI Flash 存储芯片或直接载入 FPGA 内部的配置存储器<br />
中。</span></p>

<p>最后下载比特流上板看现象。</p>

<p>&nbsp; 又是高估了我的电脑的驱动。</p>

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

<p>上板效果;</p>

<p> &nbsp; &nbsp;</p>

Jacktang 发表于 2022-7-17 21:16

<p>楼主的FPGA的门级优化和布局优化,挺顺利</p>

1nnocent 发表于 2022-7-18 15:13

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

<p>再编不过,心态就要崩了哈哈哈</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>。</p>
页: [1]
查看完整版本: 02、安路SparkRoad国产FPGA测评【学习篇】拨码开关控制LED