在(常规)软件中,我曾在使用gcc选项-Wall显示所有警告的公司工作.然后他们需要处理.使用Verilog或VHDL中的非平凡FPGA/ASIC设计通常会有许多警告.我应该担心所有这些吗?你有什么特别的技巧可以建议吗?我的流程主要针对FPGA(特别是Altera和Xilinx),但我认为相同的规则适用于ASIC设计,可能更多,因为在构建之后无法更改设计.
2010年4月29日更新:我最初考虑的是综合和P&R(布局布线)警告,但模拟警告也是有效的.
我正在尝试在VHDL中使用具有良好定义的位宽的无符号整数.似乎VHDL不喜欢我试图将文字值分配给定义为:
variable LCD_DATA: unsigned(19 downto 0) := 0;
Run Code Online (Sandbox Code Playgroud)
但是在我的IDE(Quartus)中,我得到一个投诉"UNSIGNED类型与整数文字不匹配".我还抱怨将数字添加到这样定义的类型中.我需要做出的首选改变是什么?
我无法使以下报告语句起作用:
report "ERROR: instruction address '" & CONV_INTEGER(a(7 downto 2)) & "' out of memory range." severity failure;
Run Code Online (Sandbox Code Playgroud)
哪里a是 类型in std_logic_vector(31 downto 0)。
我得到的错误是:
No feasible entries for infix operator "&".
Run Code Online (Sandbox Code Playgroud)
我想打印出一个字符串,连接整数值,然后连接另一个字符串。
我究竟做错了什么?
语境
我正在编写在 NIOS II 处理器上的 uClinux 中运行的代码。FPGA 是 Stratix II。FPGA 设计是由不再在公司的其他人完成的,我不是固件设计师,只是软件程序员。
问题
FPGA 在上电时从闪存器件加载其配置。我已经编写了一个对闪存重新编程的应用程序,但我需要找到一种方法使其重新加载 FPGA 配置,并且我需要通过软件来完成此操作。目前,让 FPGA 重新加载的唯一方法是重新上电,但这在客户的环境中是不可能的。
我正在编写的语言并不真正相关,足以说明我可以轻松地写入已知地址处的硬件寄存器,例如在 Tcl 中:nioswr32 $reg_addr $value我试图找到的是某种我可以的重置寄存器使用。也许是 JTAG 接口?我找到了对 JTAG_UART 的引用,但显然这只是为了通过 JTAG 提供控制台功能。也许有一个硬件看门狗定时器我可以搞乱?
请注意,我不仅仅是尝试重置 NIOS 处理器。我可以使用 busybox 轻松做到这一点,但这不会重新加载 FPGA 固件。
下面是我的标题的副本system.h,我相信它是由 SOPC Builder 生成的,因此您可以看到哪些资源可用。
#ifndef __SYSTEM_H_
#define __SYSTEM_H_
/*
DO NOT MODIFY THIS FILE
Changing this file will have subtle consequences
which will almost certainly lead to a nonfunctioning
system. If you do modify this file, be aware that …Run Code Online (Sandbox Code Playgroud) 我正在使用 Altera 的带有双 Cortex-A9 处理器的 Cyclone V SOC FPGA。嵌入式系统(linux 4.15.7)是用 Buildroot-2018.02 创建的。U-boot 用于加载系统,即 FPGA.rbf 文件、设备树 blob 和 zImage,一切正常。
我现在想将 RBF 文件集成到我的 linux 并从 Linux 对 FPGA 进行编程。我找到了几种方法,我理解的一种最常见的是将 CONFIGFS 与设备树覆盖一起使用。
因此,我更改了我的设备树以集成覆盖、u-boot 引导脚本以禁用 FPGA 加载以及 linux“.config”文件中的以下选项make linux-xconfig:
+CONFIG_OF_OVERLAY=y
+CONFIG_ALTERA_STAPL=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_CONFIGFS=m
Run Code Online (Sandbox Code Playgroud)
这些选项是我经过多次尝试后的状态。
在 make 和重新启动后,一旦加载了内核,我就会在控制台中输入以下命令:
mkdir /config
mount -t configfs none /config
Run Code Online (Sandbox Code Playgroud)
在这种状态下,我希望在 /config 文件夹中看到一些设备树文件,但没有,只有一个 rdma_cm 文件夹:
# ls /config
rdma_cm
Run Code Online (Sandbox Code Playgroud)
我继续阅读这个主题,发现我必须在我的 linux 内核中启用 CONFIG_OF_CONFIGFS 选项。
问题:此选项在我的 linux 内核中不可用。此外,文件drivers/of/configfs.c也不在这里。我徒劳地搜索了如何为我的内核版本启用设备树覆盖。
如何配置我的内核以使设备树在 configfs 中可用?
我想使用 OpenOCD 运行 Altera Cyclone IV IP。无论我需要 quartus 提供什么文件,但执行都应该由 OpenOCD 完成。我目前正在尝试使用 sof 文件来完成此操作。quartus 供程序员使用的。
也欢迎额外的提示来刷新它。
.sof 文件是否适合与 openbcd 一起使用?
我的板子是“Altera Cyclone IV FPGA学习板EP4CE6E22C8N和USB Blaster编程器”品牌是[zrTech]
在 Quartus 中,此配置有时可用于执行它(sof 文件),但并非每次都有效。但当它开始工作时,它会继续这样做:
这就是我目前收集的似乎不错的内容(除了评论):
altera_ep4ce6e22.cfg :
interface usb_blaster
usb_blaster_lowlevel_driver ftdi
transport select jtag
set CHIPNAME ep4ce6mb
set FPGA_TAPID 0x020f10dd
jtag newtap $CHIPNAME tap -irlen 10 -ircapture 0x01 -irmask 0x3 -expected-id $FPGA_TAPID
##no errors but not sure about those
pld init
init
## Some stuff I tried with the errors of the results ###
#pld load …Run Code Online (Sandbox Code Playgroud) 我实际上是在创建一种控制屏幕上光标的新方法.现在我有一个Altera Stratix iv FPGA,我希望它能通过USB向计算机发送信息并控制光标.
这是可行的,有没有人知道类似的东西?这最终会是什么样的?我意识到我可能必须在机器上编写一些侦听端口并移动鼠标的代码,我很好,但是可以使用FPGA上的代码移动鼠标吗?
谢谢!
我正在尝试从命令行在Linux(Kubuntu 12.04 LTS)上使用Quartus II 13.0(免费Web软件包)从Verilog RTL生成Verilog技术网表。在一个项目中,我需要此项目,在该项目中,我将针对数千个生成的Verilog文件的不同工具生成的综合结果进行比较。因此,使用GUI并不是真正的选择。
例如,对于Xilinx Vivado,我可以使用以下TCL命令执行此操作:
read_verilog input.v
synth_design -part xc7k70t -top top_module
write_verilog output.v
Run Code Online (Sandbox Code Playgroud)
我使用过的大多数ASIC工具都提供类似的接口。
使用Xilinx XST,它会变得更加复杂:
1.)生成work.xst文件:
run -ifn work.prj ..some..more..options..
Run Code Online (Sandbox Code Playgroud)
2.)生成work.prj文件:
verilog work "input.v"
Run Code Online (Sandbox Code Playgroud)
3.)运行综合:
xst -ifn work.xst
Run Code Online (Sandbox Code Playgroud)
4.)从verilog二进制文件生成verilog网表:
netgen -w -ofmt verilog work.ngc output
Run Code Online (Sandbox Code Playgroud)
但是对于Quartus II,我根本找不到任何有关如何使用命令行工具的文档。我所能找到的只是图形化IDE界面的文档。也许我只是在错误的地方寻找?
因此,在我开始使用strace和类似工具戳Quartus II IDE之前:是否有人从命令行使用Quartus II,并且可以向我指出正确的方向?
我设法在Nios 2 Altera DE2板上运行了一个复杂的项目,在其中我使用输入和输出使用汇编和C代码创建了一个计时器。使用Nios 2 IDE,我可以将项目下载到DE2 FPGA,并且时钟按预期运行。但是我不了解有关编程模型的所有知识,并且还试图了解IDE附带的基本Hello World示例和诊断示例。
Hello World示例只是
/*
* "Hello World" example.
*
* This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
* the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example
* designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT
* device in your system's hardware.
* The memory footprint of this hosted application is ~69 kbytes by default
* using the standard reference design. …Run Code Online (Sandbox Code Playgroud) 我是FPGA的新手.我一直在做一些简单的测试,我发现了一个我不完全理解的问题.
我有一个50MHz的时钟源.
我有一个信号定义为:
SIGNAL ledCounter : integer range 0 to 25000000 := 0;
Run Code Online (Sandbox Code Playgroud)
当ledCounter达到25,000,000时,我切换LED并重置计数器.这在FPGA上直接起作用.
IF (rising_edge(CLK)) THEN
ledCounter <= ledCounter + 1;
IF (ledCounter = 25000000) THEN
ledCounter <= 0;
toggle <= not toggle;
LED(0) <= toggle;
END IF;
END IF;
Run Code Online (Sandbox Code Playgroud)
当在ModelSim内部运行时,当计数器达到25000000时,我得到一个错误.为了在模拟器中运行,我必须将范围定义为:
SIGNAL ledCounter : integer range 0 to 25000001 := 0;
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会这样?代码在FPGA上运行良好,但如果没有上述修改,则无法在模拟器中运行.
编辑:modelsim错误是非描述性的:由于致命错误无法继续.HDL呼叫序列.停在C:/Users/robert/Documents/fpga/testsim/test.vhd 20 Process line__17