我正试图强迫Verilog等待一定数量的时钟周期,然后再进入always
块。要初始化和SD卡,我需要在发送CMD0之前断言CS
至少74个周期,但是我的波形输出显示完全忽略了这个延迟。我尝试展开重复块并将其替换为行为for
循环,但这些都没有帮助。它也忽略了@(posedge writeRDY)
行,所以我认为这不是因为时钟特有的东西。 This is a picture of the waveform output. mosi是SD卡的数据线。
任何关于导致这种情况的想法都将非常感激。
initial begin
cs <= 1'b1;
repeat (80) @(posedge sd_clk);
busy <= 1'b1;
@(posedge writeRDY);
in_buffer <= 48'h800000000095; //CMD0. 80 -> CMD# with b_6 = 1, b_7 = 0. 32'b0 for arg, 8'h95 for CRC (checksum)
@(posedge sd_clk);
cs <= 1'b0;
repeat (8) begin
@(posedge aligned);
end
end
答案 0 :(得分:0)
您的波形不是非常有用,因为您在测试台上显示的信号:cs, sd_clk, busy, writeRDY, aligned,
仅显示sd_clk。
您还没有告诉您正在使用哪种模拟器或工具。
repeat (80) @(posedge sd_clk);
应等待80个时钟周期,但仅限于测试平台。该代码无法合成。
如果它在测试平台中,则您的模拟器不正确。