这里是verilog的新手。
Ice40 有一个 RGB LED 驱动器,也可以分配为普通 IO。
尝试访问该引脚而不将其设置为 IO 将给出此错误一个 IceCube2
受限 IO 放置期间出错 E2792:实例 ipInertedIOPad_LED_B 错误地约束在 SB_IO_OD 位置
为此,使用以下verilog:
SB_IO_OD #( // open drain IP instance
.PIN_TYPE(6'b011001) // configure as output
) pin_out_driver (
.PACKAGEPIN(LED_B), // connect to this pin
.DOUT0(ledb) // output the state of "led"
);
所以最终的verilog代码看起来像(简化为1个led):
module top (output LED_R, output LED_G, output LED_B);
reg ledb = 0;
reg [3:0] cnt;
SB_IO_OD #( // open drain IP instance
.PIN_TYPE(6'b011001) // configure as output
) pin_out_driver (
.PACKAGEPIN(LED_B), // connect to this pin
.DOUT0(ledb) // output the state of "led"
);
always
begin
ledb = ~cnt[2];
end
always @(posedge clkout)
begin
cnt <= cnt + 1;
end
endmodule
它确实有效。
但是,我将 led 分配在一个 always 块中,据我所知,这是顺序的。将ledb分配为电线的“正确”方式是否与SB_IO_OD不兼容。
这是正确的方法吗,还是有一种非顺序的方式来分配led,基本上不在always块中分配。