【LiteX】【开发板】【BoChenK7】使用Python开发FPGA【Hello World、LED点灯、Memory测速、替换BIOS】

news2024/11/15 7:14:47

目录

  • 开发板介绍
  • 下载仓库
  • 工程设计
  • 工程构建
    • 构建流程
  • 工程测试
    • Hello World
    • LED点灯
    • Memory测速
    • 替换BIOS
  • 开发板信息

开发板介绍

手头目前只有一个购买的BoChenK7开发板,后续会用它来进行LiteX FPGA SoC的构建
测试可能会包括:

  • LED:本篇文章
  • DDR
  • SPI Flash
  • SD Card
  • Ethernet以太网
  • HDMI视频输入输出
  • PCIe

下载仓库

LiteX有一个生态库叫做litex-boards,里面包含了上百种开发板(比如Xilinx、Digilent等品牌)
若是你手中有现成的开发板,可以直接使用litex-boards仓库:https://github.com/litex-hub/litex-boards
而我目前手头的是BoChenK7开发板我自己作了一个litex-boards-vacajk仓库:https://github.com/vacajk/litex-boards-vacajk

BoChenK7开发板在Python代码中的名称为:bochen_kintex7_base
litex-boards-vacajk仓库依赖LiteX开发环境,环境搭建方法可以跳转:【LiteX】使用Python实现FPGA SoC构建的开源工具

# 激活conda环境
conda activate <your conda env name>
# 进入litex环境目录
cd ~/Study/litex/env/litex
# 下载仓库
git clone git@github.com:vacajk/litex-boards-vacajk.git
# 安装仓库
cd litex-boards-vacajk
pip install --editable .

工程设计

bochen_kintex7_base开发板的基础配置文件:litex-boards-vacajk/litex_boards_vacajk/targets/bochen_kintex7_base.py

默认情况会开启如下配置:

  • --cpu-type=vexriscv
  • --with-led-chaser

其他默认不开启的配置包括:

  • --with-sdram
  • --with-spi-flash
  • --with-sdcard
  • --with-ethernet
  • --with-etherbone
  • --with-video-terminal
  • --with-video-framebuffer
  • --with-video-colorbars

工程构建

# 加载vivado开发环境
$ source ~/Xilinx/Vitis/2021.1/settings64.sh
# 找一个工程目录(如果使用python -m的方法,在哪里运行都无所谓)
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
# 编译BIOS、综合、布局、布线、生成bitstream(我们使用默认配置即可实现Hello World和LED点灯的测试)
$ python -m litex_boards_vacajk.targets.bochen_kintex7_base --build

# 编译完成时的log(最后一步为生成bitstream)
Creating config memory files...
Creating bitstream load up from address 0x00000000
Loading bitfile bochen_kintex7_base.bit
Writing file ./bochen_kintex7_base.bin
Writing log file ./bochen_kintex7_base.prm
===================================
Configuration Memory information
===================================
File Format        BIN
Interface          SPIX4
Size               16M
Start Address      0x00000000
End Address        0x00FFFFFF

Addr1         Addr2         Date                    File(s)
0x00000000    0x001B35CB    Aug 17 20:13:58 2024    bochen_kintex7_base.bit
0 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered.
write_cfgmem completed successfully
# quit
INFO: [Common 17-206] Exiting Vivado at Sat Aug 17 20:13:59 2024...

构建流程

作为第一个工程,这里简单介绍以下LiteX的整体构建流程(自己摸索总结)

TODO:详细介绍

  • 运行Python脚本
    • 所有LiteX的IP模块都是由Python编写并封装成类
    • 运行Python脚本时如果发现有语法、连接错误问题,直接会被Python解释器报错
  • 打印SoC结构
  • 编译BIOS
  • 生成Verilog
  • 综合、布局、布线、生成bitstream

工程测试

连接JTAG(USB)、UART(USB)、电源(USB)到BoChenK7开发板

# 查看USB转串口设备名
$ ls /dev/ttyUSB*
/dev/ttyUSB0
# +x属性到USB转串口设备
$ sudo chmod +x /dev/ttyUSB0

提前打开新的BASH Shell,使用litex_term打开串口监听

# BASH B
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
$ litex_term /dev/ttyUSB0

打开litex_term后,再进行FPGA bitstream下载

