为了测试我的 Chisel 设计,我将Icarus与cocotb一起使用。但是,如果在 verilog 模块代码中没有明确询问 Icarus 不会生成 VCD 跟踪,如下所示:
`ifdef COCOTB_SIM
initial begin
$dumpfile ("my_module_name.vcd");
$dumpvars (0, my_module_name);
#1;
end
`endif
Run Code Online (Sandbox Code Playgroud)
为了在每次生成 chisel 模块时添加此内容,我编写了一个名为cocotbify.py 的Python 小脚本,在生成的模块下“注入”此代码。
同样,要添加一些 systemVerilog assert()/assume() 以使用yosys-smtbmc进行正式检查,我必须在生成的每个 verilog 模块下“注入”代码。我还破解了一个名为smtbmcify.py的小 python 脚本来注入我的断言/假设代码。
我意识到这是一个 hack,但我找不到直接在 Chisel 模块下执行此操作的好方法。我知道有BlackBox,但我不想实例化子模块,并且函数 setInline 创建第二个 verilog 文件(我想直接在模块中写入)。
我在 Chisel scala 代码中看到了一种名为ChiselAnnotation的类型,但我不确定这是要使用的东西,我现在不知道如何使用。
我发现使用iverilog进行模拟是一种不太合适的方法,我可以模拟不能合成的设计,相反的设计不仅可以合成,而且可以在物理硬件上按预期工作,不会与iverilog合成进行仿真.
我理想的做法是采用yosys(一个blif文件)的输出并创建一个我可以更有信心的模拟波形(vcd).
我想弄清楚如何在我的 iCE40HX-8K 分线板上使用块 RAM。我想以 512x8 的配置访问它,据我从文档中得知,IceStorm 项目支持它,但我无法让它像我预期的那样工作。
如果我理解正确,在 READ_MODE 参数设置为 1 的情况下初始化 SB_RAM40_4K 原语应该将块设置为 512x8 读取模式,该模式使用 9 位读取地址,并在每个地址读取 8 位数据。
这是我能想到的最简单的例子。它设置了一个带有一些预初始化内存的 SB_RAM40_4K,并直接读取板载 LED 的引脚。
hx8kboard.pcf
set_io leds[0] B5
set_io leds[1] B4
set_io leds[2] A2
set_io leds[3] A1
set_io leds[4] C5
set_io leds[5] C4
set_io leds[6] B3
set_io leds[7] C3
set_io clk J3
Run Code Online (Sandbox Code Playgroud)
顶.v
module top (
output [7:0] leds,
input clk
);
//reg [8:0] raddr = 8'd0;
reg [8:0] raddr = 8'd1;
SB_RAM40_4K #(
.INIT_0(256'h00000000000000000000000000000000000000000000000000000000_44_33_22_11),
.WRITE_MODE(1),
.READ_MODE(1)
) ram40_4k_512x8 ( …Run Code Online (Sandbox Code Playgroud) 从高层次的角度来看,使用Yosys定位新设备需要什么?我想针对Xilinx XC9572XL.我有一个这样的开发板:XC9572XL-CPLD-development-board-v1b.此CPLD的架构在此处的Xilinx文档中得到了很好的介绍.
我想我需要做以下事情:
看起来很可能.困难在于构建一个"更健康"的工具.该工具需要了解CPLD的资源,然后需要一些聪明的算法来适应设计并以JEDEC格式输出所需的熔丝.一个导入缺失的部分是物理CPLD中的"熔丝"与JEDEC文件中的熔丝之间的映射.这必须是逆向工程.我注意到Xilinx WebPACK ISE的JEDEC文件包含46656个保险丝.其中每个都映射回CPLD中的某个可配置节点.
我想知道其他人对这种方法的看法.我可能会遇到哪些类型的问题?
如果我要这样做,我需要考虑哪些法律方面的问题?如果我决定要对他们的工具生成的JEDEC文件进行逆向工程,我是否应该首先写信给Xilinx并寻求他们的许可?
XC9572XL是一个过时的部分......
我有一块莱迪思 ICE40_8K 分线板,想知道如何将引脚对设置为 LVDS 模式输入。
如果设置为普通单引脚是这样完成的:
SB_IO #(.PIN_TYPE(6'b0000_00)) _io (
.PACKAGE_PIN(pin),
.INPUT_CLK(clk),
.D_IN_0(rd));
Run Code Online (Sandbox Code Playgroud)
如何将其修改为 LVDS 输入引脚,以及如何分配附加引脚。
谢谢
编辑:
会是这样吗?:
SB_IO #(.PIN_TYPE(6'b0000_00), .IO_STANDARD("SB_LVDS_INPUT")) _io (
.PACKAGE_PIN(pin),
.INPUT_CLK(clk),
.D_IN_0(rd));
Run Code Online (Sandbox Code Playgroud)
我知道 LVDS 输入仅在第 3 行中,谁能指出我对第 3 行的引脚列表是什么,所以我可以选择一个...
谢谢
我想编写自己的Yosys综合脚本。首先有什么好的模板?手册和网页包含各种示例,但没有“权威”的问候示例。
这可能是一个iCEstick问题,而不是yosys问题,但是由于我使用的是Icestorm工具链,所以在这里提出了问题。
我想指定设计的启动行为,互联网上的各个地方似乎都同意这种启动行为与通常命名的rst信号有关。对于我来说,这种信号的来源并不明显,所以我深入研究了通电序列。当前的理解来自本文档中的图2 。
CDONE器件将其拉高后,所有内部寄存器均已复位为某个初始值。现在,我已经找到了大量关于每种类型的触发器或硬IP如何接收复位信号并对其内部状态进行处理的点阵文档,但我仍然不太了解如何指定这些状态(或甚至只知道它们是什么,所以我可以使用它们)。
例如,如果我想在通电后(且仅在通电后)将LED高电平显示1秒钟,那么我想在此复位信号(无论它是什么)禁用后启动一个计数器。
在ice40系列数据表和Lattice站点上浏览时,我找到了有关使用Global Set / Reset信号的文档。我确认GSR在系列数据表中对此进行了提及,该数据表在第2-3页的“时钟/控制分配网络”下引用。全局复位信号似乎可由全局缓冲器之一使用,GBUF[0-7]并且可以通过全局/高扇出分配网络路由到所有LUT(最多4个)。
这似乎和我追求的完全一样,但是我找不到有关如何在设计中使用此信息的其他信息。有关使用GSR的文档指出,您可以像这样实例化本机GSR组件:
GSR GSR_INST (.GSR (<global reset sig>));
Run Code Online (Sandbox Code Playgroud)
但是我不能说这是否只是为了模拟。我在这里完全是朝错误的方向前进还是只是缺少一些东西?我对FPGA和硬件没有足够的经验,因此我的整个方法完全有缺陷。
当我使用 Yosys 和 arachne-pnr 合成一个空电路时,我得到了一些不规则的位:
\n\n.io_tile 6 17\nIoCtrl IE_1\n\n.io_tile 6 0\nIoCtrl REN_0\nIoCtrl REN_1\nRun Code Online (Sandbox Code Playgroud)\n\n这些也是我迄今为止可以生成的所有其他文件的一部分。由于未使用的 I/O 块同时设置了 IE 位,因此我将其读作:
\n\n但是,根据文档,没有 IE/REN 块 6 17 0。\n这些位的含义是什么?如果因为块不存在而未设置块 6 17 0 的 IE 位,为什么其他不存在块的位也未设置呢?其他 IE/REN 块似乎对应于 I/O 块 6 0 1 和 7 0 0。这些块的作用是什么?为什么它们总是配置为输入?
\n\n技术库条目SB_IO没有提及 IE 位。与PIN_TYPE参数设置有何关系?
当我使用 I/O 引脚作为输入时,REN 位被设置(上拉电阻被禁用)。这表明上拉电阻主要是为了防止未使用的引脚浮动,而不是为有条件连接的输入(例如按钮)提供上拉电阻。这个假设正确吗?使用内部上拉电阻可以达到这个目的吗? …
我想通过分解常见参数来使我的 Yosys 脚本更加 DRY,例如在以下示例中:
read_liberty -lib /long/path/to/lib/file
...
dfflibmap -liberty /long/path/to/lib/file
...
abc -liberty /long/path/to/lib/file
Run Code Online (Sandbox Code Playgroud)
我还没有找到声明或取消引用变量的方法,有没有像 TCL ( set lib_file /long/path/to/lib/file) 或 Bash ( export lib_file=/long/path/to/lib/file) 那样的方法?
有没有办法将参数(或命令行参数)传递给 Yosys 脚本?
我在这个问题中看到(我们可以在 Yosys 脚本中有变量吗?)您可以在 TCL 解释器中运行 Yosys 脚本。有什么方法可以传递参数吗?
我这样做的原因是我有一个脚本,我希望能够使用 Verilog 文件的参数化路径调用该脚本。当然,这是一个常见的需求,必须有一些简单的方法来做到这一点,但我没有看到。