邢台手机网站建设费用,宁波市鄞州区建设局网站,彩票类网站开发,互诺科技做网站怎么样最近收到了一个 Tang nano 9K FPGA开发板#xff0c;就想借此机会研究一下。
官方文档里介绍如果想使用高云的 FPGA#xff0c;就需要使用 GOWIN IDE#xff0c;但是需要申请 license 提交一堆资料#xff0c;我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学…最近收到了一个 Tang nano 9K FPGA开发板就想借此机会研究一下。
官方文档里介绍如果想使用高云的 FPGA就需要使用 GOWIN IDE但是需要申请 license 提交一堆资料我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学习和投入生产因为 IDE 忽略了很多细节以及对一些工作做了处理。所以就想找到其他的工作流程就像可以使用任何文本编辑器加上 Clang/LLVM 就可以编译 C/C 程序一样。 FPGA开发是在开发什么
首先是需要知道FPGA 开发到底是在开发什么这样才能找到需要的工具和软件。
计算机械执行各种指令的本质是给一系列逻辑单元的引脚通电然后经过逻辑电路之后输出新的电路信号。从软件的层面来说每个引脚的输入就是一个常见到的一串二进制数字比如01011101010中的一位一般使用的正逻辑中1表示高电平0表示低电平早期的打孔板就是实体版的这种二进制数字。也就是说最终我们需要的是一个存放二进制指令的文件然后由 FPGA 执行。
这时候还有一个问题指令怎么知道接口和针脚谁是谁呢不知道的话是没有办法弄到正确的二进制指令的因为一些指令的操作对象就可能是错误的。 接口和针脚本质是一些数字表示的需要通过这些数字来标识所以我们还需要标识对应接口和针脚的文件。
简而言之开发 FPGA 就是编写两个文件xxxx.v和xxxx.cst。
.v文件里存放的是 Verilog 语言的代码用来连接电路中的各种门、寄存器以及一些硬 IPhard intellectual property。.cst文件里存放的是引脚约束文件用来表示 FPGA 开发板上每个引脚的作用和电压。
然后再通过一些工具最后将其转换成存放了一堆位bit的文件称之为比特流文件来控制各部分的连接、工作等。不同 FPGA 厂商使用的文件格式不一样。这里 Tang nano 9K 使用的文件后缀为.fs内容如下 安装和配置需要的工具
前提
你需要有Python 3.8 或更新的版本因为生成比特流需要使用一个 Python 脚本。Mac 一般回预装 Python你只需要检查和更新版本即可。
工具链 OSS CAD Suite
接下来使用需要 OSS CAD Suite这是一个工具链可以将xxxx.v和xxxx.cst转换成最终的比特流文件有点像编译器或者说交叉编译里的工具链最后将其写入 FPGA。 这个套件包含了很多 FPGA 的工具一般目录名或程序名带gowin的便是这里 Tang Nano 系列所需的。但其实可以只安装 Gowin FPGA 芯片所需的工具的不过 OSS CAD Suite 不光终端可以使用VS Code 也可以使用所以使用 OSS CAD Suite 比较方便两头使用如果你使用其他 FPGA 的话也可以减少安装新的工具链。 OSS CAD Suite 下载地址为https://github.com/YosysHQ/oss-cad-suite-build/releases/latest
如果你使用最新的 OSS CAD Suite 构建时出现下列这种错误那么建议下载 2023 年 2 月或 3 月的版本版本更新特别快基本上几天就一版随便哪天的都行
gowin_pack -d GW1N-9C -o rio.fs rio_pnr.json
Traceback (most recent call last):
File /opt/oss-cad-suite/libexec/gowin_pack, line 33, in
sys.exit(load_entry_point(Apycula0.8.2a1, console_scripts, gowin_pack)())
File /opt/oss-cad-suite/lib/python3.8/site-packages/Apycula-0.8.2a1-py3.8.egg/apycula/gowin_pack.py, line 984, in main
AttributeError: module importlib.resources has no attribute files
make: *** [Makefile:16: rio.fs] Error 1然后将 OSS-CAD-Suite 中bin的路径放到环境变量PATH中你可以放到你的 Shell 配置文件中。语句如下
export PATH存放位置/oss-cad-suite/bin:$PATH然后使用source激活更新或者新开一个终端窗口即可。
只安装 Gowin FPGA 需要的工具链
Tang Nano 使用的 Gowin FPGA 芯片它的比特流和格式的工具在 Apicula 项目中这是地址https://github.com/YosysHQ/apicula。如果你需要阅读文档那么也在这个项目中。
安装方法如下
$ pip3 install apycula如果你想简洁安装那么可以使用这种方法。这样下载安装的包体积会小特别多4.1 MB 对 1.35 GB但是万一开发过程中需要使用其他的工具那么就得自己再去单独下载这些工具了。
文本编辑器 VS Code
编写代码这里使用 Visual Studio Code当然你使用任何文本编辑器来编写代码比如 Vim、Emacs 等。但是不能使用 Word、Pages 这种应用程序因为这种应用程序实际上并不是文本编辑器而是文本处理器在底层并不是简单的文本。
这里使用 Visual Studio Code 的原因主要是扩展会高亮代码和方便设置针脚以及构建最终的比特流文件必须要使用一个插件来自动构建。所以需要安装两个扩展Lushay Code和Verilog-HDL/SystemVerilog/Bluespec SystemVerilo。Lushay Code是为了使用 OSS-CAD-Suite这是一个自动构建工具而后者是为了高亮代码和方便设置针脚。如果Lushay Code不支持你的 FPGA那么还请找一下支持自己 FPGA 的扩展插件。
此外要配置一下扩展在“设置-扩展”中将你的 OSS-CAD-Suite 位置输入到下图位置这样 VS Code 才可以使用 OSS-CAD-Suite 示例代码让板载 LED 逐个亮起
这里有两个文件top.v和tangnano9k.cst内容分别如下需要注意top.v最后需要有一个空行
// top.v
module top
(input clk,output [5:0] led
);localparam WAIT_TIME 13500000;
reg [23:0] clockCounter 0;
reg [5:0] cur_state 6b111111; // 这个六位二进制数的每一位都表示一个 LEDalways (posedge clk) beginclockCounter clockCounter 1;if (clockCounter WAIT_TIME) beginclockCounter 0;cur_state cur_state 1;if (cur_state 6b000000) begincur_state 6b111111;endend
endassign led[5:0] cur_state[5:0];endmodule
// tangnano9k.cst
IO_LOC clk 52;
IO_PORT clk PULL_MODEUP;IO_LOC led[0] 10;IO_LOC led[1] 11;IO_LOC led[2] 13;IO_LOC led[3] 14;IO_LOC led[4] 15;IO_LOC led[5] 16;
如果你的tangnano9k.cst是用 VS Code 设置的那么应该如下 构建项目
使用 VS Code 构建
这种方法很简单如果你之前配置好了 VS Code并且也已经将你的 FPGA 连接到 Mac 上直接按照下图的顺序点击等一会儿fs文件就已经构建好并且将其烧录到 FPGA 上了 使用终端构建
这部分划成两节第一节详细介绍了每一步的使用和原由第二节则将其整理成一个脚本这样就方便许多了。
逐步来说
首先进入yosys输入按回车页面如下
然后输入以下命令
# 读取分析top.v的内容read -sv top.v
# 将top.v的内容合成转换为json格式由于yosys已经分析了文件所以不用文件名top.v而是模块名topsynth_gowin -top top -json test.json
# 退出yosysexit当然上面这部分可以化简成一句话
$ yosys -p read_verilog top.v; synth_gowin -json test.json然后使用下面的命令来进行进一步的工作
# 通过设置设备名、CST文件和刚才生成的 JSON 文件来生成 FPGA 布局和布线信息并且放入 test_pnr.json 中。
$ nextpnr-gowin --family GW1N-9C --device GW1NR-LV9QN88PC6/I5 --cst tangnano9k.cst --json test.json --write test_pnr.json上面的家族名和设备名需要根据你自己的 FPGA 型号进行修改如果不是 Tang nano 9K 的话可以不写--family这个选项这个型号不是官网上短的那种。你可以在自己 FPGA 芯片封装上看到比如下图就是 Tang nano 9K 的设备名GW1NR-LV9QN88PC6/I5
也可以根据下面的表格进行查找
名称设备名(device)板子的名称(board)Trenz TEC0117GW1NR-UV9QN881C6/I5tec0117Sipeed Tang Nano:GW1N-LV1QN48C6/I5tangnanoSipeed Tang Nano 1KGW1NZ-LV1QN48C6/I5tangnano1kSipeed Tang Nano 4KGW1NSR-LV4CQN48PC7/I6tangnano4kSipeed Tang Nano 9KGW1NR-LV9QN88PC6/I5tangnano9kSeeed RUNBERGW1N-UV4LQ144C6/I5runberDisasm honeycombGW1NS-UX2CQN48C5/I4honeycomb
接下来需要注意如果你和我一样是 Tang nano 9K那么使用下面的语句设备不能写上面那个长的
$ gowin_pack -d GW1N-9C -o top.fs test_pnr.json如果你是其他型号的 Gowin FPGA那么使用
$ gowin_pack -d 你的设备型号 -o top.fs test_pnr.json然后就是将比特流文件烧录到 FPGA 上
openFPGALoader -b 板子的名字 pack.fs这个板子的名称在上面的表格里可以看到对应的。如果你看到类似下面的内容那么就是烧录成功了
然后就可以看到这样的现象 写个脚本
这里搞点生产力我们将其写成脚本来实现“一步生成和烧录”你可以根据自己的型号进行修改.
新建一个空白文本文件build.sh然后输入
#!/bin/bashDEVICEGW1NR-LV9QN88PC6/I5|tangnano9k
BOARDtangnano9kyosys -p read_verilog top.v; synth_gowin -json temp.json
nextpnr-gowin --family GW1N-9C --device GW1NR-LV9QN88PC6/I5 --cst tangnano9k.cst --json temp.json --write test_pnr.json
gowin_pack -d GW1N-9C -o top.fs test_pnr.json
openFPGALoader -b $BOARD top.fs然后使用下面的语句赋予运行权限
chmod x build.sh这样只用./build.sh就可以在当前目录下进行构建和烧录了。
扩展阅读
FPGA 是数电的一个分支FPGA 学习过程中需要了解很多数电的术语和概念所以可以使用数电专业的专业书来做一些入门这对后续学习也有帮助。这里推荐剑桥大学的这些资料 这些资料对于非数电专业的人士来说是一些不错的资料。其中很多知识点并不是问题初高中都学过主要是国内中学时期使用的是苏联式的符号而绝大部分资料使用的都是美式符号或者现在的国标符号所以如果你直接看电路图可能会看不懂。
如果你和我一样是 FPGA 新手那么关于 FPGA 的一些术语会让人头大。比如说 Verilog 是什么硬 IP 又是什么针对这些 FPGA 的术语和概念我推荐看看 Intel 联合出版的一本书《FPGAs for Dummies》你可以很轻松的在搜索引擎中通过“FPGAs for Dummies PDF”找到《FPGAs for Dummies》的封面如下图
这本书用非常轻松的语言介绍了你准备踏入 FPGA 领域所需的术语、语言、设计思路、发展历程、应用等各方面的知识以及最基础的那个问题为什么你要使用 FPGA。 《XXX FOR DUMMIES》是一个系列书籍致力于用诙谐、简单的语言介绍技术类似《十分钟学会xxx》但是作者有一些事业内蛮厉害的人。这个系列并不是 Intel 的只是 FPGA 这本是 Intel 合作的。 关于 tang nano 9k 还有国外写的很不错的专栏介绍了很多案例和用法上文中提到的 Lushay Code 插件就是这个团队做的https://learn.lushaylabs.com/getting-setup-with-the-tang-nano-9k/
然后就是 YosysHQ 一些项目的代码和文档了比如说上文提到的
OSS CAD Suitehttps://github.com/YosysHQ/oss-cad-suite-buildProject Apiculahttps://github.com/YosysHQ/apiculanextpnrhttps://github.com/YosysHQ/nextpnr
希望能帮到有需要的人