RISC-V MCU中文社区

HBird_FPGA板:FPGA入门学习 - 极简计数器之外部时钟驱动三个led灯

发表于 开源蜂鸟E203 2020-04-19 14:50:01
0
4307
1

入手这个蜂鸟FPGA评估板可不能仅仅用来学习蜂鸟E203 CPU,既然上面有 Artix-7XC7A100T FPGA还可以用来学习FPGA嘛。

好,开始!做一个计数器,根据计数器值来驱动板上的LED吧,昨天用了几个小时玩了一下~~~

基本教程步骤和Vivado 2018.2的项目内容、生成的bitstream文件可以从这里得到:

https://pan.baidu.com/s/1PTxaWp4vyKOjMHPQDKU02Q  提取码:dzxp

当然参照上面压缩包中的“Vivado简明教程.pdf”中的步骤一步步创建工程、踩坑、排障,更有利于学习 :)


需要注意的是:

  1.  1. fpga型号需要根据自己的板子上的型号选择,例如我的板子上是artix-7xc7a100t,有的是35t,75t的别选错了。
  2.  2. 蜂鸟板上用的是100Mhz外部时钟,在工程中把50m改成100m
  3.  3.例子中使用了4个LED位,我看了下蜂鸟板上觉得有三个在一起的LED灯,就选择3个LED表示计数器的变化吧, 100mhz时钟计数太快,我就选择了led_r寄存器的led_r[28:26]来驱动三个LED灯。assign led[2:0] = led_r[28:26];
  4.  4. 网盘中的demo项目保存的目录是/home/jim/vivado/demo,里面引用文件也是绝对路径需要自行修改。(吐槽下,这个vivado怎么不缺省使用相对路径呢?真不可思议)

源码很简单,关键是怎么让源码和蜂鸟板配合起来,我就去看蜂鸟文档、e203 git中的约束文件,找到100mhz时钟、3个LED接在FPGA、Reset按钮哪个管脚上,根据文档和约束找出来的答案是:

100mhz外部时钟是在FPGA W19管脚上,板卡上三个靠得很近的三个LED灯分别接在管脚V19, Y19, W20上,MCU_Reset接在P20上。所以我就先根据蜂鸟板的约束文件把这几个部分拷贝出来,然后把这个demo项目的信号与管脚对应起来:

set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CFGBVS VCCO [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
#####               create clock              #####
set_property -dict {PACKAGE_PIN W19 IOSTANDARD LVCMOS33} [get_ports clk_osc_100m]
create_clock -period 10.000 -name clk_100m -waveform {0.000 5.000} -add [get_ports clk_osc_100m]
#####            rst define           #####
set_property PACKAGE_PIN P20 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
set_property PACKAGE_PIN W20 [get_ports {led[2]}]
set_property PACKAGE_PIN Y19 [get_ports {led[1]}]
set_property PACKAGE_PIN V19 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]

上面的rst, clk_osc_100m, led[0].. 都是项目中定义的管脚。有了这些这个demo项目中的信号就与FPGA管脚对应起来了


按照上面的pdf中步骤一步步操作最终就能够编译出来bitstream。

为了生成最终写入flash的mcs文件,我在项目的settings | Bitstream | tcl.post中设置了使用cfgmem.tcl,使用vivado生成bitstream的最后阶段会调用这个脚本生成mcs.(这个脚本来源于e203 git中的同名脚本,改了下内容)


如果上述步骤一切正确,最后的Generate Bitstream完成后会在demo.runs/impl_1目录中找到top.bit, top.ltx, top.mcs文件。 如果想临时写入fpga,就烧写top.bit和top.ltx到fpga中;如果想要断电后还在,就按照蜂鸟板教程中写mcs的方法把top.mcs写入到fpga的外接flash中。(蜂鸟e203 cpu就被抹掉了,要想恢复蜂鸟板原有功能,就把原来的 risc-v e203 system.mcs重新写入到flash就可以了。)


运行方法:

按住板上的MCU_Reset按钮, 就可以看到红绿蓝三个LED灯交替点亮、熄灭。。。

嘿嘿,要一直按住Reset按钮很不爽,改一下top.v中的源码吧,让它变成缺省就开始计数。。。


这是个极为简单的FPGA例子,从这里面可以学到怎么将fpga的逻辑代码与已有的板卡关联;怎么编写fpga约束文件。


喜欢1
用户评论
wujiboy

wujiboy 未通过实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板