问题标签 [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.
verilog - 理解 Lattice ICE40 中的 SB_IO 原语
我正在玩clifordwolf/picorv32,并且在理解以下代码段时遇到了一些问题picosoc
(链接到源代码):
我在Lattice iCE40 技术库文档中找到了SB_IO
原语的图形描述,但我仍然无法理解它的用途,因为它对我来说太复杂了无法解释。还有一个问题关于原语的问题,在阅读后我认为它会创建某种双向连接,但我不明白这与使输出引脚“三态”有什么关系。
SB_IO
我将不胜感激在此特定配置下对单元效果的高级描述。哪个引脚连接到哪个引脚?哪些是输入,哪些是输出?实例化这个单元格的目的是什么?
verilog - 让 YOSYS 无法推断块 ram 阵列(而不是使用逻辑单元)verilog ice40
最近一段时间,我在一个使用查找表数组并让 yosys 将它们推断为块 ram 的项目中遇到了麻烦。Yosys 一直认为我的阵列中的一个或另一个应该使用逻辑单元来实现。
例子:
被推断为 IceStorm LC,因此很快超出了我的逻辑单元预算。
我读过一个数组需要有一个注册的输出,或者 Yosys 不认为它是 ram(这是真的吗?)我试图修改一些东西,以便我的数组最终在每个时钟计数时路由到一个寄存器。但我仍然无法让它工作。使用多个阵列,将它们一个一个复制到另一个,并让 yosys 将它们推断为块 RAM 的正确方法是什么?我需要避免什么?
yosys - 了解逻辑块 LC_5 位
我是 yosys 和 arachne-pnr 的新手。这是来自 .asc 和 .icebox_explain 的片段。我无法理解 LC_5 的位是如何从 .logic_tile 1 11 派生的。
例子.v
例子.asc
icebox_example.asc
如何从此流生成 LC_5 0000000000001111 0000?
这是不正确的。你能帮忙和指导吗?
fpga - arachne-pnr 中的 PIP 替代方案是什么?
在浏览router.cc
文件时arcahne-pnr
,我无法理解,可编程互连引脚 PIP 是如何路由的?看起来 PLL 是否代表代码中的 PIP?有人可以帮我弄清楚,什么对应于 PIP in arachne-pnr
?谢谢
verilog - ice40 时钟延迟,输出时序分析
我有一个驱动 ASIC 的时钟和数据输入的 ice40。
ice40 驱动 ASIC 的时钟与驱动 ice40 内部逻辑的时钟相同。问题是上升时钟触发了ice40的内部逻辑并在上升时钟到达ASIC之前几纳秒改变了ice40的数据输出,因此ASIC在其上升时钟观察到错误的数据。
我已经通过使用逆变器链来延迟ice40 的内部时钟而不延迟驱动ASIC 的时钟来解决这个问题。这样,上升时钟在ice40 的数据输出改变之前到达ASIC。但这提出了几个问题:
我的策略——使用逆变器链来延迟ice40 内部时钟——是一个好策略吗?
为了诊断问题,我使用 Lattice 的 iCEcube2 来分析内部时钟和输出引脚之间的最小/最大延迟:
请注意,asic_dataX
延迟比clk_out
延迟短,表明存在问题。
有没有办法从 yosys/nextpnr 获取这些信息?
感谢您的任何见解!
arrays - 在一个写时钟周期内读取多个块 RAM 索引
我有一个应用程序,我以低时钟速度(clk_a)连续写入块内存,并且在这个慢时钟周期内需要以快速时钟速度(clk_b)从块内存读取三个索引以使用这些值作为数学模块中的操作数,结果在下一个慢时钟上写回块 ram。这三个索引是在慢时钟 posedge 写入的当前地址,加上两个直接相邻地址(addr_a -1 和 addr_a +1)。
什么是合成它的有效方法?迄今为止,我最好的尝试是使用一个以快速时钟速率运行的小计数器(三元组)来增加地址,但我最终用尽了逻辑,因为看起来 Yosys 没有正确推断出 ram。对此有什么好的策略?
这是我所拥有的:
yosys - 了解比特流 .bin 文件中 CRAM 位的组织
对于 iCE40 1k 设备,以下是命令“ iceunpack -vv example.bin ”输出的片段我不明白为什么有 332x144 位?我的理解是 [1],CRAM BLOCK[0] 从逻辑块 (1,1) 开始,它应该包含:
- 48 个逻辑块,每个 54x16,
- 14 个 IO 瓦片,每个 18x16
如何计算“332 x 144”?
IO 块和逻辑块位在 CRAM BLOCK[0] 位中映射到哪里?
例如,CRAM BLOCK[0] 的哪些位指示逻辑块 (1,1) 的位和 IO 块 (0,1) 的位?
[1]。http://www.clifford.at/icestorm/format.html
谢谢。
verilog - 在 Verilog 中使用门级描述的 JK 触发器给了我一个计时错误
我还在玩最低的 Verilog 级别(门级)。我发现了这篇文章: https : //electronics.stackexchange.com/questions/390661/is-it-possible-to-create-a-working-jk-flip-flop-using-gate-level-description-in我可以理解这个想法应该可行,我可以解决有一个主从 JK 触发器将其用作分频器。我使用 Icestorm 工具链,Yosys 没有抱怨,但 Next-PNR 给了我这个错误:
错误:由于存在组合循环、时序端口规范不完整等原因,时序分析失败。
这是我的代码:
好吧,如果我问发生了什么,我可以想象答案,我想知道为什么以及如何使它起作用!谢谢大家!
fpga - ICE40 SB_IO 原语的 Xilinx 等效原语?
我在 Verilog 中有一个示例项目,最初是用于 ICE40 FPGA,出于资源原因,我想将其导入 Xilinx FPGA。ICE40 中有一个定义输入/输出端口的 SB_IO 原语。我不太了解它,想知道 Xilinx FPGA 中是否有类似或等效的原语?或者如何将其转化为 Xilinx FPGA 域?
示例代码如下:
请帮忙,谢谢!