这可能更像是一个 iCEstick 问题而不是一个 yosys 问题,但在这里问,因为我使用的是 Icestorm 工具链。
我想指定我的设计的启动行为,互联网上的各个地方似乎都同意与通常命名的rst
信号有关。对我来说,这样的信号来自哪里并不明显,所以我深入研究了通电序列。目前的理解来自本文档中的图 2 。
CDONE
被设备拉高后,所有的内部寄存器都被复位到某个初始值。现在,我找到了大量关于每种类型的触发器或硬 IP 如何接收复位信号并对其内部状态进行操作的 lattice 文档,但我仍然不太明白我如何指定这些状态是什么(或甚至只知道它们是什么,所以我可以使用它们)。
例如,如果我想在上电后(并且仅在上电后)将 LED 拉高 1 秒钟,我想在此复位信号(无论它是什么)禁用后启动一个计数器。
浏览ice40系列数据表和 Lattice 网站,我发现了这个关于使用 Global Set/Reset signal 的文档。我确认GSR
在家庭数据表中提到了这一点,在第 2-3 页的“时钟/控制分配网络”下引用。全局复位信号似乎可由全局缓冲区之一使用,GBUF[0-7]
并且可以通过全局/高扇出分布网络路由(最多 4 个)到所有 LUT。
这似乎正是我所追求的,但我找不到任何其他关于如何在我的设计中使用它的信息。使用 GSR 的文档指出,您可以像这样实例化本机 GSR 组件:
GSR GSR_INST (.GSR (<global reset sig>));
但我不知道这是否只是为了模拟。我是完全走错了方向还是只是错过了什么?我对 FPGA 和硬件非常缺乏经验,所以我的整个方法完全有可能存在缺陷。