我对FPGA和Verilog还很陌生,但我的代码在模拟器中运行时遇到了问题。似乎Isim模拟器并没有在我的代码中对整数进行"操作"。下面是相关代码的一个片段。我试图通过每当整数I达到10时切换SCK_gen来划分clk脉冲。当我在Isim中运行此代码时,SCK_gen从不更改值。此外,当我在FPGA上实现代码时,它的行为正如我所期望的那样,我可以观察到时钟频率为1/10的脉冲。如果有人能给我指明正确的方向,我将不胜感激。感谢
//signals
//for SCK_clock
reg SCK_gen, SCK_hold;
integer i;
reg en_SCK;
wire neg_edge_SCK;
//SCK_generator
always @(posedge clk, posedge reset)
if (reset)
begin
SCK_gen <= 0;
end
else
begin
i <= i+1;
SCK_hold <= SCK_gen;
if(i == 10)
begin
SCK_gen <= ~SCK_gen;
i <= 0;
end
end
//detect neg edge of SCK
assign neg_edge_SCK = SCK_hold & SCK_gen;
如果任何操作数为"x",则任何算术或逻辑相等运算的结果都是"x"。由于看起来i
没有初始化,语句i <= i+1
对i
没有影响,因此比较(i == 10)
将始终为false。