# BASH A
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
$ python -m litex_boards_vacajk.targets.bochen_kintex7_base --load

Hello World

查看BASH A中的litex_term命令行

        __   _ __      _  __
       / /  (_) /____ | |/_/
      / /__/ / __/ -_)>  <
     /____/_/\__/\__/_/|_|
   Build your hardware, easily!

 (c) Copyright 2012-2024 Enjoy-Digital
 (c) Copyright 2007-2015 M-Labs  

 BIOS built on Aug 17 2024 20:11:57
 BIOS CRC passed (6edd64b6)

 LiteX git sha1: 35498b468

--=============== SoC ==================--
CPU:		VexRiscv @ 100MHz
BUS:		wishbone 32-bit @ 4GiB
CSR:		32-bit data
ROM:		128.0KiB
SRAM:		8.0KiB


--============== Boot ==================--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
No boot medium found

--============= Console ================--

litex> 

这个命令行控制窗口的打印我们就当它是Hello World了
如果想在其中添加一些自定义log,可以修改C代码:litex/litex/soc/software/bios/main.c

LED点灯

我们的构建中默认添加了LedChaser模块,对接了开发板上的8个LED
上电时,该模块会自动运行流水灯
TODO:照片

我们可以在litex_term命令行中对LED等进行控制

litex> help
leds                     - Set Leds value
# 查看LEDk控制命令:leds <value>
litex> leds
leds <value>
# 控制LED亮灭
litex> leds 0x55
Settings Leds to 0x55
litex> leds 0xAA
Settings Leds to 0xaa
litex> leds 0xff
Settings Leds to 0xff
litex> leds 0x00
Settings Leds to 0x0
litex>

Memory测速

除了上述的Hello World外,我们还能通过litex_term命令行作一些其它测试

# help查看所有命令
litex> help

LiteX BIOS, available commands:

leds                     - Set Leds value
flush_cpu_dcache         - Flush CPU data cache
crc                      - Compute CRC32 of a part of the address space
ident                    - Identifier of the system
help                     - Print this help

serialboot               - Boot from Serial (SFL)
reboot                   - Reboot
boot                     - Boot from Memory

mem_cmp                  - Compare memory content
mem_speed                - Test memory speed
mem_test                 - Test memory access
mem_copy                 - Copy address space
mem_write                - Write address space
mem_read                 - Read address space
mem_list                 - List available memory regions

# 查看SoC固件名称
litex> ident
Ident: LiteX SoC on Bochen Kintex7 Base 2024-08-17 20:11:56

# 查看SoC的Memory Map
## ROM:放BIOS程序固件
## SRAM:放BIOS程序固件及运行时程序,空余一些Memory可以作测试
## CSR:SoC寄存器空间
litex> mem_list
Available memory regions:
ROM   0x00000000 0x20000 
SRAM  0x10000000 0x2000 
CSR   0xf0000000 0x10000 

# 测试SRAM读写速度
## 因为SRAM中包含了一些BIOS程序、变量等代码,我们只能取中间一小段对读写带宽进行测试
## 测试命令:mem_speed 0x10001000 0x400
## 测试范围:0x10001000~0x100013FFF
litex> mem_speed 0x10001000 0x400
Memspeed at 0x10001000 (Sequential, 1.0KiB)...
  Write speed: 154.7MiB/s
   Read speed: 84.9MiB/s

SoC运行速率为100MHz,总线带宽为32bit,理论最大带宽为32/8*100=400MB/s
mem_speed是32bit CPU软件读写SRAM带宽测试,利用率 154.7/400=38.7%,还不错

替换BIOS

之前在仿真时已经测试过替换BIOS的功能:【LiteX】【仿真】使用litex_sim在Python环境中实现FPGA SoC仿真测试
编译demo程序

# --build-path=build/bochen_kintex7_base:指向编译目录,该文件夹中包含了gateware和software子目录
# --mem=rom:告诉编译工具demo.bin运行在rom中(启动地址会和bios.bin相同)
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
$ litex_bare_metal_demo --build-path=build/bochen_kintex7_base --mem=rom

构建烧录程序

# BASH A
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
# 将demo.bin替换bios.bin,构建FPGA SoC
$ python -m litex_boards_vacajk.targets.bochen_kintex7_base --integrated-rom-init=demo.bin --build
# 下载bitstream到FPGA
$ python -m litex_boards_vacajk.targets.bochen_kintex7_base --integrated-rom-init=demo.bin --load

