第四节 参数化设计实现模块的重用

目录

前言

1.参数化设计实现:4个(8个)LED灯分别以0.1s 0.2s 0.3s 0.4s闪烁

2.语法总结

一、4个LED灯不同频率闪烁设计实现

1.一个LED灯设计输入

2.4个LED灯设计输入

3.4个LED灯模拟测试代码

5.4个LED灯模拟

二、语法总结


前言

1.参数化设计实现:4个(8个)LED灯分别以0.1s 0.2s 0.3s 0.4s闪烁

2.语法总结

一、4个LED灯不同频率闪烁设计实现

1.一个LED灯设计输入

`timescale 1ns / 1ns
 
module led_flash(
    Clk,
    Reset_n,
    Led
    );
   
    
    input Clk;
    input Reset_n;
    output reg Led;
    
  parameter MCNT = 24999999;  
    
    reg[24:0] counter;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter <= 0;
    else if(counter == MCNT)//counter=0也是一个周期
        counter <= 0;
    else
        counter <= counter+1'd1;
        
     always@(posedge Clk or negedge Reset_n)
     if(!Reset_n)
     Led <= 0;  //此定义复位时led灭
     else if(counter == MCNT)
     Led <= !Led;//取反一次

endmodule

2.4个LED灯设计输入

`timescale 1ns / 1ns

module led_run8(
    Clk,
    Reset_n,
    Led
    );
    
    input Clk;
    input Reset_n;
    output [3:0] Led;
     
   led_flash led_flash_inst0(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[0])
    ); 
    defparam led_flash_inst0.MCNT = 2499999;
    
    led_flash led_flash_inst1(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[1])
    );
    defparam led_flash_inst1.MCNT = 4999999;
    
    led_flash led_flash_inst2(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[2])
    );
    defparam led_flash_inst2.MCNT = 7499999;
    
    led_flash led_flash_inst3(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[3])
    );
    defparam led_flash_inst3.MCNT = 9999999;
   
endmodule

3.4个LED灯模拟测试代码

`timescale 1ns / 1ns
 
module led_run_tb;
    reg Clk;
    reg Reset_n;
    wire [3:0]Led;
 
 led_run8 led_run8inst_0(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led)
    );
 
    initial Clk = 1;
    always#10 Clk = !Clk;//时钟信号写法
 
    initial begin
        Reset_n = 0;
        #201;//观察复位信号 避免时钟上升沿重合
        Reset_n = 1;
        #1000000000;//持续2s钟
        $stop;
    end
        
endmodule

5.4个LED灯模拟

 

二、语法总结

1.参数化 

parameter MCNT = 24999999;  

2.模块调用

led_flash led_flash_inst0(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[0])
    ); 
    defparam led_flash_inst0.MCNT = 2499999;

或者

    led_flash
  # (
      .MCNT(2499999)
   ) 
    led_flash_inst0(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Led(Led[0])
    ); 
   // defparam led_flash_inst0.MCNT = 2499999;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值