我还没有解决方案,但
第 12 页的 iCE40ProgrammingandConfiguration.pdf http://www.latticesemi.com/view_document?document_id=46502说:
初始上电时,起始地址始终为 0x00_0000。在等待八个额外的时钟周期后,iCE40 设备开始从 SPI PROM 读取串行数据。
所以看起来从 0 开始编写 .bin 文件应该可以工作。
我已经尝试使用icecube2附带的iceutil程序员进行编程,如iCEblink40HX1KEvaluationKitUsersGuide.pdf
http://www.latticesemi.com/view_document?document_id=45922中所述
FPGA 比特流配置文件 所需的比特流图像是 iCEcube2 项目的一部分。比特流的多个版本存储在 _Implmnt\sbt\outputs\bitmap 目录中。比特流的原始十六进制版本称为 _bitmap.hex。相同信息的替代格式是名为 _bitmap_int.hex 的 Intel 十六进制文件。原始十六进制命令示例 /iceutil -d iCE40 -res -cr -m M25P10A -fh -w _bitmap.hex 英特尔十六进制命令示例 /iceutil -d iCE40 -res -cr -m M25P10A -fi -w _bitmap_int.hex
我认为我的文件应该被编程为二进制文件,使用 -fb
iceutil -d iCE40 -res -cr -m M25P10A -fb -w <my path>/example.bin
这似乎已经编程,capsense 演示停止在板上工作,红色电源 LED 亮起,黄色“完成”LED 亮起,iceutil 工具说:
对闪存设备进行部分擦除将文件 /example.bin 写入闪存设备写入闪存的字节数:32220
但是,示例文件应该输入 1 和 10,并在 11 上产生输出。那是行不通的。所有的 LED 灯都暗淡地亮着,这似乎是错误的。
// example.v
module top (input a, b, output y);
assign y = a & b;
endmodule
# example.pcf
set_io a 1
set_io b 10
set_io y 11
我已经尝试使用 iceutil 对 capsense 演示进行编程,并且效果很好。
开始看起来我不能将 yosys 二进制文件与 iceutil 程序员一起使用,除非我使用了错误的语法。