FPGA MAX 10 DE10-Lite 使用 Quartus Prime 16.1 将 verilog 代码上传到开发板时出错 [已关闭]

FPGA MAX 10 DE10-Lite Error when uploading the verilog code to the board using Quartus Prime 16.1 [closed]

提问人:dkdk 提问时间:11/17/2023 更新时间:11/17/2023 访问量:27

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

4天前关闭。

我将下面的代码上传到 Quartus Prime 16.1 的 de10-lite。我做了引脚分配。


`timescale 1ns/10ps
//Lab-06 Part-1 main
module Lab06_1(KEY,SW,LEDR,HEX3,HEX2,HEX1,HEX0);
input [7:0]SW;      //select A
input [1:0]KEY;     //KEY0: reset   KEY1: clock
output [9:0]LEDR;   //display output (8:carry out, 9:overflow reg)
output [6:0]HEX3,HEX2,HEX1,HEX0;

wire [7:0]sum;
wire carry, overflow;

add add0(KEY[1],KEY[0],SW[7:0],sum[7:0],carry,overflow);

assign LEDR[7:0]=sum[7:0];
assign LEDR[8]=carry;
assign LEDR[9]=overflow;

dec_HEX H3(SW[7:4],HEX3);
dec_HEX H2(SW[3:0],HEX2);
dec_HEX H1(sum[7:4],HEX1);
dec_HEX H0(sum[3:0],HEX0);


endmodule



//add
module add(Clk,Reset_n,A,S,c,overflow);
input [7:0]A;
input Clk, Reset_n;
output reg [7:0]S=8'b0;
output reg c=1'b0;
output reg overflow=1'b0;

always @(posedge Clk or negedge Reset_n) begin
    if(!Reset_n) begin
    S=8'b0;
    c=1'b0;
    overflow=1'b0;
    end
    else begin
        if(S[7] & A[7]) begin   //(-) + (-) = (+)
            {c,S}=S+A;
            if(!S[7]) begin
                overflow=1'b1;
            end
        end
        else if(!S[7] & !A[7]) begin    //(+) + (+) = (-)
            {c,S}=S+A;
            if(S[7]) begin
                overflow=1'b1;
            end
        end
        else begin
            {c,S}=S+A;
            overflow=1'b0;
        end
    end
end

endmodule



//HEX decoder(16)
module dec_HEX(SW,HEX);
input [3:0]SW;
output [6:0]HEX;

assign HEX=(SW==4'b0000)?7'b100_0000:       //0
    (SW==4'b0001)?7'b111_1001:      //1
    (SW==4'b0010)?7'b010_0100:      //2
    (SW==4'b0011)?7'b011_0000:      //3
    (SW==4'b0100)?7'b001_1001:      //4
    (SW==4'b0101)?7'b001_0010:      //5
    (SW==4'b0110)?7'b000_0010:      //6
    (SW==4'b0111)?7'b111_1000:      //7
    (SW==4'b1000)?7'b000_0000:      //8
    (SW==4'b1001)?7'b001_0000:      //9
    (SW==4'b1010)?7'b000_1000:      //A
    (SW==4'b1011)?7'b000_0011:      //b
    (SW==4'b1100)?7'b100_0110:      //C
    (SW==4'b1101)?7'b010_0001:      //d
    (SW==4'b1110)?7'b000_0110:      //E
    (SW==4'b1111)?7'b000_1110:7'b111_1111;  //F
    
endmodule

此时,SW0 提高到 1,所有其他方法都设置为 0(输入为 8'b1),使用 KEY1 更改了 Clk。 预期的结果是,当我按一次 KEY1 时,LED0 亮起,当您按两次时,LED1 亮起,LED0 熄灭(与二进制数相同。每次按键一次,两次,...通过 LED 出来)。此操作必须继续,但当它实际操作时,LED 发出的值将如下所示:3、14、19、30。怎么了?

我使用

  • 夸图斯 Prime 16.1
  • DE10-精简版 (10M50DAF484C7G)

此时,SW0 提高到 1,所有其他方法都设置为 0(输入为 8'b1),使用 KEY1 更改了 Clk。 预期的结果是,当我按一次 KEY1 时,LED0 亮起,当您按两次时,LED1 亮起,LED0 熄灭(与二进制数相同。每次按键一次,两次,...通过 LED 出来)。此操作必须继续,但当它实际操作时,LED 发出的值将如下所示:3、14、19、30。怎么了?

Verilog 模型IM Quartus 英特尔-FPGA

评论

0赞 Serge 11/17/2023
你模拟过你的模型吗?我怀疑它会起作用。其中有许多编码违规和多个驱动程序。此外,在 fpga 中,按下机械键会产生机械摆动,您无法保护。没有可模拟的简短示例,就无法回答您的问题。
0赞 dkdk 11/17/2023
它在测试台中工作。我解决了这个问题,添加了去边界模块。谢谢你的评论!

答: 暂无答案