ModelSim模拟有效,但FPGA失败。我想念什么?

问题描述 投票:1回答:1

很抱歉,这里似乎没有什么东西,但是我是从FPGA的新事物开始的,到目前为止,我真的很喜欢它,但是这让我发疯了。这是一个块的Verilog代码,原则上应该对8位寄存器执行以下操作:

00000001

00000010

00000100

.....

01000000

10000000

01000000

00100000

module bit_bouncer(clock, enable, bouncer_out);
//INPUTS PORTS
input clock;
input enable;
//OUTPUTS PORTS
output bouncer_out;
//INPUT DATA TYPE
wire clock;
wire enable;
//OUTPUT DATA TYPE
reg [7:0] bouncer_out = 8'b00000001;
//Register to store data
reg direction = 0;

//CODE STARTS HERE
always @ (posedge clock) begin
    if(enable) begin
        bouncer_out = direction ? (bouncer_out >> 1) : (bouncer_out << 1);
        direction <= (bouncer_out == 8'b00000001 || bouncer_out == 8'b10000000) ? ~direction : direction;
    end
end

endmodule

这在仿真中效果很好,但是在FPGA(DE10-Nano板上,如果有兴趣)上失败。我还应该指出,这是由通过FPGA上的PLL的时钟驱动的,然后通过divineByN块。这是divideByN块的代码:

module clk_divn #(
parameter WIDTH = 20,
parameter N = 1000000)

(clk,reset, clk_out);

input clk;
input reset;
output clk_out;

reg [WIDTH-1:0] pos_count = {WIDTH{1'b0}};
reg [WIDTH-1:0] neg_count = {WIDTH{1'b0}};
wire [WIDTH-1:0] r_nxt = {WIDTH{1'b0}};

 always @(posedge clk)
 if (reset)
 pos_count <=0;
 else if (pos_count ==N-1) pos_count <= 0;
 else pos_count<= pos_count +1;

 always @(negedge clk)
 if (reset)
 neg_count <=0;
 else  if (neg_count ==N-1) neg_count <= 0;
 else neg_count<= neg_count +1; 

assign clk_out = ((pos_count > (N>>1)) | (neg_count > (N>>1))); 
endmodule

divideByN也已经在模拟中进行了测试,并且工作正常。我实际上做了一个模拟,其中如果可以的话,dividerByN连接到“ bouncer_block”这样称呼它也可以。

所有内容都可以模拟,但是在现实生活中什么都行不通。...但并非总是这样:P

我希望有人能帮我解决这个问题,因为我真的很想了解更多有关FPGA的知识并使用他们在未来的项目中。

如果您读完所有这些,您真棒,祝您有个美好的一天:)

verilog fpga modelsim quartus intel-fpga
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.