英特尔FPGA实训学习day 2

以下为个人学习 杂记,不具条理层次性。

今天学到了LED灯的点亮,以及流水灯,以及仿真图的实现。

其中也学到编译和编译综合的区别,对编译界面的进一步认识,还有对原理图的简单认识及应用,引脚的配置方法等。

 

产生的疑问:

        老师提到,每次写always 都要想,哪些要初始化,为什么呢,而且怎么叫初始化,怎么初始化?

        对于

接下来想干的事:

        (在学习过程中,很想和stm32这些进行类比,毕竟之前打比赛有一定接触,虽然不是很熟悉,但也算是老朋友了。我认识的stm32简单说就是,通过控制引脚的输入输出高低电平,达到对外设的控制,实现外设的配合。其包括的主要模块就是,ADC,通信(其中包括串口,SPI,I2C等),时钟,中断等几大学习模块。但对于FPGA,有些同学的认识,感觉更应该从电路设计上去认识,也就是数字电路等占有举足轻重的作用,相对于stm32生硬调包来说,这将学的更加底层和通透,清晰。)

通过两天的学习,以及与同学们的交流,浅浅的认识了下FPGA,但,应该从怎样的角度去入手学习,认识,这是需要接下来去好好探究的。

接下来就记录今日所学的杂记: 

烧录程序整个过程:

首先写好代码,写好后:

点击该按钮进行 综合分析 。其作用是:检查代码中的语法错误,以及分配寄存器空间等。(即:在改变了寄存器空间或者定义了新变量后都要进行此步) 

有了以上这步才能进行引脚的配置:

        点击

 然后对引脚进行配置。

对引脚的配置,就参考老师给的原理图文件,在其中搜索就好:

’再次老师也说明了对原理图我文件的认识:可以当作一个引脚查阅,参考的手册一样,不用把每个细节看懂,需要的时候能查到,然后进行配置就行。

配置好引脚后,再进行编译,点击按钮 

 这个按钮作用是:编译,生成 要烧入芯片中的.sof文件。相当于要烧入stm32中的hex文件。

 

接下来就是烧录,

烧录按钮:

 其中值得注意的是,有时候烧录点后那个下载按钮start,是灰色的,那么就 点start按钮上面那个hardware setup

值得注意的是,这里选择好usb-blaster后,要点close,而不是直接点×,否则无法自动保存好。

而如果有些电脑无论怎么都不行,则可以将自己编译生成的再output_files文件夹中的 .sof文件发给别人电脑然后别人通过以步骤进行烧录。

 先 delete 原本存在的,再add 要烧录的,再点start烧录。

今天主要就是这个新内容,然后还有些led代码,一会儿附在后面。

还有今天发现个不容易发现的报错:

第一排爆红,实则是下面  有中文的 分号。

led.v代码:

module led(
    input clk, //时钟信号,50MHz,晶振1s振动50_000_000次//不加类型限制,默认wire类型
    input rst_n,//复位信号

    output reg [3:0] led//led1 信号


);

reg [25:0] cnt;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin//初始化
        cnt <= 26'd0;
    end
    else if(cnt == 26'd50_000_000 - 1'd1)begin//时间过去了1s
        cnt <=26'd0;

    end
    else begin
        cnt <= cnt +1'd1;//每识别到一个时钟上升沿,寄存器加一
  
    end
end
//根据时间改变led状态
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin//初始化
    led <= 4'b0000;
    end
    // always @(cnt % 26'd10_000_000) begin
        
    // end


   else if (cnt == 26'd10- 1'd1) begin
        led <= 4'b0001;

    end
    else if (cnt == 26'd20- 1'd1) begin//0.4s亮一次
        // led <= 4'b0010;
        led <= (led << 1);
    end
    else if (cnt == 26'd30- 1'd1) begin//0.6s亮一次
        // led <= 4'b0100;
        led <= (led << 1);
    end
    else if (cnt == 26'd40- 1'd1) begin//0.8s亮一次
        // led <= 4'b1000;
        led <= led << 1;
    end
    else if(cnt == 26'd50 - 1'd1)begin//时间过去了1s
        led <= 4'b0000;
    end

    else begin
        led <= led;  
    end



end


endmodule



 led仿真代码led_tb.v

`timescale 1ns/1ns //单位/精度
module led_tb();
    reg clk;
    reg rst_n;

    wire [3:0] led;
always #10 clk = ~clk;  //#代表延时,后面是时间,单位精度在文件开头
    
    initial begin
        clk = 1'b0;
        rst_n = 1'b0;//开始复位
        #10
        rst_n = 1'b1; //结束复位
        #1000;
        $stop;
    end

//信号传递,模块例化
led u_led(
.clk(clk),
.rst_n(rst_n),

.led(led)

);

    

endmodule

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值