fpga系列 HDL:03 Vivado 用时序逻辑电路设计计数器(posedge clk+reg [7:0] memory)

Layer 1 CK D Q D Q CK 上升沿 在CK的上升沿,将Q置为D:
Layer 1 CK D Q reg
module led_flash(clk,reset_n,led);
    input clk;
    input reset_n;//_n代表低电平有效
    output reg led;
//  assign reset=~reset_n;
    reg [24:0] counter;//定义计数器寄存器
    
//计数器计数进程    
always@(posedge clk or negedge reset_n)//posedge上升沿,即以时钟的上升沿为敏感信号,或者复位信号的下降沿
    if(!reset_n) // 如果复位信号 (reset_n) 是低电平(即有效)
        counter <= 25'b0;//非阻塞赋值
        // 25'b0 表示一个 25 位宽的二进制数,其中所有位都被置为逻辑值 0。这个数在二进制中表示为 25 个 0。
        // 非阻塞赋值即赋值操作不会立即生效,而是在始终块结束后生效,因此可以用于描述时序逻辑。
    else if(counter==25000000-1)//让counter复位置0也需要耗费一个周期,所以需要延时多久翻转,则需要将延时时间除以周期时长再减去1,得到此处的counter数
        counter <= 25'b0;
    else
        counter <= counter+1'b1;
//led输出控制进程        
always@(posedge clk or negedge reset_n)
    if(!reset_n)
        led <= 0;
    else if(counter==25000000-1)
        led <= !led;//在always里赋值,则必须为reg型
       
endmodule
  • 合写
module led_flash(clk,reset_n,led);
    input clk;
    input reset_n;//_n代表低电平有效
    output reg led;
//  assign reset=~reset_n;
    reg [24:0] counter;//定义计数器寄存器
   
always@(posedge clk or negedge reset_n) 
    if(!reset_n)
        begin  // 多个执行语句用begin、end括起来
        counter <= 0;
        led <= 0 ;
        end
    else if(counter == 25000000)
        begin
        led <= !led;  //在always里赋值,则必须为reg型
        counter <= 0;
        end
    else
        begin
        counter <= counter+1'd1;
        end      
endmodule


tb

`timescale 1ns / 1ns //时间刻度 时间的单位/ 1ns精度
module led_flash_tb();
    reg clk;
    reg reset_n;
    wire led;
    led_flash led_flash(
        .clk(clk),
        .reset_n(reset_n),
        .led(led)
        );
    initial clk = 1'b1;
    always #10 clk=~clk; //延时半个周期10ns,翻转clk值,模拟实现时钟信号
    initial begin
        reset_n = 1'b0;
        #201;//延迟时间不应为周期的整数倍
        reset_n = 1'b1;
        #2000000000;//等待两秒,看实际状态
        $stop;
    end
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值