串口查看demo.bin运行

# BASH B
$ cd ~/Study/litex/env/litex-boards-vacajk/litex_boards_vacajk
$ litex_term /dev/ttyUSB0
LiteX minimal demo app built Aug 17 2024 21:16:24

Available commands:
help               - Show this command
reboot             - Reboot CPU
led                - Led demo
donut              - Spinning Donut demo
helloc             - Hello C
litex-demo-app> helloc
Hello C demo...
C: Hello, world!
litex-demo-app> donut
Donut demo...                                                   
                          $@@@$$$$$$$                                          
                      $@@@@$$$###*****##$$                                     
                    #$$@@@$$$#**!=;===!**#$$$#                                 
                   #$$@@@@@$$##*=:~:;;==*!*#$$$$#                              
                  *#$$$@@@@$$$##*=-,,--~=***#$$@@$$                            
                 !*#$$$$@@@@$$$$#*!....~:;!!*#$$@@@$#                          
                 =!*###$$$$$$$$$$$$$$##*,~;~=!*#$$$$$$#=                       
                 ;=!*####$$$$$$$$$$$$$$$########$$$$$$##                       
                 ~==!***####$$$$$$$$$$$$$$$$$$$$$$$$$$#*!                      
                  :;==!!**######$$$$$$$$$$$$$$$$$$$####*=                      
                   ~;===!!****##########$$#$$########**!=                      
                    ~:;;==!!!!*****###############***!!=;                      
                     .~:;;===!!!!!!**************!!!!==;~                      
                       ,~::;;;;====!!!!!!!!!!*!!!=====;~                       
                         .,~~:;;;;;;;======!!;==;;:::~,                        
                             ,--::::;:;;;;;:;;::::~-.                          
litex-demo-app>

开发板信息

BoChenK7开发板的接口如下图,还是比较丰富的
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链+乡村振兴】“蜜链盟”乡村振兴基层治理数字化平台 | FISCO BCOS应用案例

在国家战略政策推动和新一代信息化发展应用的合力之下&#xff0c;数字乡村是互联网化、信息化和数字化在农业农村经 济社会发展中的表现。为进一步加强乡村基层治理&#xff0c;根据《中共海南省委农村工作领导小组办公室海南省农业农 村厅关于在我省乡村治理中推广运用积分制…

【Docker】Docker Volume(存储卷)

一、什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主…

xss-靶场

一、环境地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 二、案例复现 案列1——Ma Spaghet&#xff01; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams…

idea2022新建jsp项目并配置Tomcat服务器

1、创建项目 2、添加jdk 步骤如下&#xff0c;然后点击下边的create 创建项目即可 3、点击file 4、选择模块添加web 5、配置tomcat 6、依次点击 7、新建jsp文件 8、成功显示

Python 全栈系列262 使用sqlalchemy(clickhouse)

说明 再补充一篇。之前连不上的原因也挺搞笑&#xff0c;大概是deepseek把我带偏了&#xff0c; 应该是 pip3 install clickhouse-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/ 但是它教我 pip3 install sqlalchemy-clickhouse -i https://mirrors.aliyun.com/py…

Keepalived总结笔记

环境准备&#xff1a;两台安装ka的服务器&#xff0c;两台客户机&#xff0c;IP无要求&#xff0c;关闭火墙和selinux 1.在两台主机上安装ka 全局配置文件在/etc/keepalived/keepalived.conf 可以改写邮件地址和发送邮件的地址和主机唯一标识以及组播地址 配置虚拟路由&…

基于单片机的智能晾衣系统设计

摘 要 &#xff1a;在网络信息技术的推动下&#xff0c;智能家居得到了广泛应用&#xff0c;文章根据当前的市场动态&#xff0c;针对基于单片机的智能晾衣系统设计展开论述&#xff0c;具体包括两个方面的内容———硬件设计和软件设计。 关键词 &#xff1a;单片机&#xff…

经方药食两用服务平台

TOC springboot226经方药食两用服务平台 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专业知识…

【经典算法】BFS_最短路问题

1. 最短路问题介绍 最短路径问题是图论中的一类十分重要的问题。本篇文章只介绍边权为1(或边权相同)的最简单的最短路径问题。所谓边权&#xff0c;就是两点之间的距离。 这类问题通俗的说就是告诉你起点和终点&#xff0c;要你找出最短的路径或是最短路径是多少。 解决方法&…

