问题标签 [yosys]
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.
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
用于另一个模块?
yosys - Vivado 无法识别 Yosys 生成的 EDIF 文件中的单元格
我正在尝试使用 Yosys 生成一个 edif 文件,然后将其与 Vivado tcl 脚本一起用于为 Artix 7 (xc7a15t) FPGA 生成比特流。但是,Vivado 似乎对 edif 文件中的一些单元格有问题。
当我在 Vivado 中完全使用相同的 verilog 和约束文件时,比特流创建得很好,当我将它加载到 FPGA 上时它按预期工作。
我已经根据此处的示例对我的工作流程进行了建模。
具体来说,我使用以下 shell 脚本作为 yosys 和 Vivado 命令的前端:
run_yosys.ys:
run_vivado.tcl
top.v(简单的闪烁示例):
顶部.xdc:
Vivado tcl 命令opt_design
生成以下错误:
我得到了同样的错误 cell 'VCC'
。
我在调用时也会收到与此相关的警告link_design
:
我在这里错误地使用了 Yosys 吗?什么是正确的流程?我是 Yosys 的新手,如果我遗漏了一些明显的东西,请原谅我。
我正在使用 Yosys 0.8+147 和 Vivado 2017.2
yosys - 奇怪的 RTL 输出
[Yosys 0.8]
我的一位同事向 Yosys 扔了一些随机的verilog 代码,看看它是如何反应的。
这里是:
和 Yosys,带有命令yosys -o synth.v x.v
抛出:
一些结构最终变得复杂。上面的这个结果代码不能被最近的verilog编译器编译,而原来的代码可以。
为什么always @({ }) begin
构造和空always @* begin
?有没有我们错过的选项?
谢谢
vhdl - 用 Yosys 合成 verilog
我想为 ASIC 标准单元库合成一个 vhdl 设计,以找到电路面积要求。我如何使用 Yosys 为虚拟硅 (VST) 标准单元库 UMCL18G212T3 或 UMC L180 0.18µm 做到这一点?Yosys 支持 vhdl 代码还是我需要用 verilog 编写它?
yosys - iCE40 IceStorm FPGA:双向 IO 引脚上的可切换上拉
如何将可切换的上拉电阻添加到三态引脚?
icestudio 中有“Tri-State”和“Pull-Up”积木。我想将它们组合成一个“带上拉的三态”块,该块有另一个输入,允许启用或禁用上拉(当然,如果三态处于输入模式)。
只需使用一个信号 ('pu') 而不是一个常量,如下所示:
导致非常量值错误并且不合成。
它应该合成并提供另一个输入“pu”,允许设置上拉的状态(1 = 启用/打开或 0 = 禁用/关闭)。
如果这种行为是不可能的,是否有另一种方法(工作循环)来获得可切换的引体向上?
yosys - Yosys:获取盖茨/晶体管数量
我是 Yosys 和综合的新手,但我想要实现的是在设计单元经过综合后获得门和晶体管的数量。我该如何做到这一点?
verilog - 如何删除自动生成的 YOSYS 评论?
当我使用 YOSYS 合成我的 verilog 代码时,生成的网表包含如下注释:(* src = "counter.v:6" *)。我想获得一个没有这些注释的网表文件。
这是我的counter.v
这是我的 YOSYS 脚本counter.ys
:
这是输出文件netlist.v
delay - 使用 YOSYS 进行表征
有没有办法使用 YOSYS 获得映射电路的面积、能耗或时间延迟?
这是我的合成脚本:
verilog - 分段错误:使用 yosys 编译时出现 11
我正在尝试实现一个 Verilog 模块,该模块使用 Yosys SB_SPRAM256KA 块写入 Lattice UP5K SPRAM 硬件内核。请注意,关于此黑盒块的使用的文档/示例很少或没有。主要目的是在音频数字系统中实现回声或延迟。
我有两个时钟,即帧时钟lrclk
和位时钟bclk
,请注意,每个帧时钟周期都有 64 个位时钟周期。
我尝试使用 中的敏感度列表,blck
在 SPRAM 中循环读/写过程。我实现了一个状态机:
- S1:将输入数据放入RAM的输入端口,使能write_enable信号,并将写指针设置为RAM地址。
- S2:(应该写入的数据)禁用 write_enable 信号并将读取指针设置为 RAM 地址。
- S3:(数据应该加载到 RAM 的输出缓冲区)。设置来自 RAM 输出缓冲区的模块输出并重置状态机。
这是模块代码:
我希望在系统时间或实现的错误行为上出现错误,但我得到了这个 Yosis 错误: