FPGA自学教程 05 使用参数化设计让4个LED灯以不同频率闪烁

双非硕士 研一下学期视觉转FPGA(在b站跟小梅哥视频)

长路漫漫,但希望前途光明

同理,一开始先创建文档,这里都省略了

创建文档led_run8.v

led_run8.v的代码如下

module led_run8(
    Reset_n,//复位端口,加_n是使用低电平复位
    Clk,//时钟端口
    Led
);
    input Clk;
    input Reset_n;
    output reg Led;
    
    parameter MCNT = 24999999;

    reg [24:0]counter;
    
    always@(posedge Clk or negedge Reset_n) //posedge Clk 为时序描述的标准格式
        // <=是非阻塞赋值的意思
        if(!Reset_n)
            counter <= 0;
        else if(counter == MCNT)
            counter<=0;
        else
            counter <= counter+1'd1;        
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        Led <= 0;
    else if(counter == MCNT)
        Led <=!Led;
endmodule

进行模拟仿真,代码内容如下:

`timescale 1ns/1ns

module led_run8_tb();
    reg Reset_n;
    reg Clk;
    wire [3:0]Led;
        
    led_run8 led_run8_test0(
        .Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
        .Clk(Clk),//时钟端口
        .Led(Led[0])
    );
    defparam led_run8_test0.MCNT=24999;
    led_run8 led_run8_test1(
        .Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
        .Clk(Clk),//时钟端口
        .Led(Led[1])
    );
    defparam led_run8_test1.MCNT=49999;
    led_run8 led_run8_test2(
        .Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
        .Clk(Clk),//时钟端口
        .Led(Led[2])
    );
    defparam led_run8_test2.MCNT=74999;
    led_run8 led_run8_test3(
        .Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
        .Clk(Clk),//时钟端口
        .Led(Led[3])
    );            
    defparam led_run8_test3.MCNT=99999;    
    initial Clk=1;
    always #10 Clk = !Clk;
    
    initial begin
        Reset_n=0;
        #201;
        Reset_n=1;
        #40000000;
        $stop;
    end
endmodule

验证效果如下

然后可以进行板机验证,首先对其进行管脚分配

还是如之前的文章类似,在点击了Open Synthesized Design后,页面右侧就会弹出可以分配管脚的页面,由于项目越复杂,要分配的I/O就越多

所以首先在左侧找到Add Sources ,选择Add or Create Constrains.

创建步骤与之前类似

代码内容如下

set_property IOSTANDARD LVCMOS33 [get_ports {Led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[0]}]
set_property PACKAGE_PIN M22 [get_ports {Led[0]}]
set_property PACKAGE_PIN N22 [get_ports {Led[1]}]
set_property PACKAGE_PIN L21 [get_ports {Led[2]}]
set_property PACKAGE_PIN K21 [get_ports {Led[3]}]
set_property PACKAGE_PIN Y18 [get_ports Clk]
set_property PACKAGE_PIN F15 [get_ports Reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports Clk]
set_property IOSTANDARD LVCMOS33 [get_ports Reset_n]
set_property PACKAGE_PIN M22 [get_ports {Led[0]}]

 后续板机验证步骤就跟之前一样了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值