问题标签 [ice40]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vhdl - 模拟器和合成器初始化状态机的区别
我的问题是关于合成状态机中使用的第一个状态。
我正在使用 Lattice iCE40 FPGA、用于仿真的 EDA Playground 和用于合成的 Lattice 的 Diamond Programmer。
在下面的示例中,我生成了一系列信号(该示例仅显示了引用状态机的行)。这在模拟中效果很好;即访问的第一个案例是sm_init_lattice
并产生所需的信号)。但是,合成版本会直接进入sm_end
并停留在那里。结果,输出信号保持低电平。
但是,如果我进行如下更改(用“更改”表示),那么我会得到我需要的一组信号。
任何人都可以解释发生了什么吗?难道我做错了什么?我会很感激任何建议。
fpga - ice40 UltraPlus 移动开发平台
我有一个 Lattice iCE40 UltraPlus 移动开发平台,是从 Digikey 订购的新产品。这有 4 个 iCE40 UltraPlus 设备 (iCE40UP5K-UWG30)
我已经编译了icestorm套件,并在“icestorm/examples/up5k_rgb”中运行了“rgb.v”示例,如下所示。
我已按照“用户指南”设置跳线等。但是,RGB LED 不会发光/褪色。
fpga - 一旦模块不需要 BRAM,如何重用它?
我正在做一个(看似)简单的项目作为学习练习:通过 iCEstick(Lattice iCE40HX-1k FPGA)将基于 SSD1331 的 96x64 PMOD 显示器连接到 PC,这样我就可以通过 USB 发送一些 RGB565 编码的图像以显示在说显示。
问题是,SSD1331 显示器需要一个初始化程序才能进入“清除黑屏”状态。大约有 20 条命令要转移到显示控制器中;长度在 1 到 5 个字节之间变化,总共 44 个字节。
到目前为止,我pwr_on
用 FSM 编写了 Verilog 模块,用于以正确的顺序将命令转换为 PMOD;命令的值定义为localparam
。一切正常,但总有一个但是。我认为所有这些命令常量都存储在 LUT 中(我没有推断任何 RAM 块,所以它们还会去哪里,对吧?),并且 iCE40HX1k 中只有 1,280 个 LUT 可用,其中大约有 100 个 LUT 用于 init 过程大约 150 毫秒,并且在下一次重置之前永远不需要,这似乎是一种浪费。
现在,我可以看到以下方法来处理这个问题:
- 根本不要在 FPGA 中实现初始化序列;相反,通过 USB 发送这些命令。
简单但没那么有趣;毕竟,我正在尝试学习 FPGA 编程,而不是 Linux 驱动程序。 - 充分利用
SB_WARMBOOT
和多配置。
iCE40HX 最多可在 EEPROM 中存储 4 种配置;SB_WARMBOOT
原语基本上可以让您随意在它们之间跳转。我可以在配置 0 中编写 init 过程,一旦完成,就跳转到配置 1 并支持 USB,从而获得一个干净的状态。但是,在配置之间的转换过程中,我需要保持至少 3 个显示 PMOD 引脚(pmod_enable、vcc_enable 和 pmod_rstn)为高电平。我找不到任何方法来做到这一点;如果有人知道,请向我发送正确的方向。 - 将命令数据存储在 BRAM 中。
HX1K 有 16 个 RAM4K 块(每个存储 4096 位),因此即使其中一个也应该为 44 字节的命令数据提供足够的空间,而无需花费宝贵的 LUT。
选项 3 看起来很简单。但是,由于我对我的资源的贪婪,一旦完成初始化,我希望该 RAM4K 块可用于其他任务。现在,在我看来,Verilog 合成器(我正在使用 yosys)完全没有意识到当pwr_on
模块将done
导线拉高时,它所连接的 BRAM 单元可以在推断其他逻辑时被重用。
想到的一种解决方案是将该 BRAM 块分配到一个单独的模块中,用初始化所需的数据填充它并将其连接到pwr_on
模块,然后根据需要将其重新连接到其他模块。然而,由于几个原因,这种方法看起来很难看,因此问题是:我错过了一个技巧吗?我怎么能在一个模块的SB_RAM512x8
配置中使用一个 BRAM 块,然后将它重SB_RAM256x16
用于另一个模块?
verilog - 无法在 Lattice ICE40 FPGA 上创建时钟信号
我正在尝试在 Lattice ICE40 FPGA 上创建 1 Hz 时钟信号。我正在用 Verilog 编写代码并使用 Lattice Radiant 软件。这个 1 Hz 时钟信号将用于创建方波。
但是,我没有得到任何输出,无论是来自时钟信号应该打开的引脚还是来自应该输出方波的引脚。我确定我正在检查正确的引脚。我也确信代码正在下载到板上。我相信 FPGA 出于某种原因实际上并没有创建时钟信号。
这是我的代码:
这是我的综合约束文件(.ldc):
周期以纳秒为单位定义,因此这是一个 1 Hz 时钟。
谢谢你。
io - 无法设置两个 GB_IO 引脚
我使用以下代码设置我的 ICE40HX1K-VQ100 fpga 以输入外部时钟:
这适用于引脚 IOL_6B_GBIN7。
就其本身而言,这很好,但我还需要输入外部事件信号,所以我添加了以下代码:
这是针对引脚 IOR_61_GBIN2。
好吧,这不是很好。我以为这就是原始技术库的意思。如果我只使用 clk 我没问题。cmp 引脚不能用作电线。当我尝试使用上面的代码时,它仍然无法正常工作,并且就像在该引脚上看不到信号一样。
所以,在扭曲我的大脑试图理解文档之后,我不得不大喊UNCLE。有人可以帮我解决这个问题吗?
vhdl - 无法例化 Lattice iCE40 的 PLL
我有 256 BGA 封装的 Lattice iCE40 HX8K FPGA。我想使用可用的 PLL 模块之一将 37MHz 的外部时钟频率转换为内部时钟,以便在 74MHz 的 FPGA 内部使用。
我在 IceCube2 中使用了“配置 PLL 模块”并使用了以下配置: - PLL 类型部分: - 由 PLL 输出驱动的全局网络:1;- 专用时钟垫;- PLL 操作模式: - 无补偿模式;- 附加延迟设置:否;- 频率: - 输入 - 37MHz;- 输出 - 74MHz;- 其他 - 未选择任何内容;
然后我得到两个 VHDL 文件——SO_pll.vhd 和 SO_pll_inst.vhd。我有文件 Design.vhd 我的代码应该去的地方。如果我正确理解 Lattice 文档,我需要指定我的 Design.vhd(它的实体)是顶级模块,我这样做了。我需要在 IceCube2 的设计文件列表中包含 SO_pll.vhd,我这样做了。最后 - 我需要使用 SO_pll_inst.vhd 中提供的模板在我的主代码中通过将 PLL 信号端口映射到我的 Design.vhd 中的信号来实例化 PLL。麻烦来了——怎么办?
我刚刚将 Design.vhd 和 SO_pll.vhd 添加到设计文件列表中。如果我使用 Lattice LSE 运行综合,则综合成功,但布局报告显示使用了 0/2 个 PLL。如果我用 Synplify Pro 布局器运行 Synthesys,报告说使用了 1/2 PLL,但我真的不能使用它,因为我没有映射信号。
当我从 SO_pll_inst.vhd 获取模板并将其放置在 Design.vhd 的体系结构中时,我收到错误消息:“错误 - 综合:design.vhd(19): so_pll is not declared. VHDL-1241”好吧,显然我错过了一些东西。如果它是一个模板,我希望只是映射我的信号并让它运行。但不是。要么我做错了什么,要么......我做错了什么:)请帮忙。
c - 如何使用微控制器对 Lattice iCE40 ultra 进行编程
我正在尝试使用 stm32F4 微控制器对 iCE40 超 FPGA 进行编程,并且我试图弄清楚如何将配置文件加载到微控制器上,以便它可以通过 SPI 发送到 FPGA 进行编程。应用笔记说这可以完成并且有一些伪代码,但它似乎是用于计算机而不是微控制器。微型和 FPGA 都在我设计的 PCB 上,它们之间有一个 SPI 通道。这将在编程后用于两者之间的通信。
配置文件是 .bin 文件或 .hex 文件,我不确定如何将这些文件之一加载到 stm32 并将其发送到 FPGA。我正在尝试这样做,因为我希望不必购买编程电缆并在我的 PCB 上包含闪存来存储程序,因为我已经需要微型和 FPGA 之间的 SPI 通信来实现我希望制作的应用程序事情对我自己来说更容易,并且可能会做相反的事情......
这是我编写的用于发送文件的函数。我知道我需要以某种方式打开文件并将其发送出去。所有其他时序都来自 FPGA 的编程协会。
任何有关加载文件和使用 micro 打开文件的帮助都会有很大帮助。
memory - 在 SB_RAM2048x2 ROM 中加载 .hex 文件并在 BRAM 存储器中加载 .hex 文件
我不知道 iCE40 设备的 SB_RAM2048x2 内存使用情况。我发现iceimage.hex mecrisp-ice 0.8,一个内存初始化文件,正在加载到ram.v中。而ram.v正在其他verilog文件中使用。我想使用 bram 而不是这个 ram.v,这样我就可以在 zynq fpga(zybo board) 中使用 bram。我有点怀疑,是否可以在 zynq fpga(zybo board) 中直接使用 SB_RAM2048x2(在 ram.v 中提到) )? 还是仅适用于 iCE40 设备。
yosys - Yosys 和 Synplify 兼容元素
我想编写可以使用 yosys(首选)或使用 Synplify 的 Lattice Radiant 工具链(例如来自 Lattice 的加密 IP 需要)合成的 verilog。
大多数像 PLL 这样的硬单元在这两种工具之间都有不同的名称。
是否有一个verilog库允许一个人选择一个综合工具,例如一个'define?
fpga - Arachne-pnr 内部时钟参考引脚
我想知道要为 arachne-pnr pcf 文件添加的内部 clk 参考引脚号。我正在为具有 iCE40 HX8k 芯片(由 yosis 和 arachne 支持)的 Alchitry Cu 板进行合成。我无法理解 pcf 文件中的引脚编号与芯片引脚之间的相关性...
如果有人可以给我一个示例 pcf 文件,例如 DFF(使用时钟的东西),我会找出剩余的。我在谷歌搜索过这个,但没有成功。
我在 .gate... 命令上看到了一些参考,但不明白是否应该将它添加到 pcf 文件或其他文件中并编译为 clk 输出。如果是这样,请给我那个命令示例
抱歉,问题很长。任何帮助都感激不尽。
谢谢, 巴拉特