每日OJ_牛客_DP3跳台阶扩展问题

目录 DP3跳台阶扩展问题 题解代码1&#xff08;dp&#xff09; 题解代码2&#xff08;找规律&#xff09; DP3跳台阶扩展问题 跳台阶扩展问题_牛客题霸_牛客网 题解代码1&#xff08;dp&#xff09; 假定第一次跳的是一阶&#xff0c;那么剩下的是n-1个台阶&#xff0c;跳法…

汇编语言:jcxz 指令

‌ 在汇编语言中&#xff0c;jcxz 标号 指令是一个有条件转移指令&#xff0c;用于检测CX寄存器的值&#xff0c;如果CX寄存器的值为0&#xff0c;则跳转到指令中标号所指定的地址处执行&#xff1b;否则&#xff0c;指令将继续顺序执行。‌ 1. jcxz 标号 &#xff0…

超市收银出入库进销存库存管理系统java数据库SpringBoot前端VUE

系统设计是一个把软件需求转换成用软件系统表示的过程[9]。通过对目标系统的分析和研究&#xff0c;做出了对师范学院实习管理系统的总体规划&#xff0c;这是全面开发系统的重要基础。在对实习管理系统全面分析调查的基础上&#xff0c;制定出商品销售系统的总体规划。系统设计…

KEEPALIVED的高可用实现

目录 一.高可用集群 1.1 集群类型 Keepalived 环境准备 1.2Keepalived 相关文件 1.3实验步骤 1.3.1HTTP配置 1.3.2安装KA 1.3.3实现master/slave的 Keepalived 单主架构 1.3.4抢占模式和非抢占模式 非抢占模式 抢占模式 抢占延迟模式 preempt_delay 1.3.5开启KA…

习题2.38-2.39

2.38这个题目特别有意思,能比较深的理解什么是左侧优先右侧优先。先看看实现代码 ;;满足交换律,即操作函数的参数可相互交换,其结果不变 (defn fold-right[op initial sequences](if (empty? sequences)initial(op (first sequences)(accumulate op initial (rest sequence…

快讯 | 28页知网侵权函难挡秘塔AI:多家数据库抢着合作!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

使用 ESP32 和 TFT 屏幕显示实时天气信息 —— 基于 OpenWeatherMap API

实时监测环境数据是一个非常常见的应用场景&#xff0c;例如气象站、智能家居等。这篇博客将带你使用 ESP32 微控制器和一个 TFT 屏幕&#xff0c;实时显示当前城市的天气信息。通过 OpenWeatherMap API&#xff0c;我们能够获取诸如温度、天气情况以及经纬度等详细的天气数据&…

【书生大模型实战营(暑假场)闯关材料】基础岛:第1关 书生大模型全链路开源体系

【书生大模型实战营&#xff08;暑假场&#xff09;闯关材料】基础岛&#xff1a;第1关 书生大模型全链路开源体系 简介一、背景介绍1.1 背景介绍1.2 全链路开源开放体系的优势 二、全链路开源开放体系的主要特点2.1 模型组件的公开和共享2.2 数据集的公开和共享2.3 模型的互操…

2024年【汽车驾驶员(技师)】报名考试及汽车驾驶员(技师)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 汽车驾驶员&#xff08;技师&#xff09;报名考试是安全生产模拟考试一点通生成的&#xff0c;汽车驾驶员&#xff08;技师&#xff09;证模拟考试题库是根据汽车驾驶员&#xff08;技师&#xff09;最新版教材汇编出…

Paimon实战 -- paimon原理解析

一.简介 Apache Paimon 原名 Flink Table Store&#xff0c;2022年1月在 Apache Flink 社区从零开始研发&#xff0c;Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合&#xff0c;促进数据在数据湖上真正实时流动起来&#xff0c;并为…

打靶记录12——Fawkes

靶机&#xff1a; https://download.vulnhub.com/harrypotter/Fawkes.ova这是个哈利波特系列的靶机&#xff0c;作者和本人都非常喜欢这个系列&#xff0c;因为它的漏洞和利用点都设计得很巧妙。 难度&#xff1a; 高 目标&#xff1a; 取得2个root权限 3 个flag 涉及攻…