[FPGA入门笔记](五):时序逻辑基础

简介

今天购买了AXLINX AX7020的开发板,从今天开始每一个例程都要做文档记录,为自己加油。
本实验,基于ALINX AX7020开发板,芯片为xc7z020clg400-2。
开发板输入时钟为50MHz
学了这么久,还没有整理过关于FPGA基本逻辑单元的学习,今天先整理一部分,日后再来更新。
一、锁存器 latch—对脉冲电平敏感,在时钟脉冲的电平作用下改变状态
锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时,输出才会随着数据输入发生变化。(简单地说,它有两个输入,分别是一个有效信号EN,一个输入数据信号DATA_IN,它有一个输出Q,它的功能就是在EN有效的时候把DATA_IN的值传给Q,也就是锁存的过程);
D锁存器
在这里插入图片描述
E=1时,Q=D;E=0时,Q不变。
应用场合:数据有效滞后于时钟信号有效,这意味着时钟信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器 ;

优点:面积小、锁存器比FF快,所以用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。latch完成同一个功能所需要的门较触发器要少,所以在asic中用的较多;

缺点:时序分析较困难;

不用锁存器的原因有二:
1、锁存器容易产生毛刺,
2、锁存器在ASIC设计中应该说比FF要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和FF来组成锁存器,这样就浪费了资源;
二、D触发器

最后代码

`timescale 1ns/1ps
module seq_logic(
    input           clk,
    input           rst_n,
    input           latch_d,
    input           dff_d,
    input    [1:0]  reg_d,
    input           shift_ctrl,

    output  reg        latch_q,    //锁存器输出
    output  reg        dff_q,      //D触发器
    output  reg[1:0]   reg_q,      //2位寄存器
    output  reg[3:0]   shift_reg   //移位寄存器   
    );
    
    //D锁存器,clk=1,q=d;clk=0,q不变;
    always@(clk,latch_d)
    begin
        if(clk)
            latch_q <= latch_d;
        else
            latch_q <= latch_q;
    end
    //D触发器
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            dff_q <= 1'b0;
        else
            dff_q <= dff_d;
    end
    //2位寄存器
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            reg_q <= 2'b00;
        else
            reg_q <= reg_d;
    end
    //4位的移位寄存器
    parameter  DATA=4'b0001;
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            shift_reg <= 4'b0000;
        else
            case(shift_ctrl)
                2'b00:shift_reg <= DATA;
                2'b01:shift_reg <= {DATA[0],DATA[3:1]};
                2'b10:shift_reg <= {DATA[2:0],DATA[3]};
                default: shift_reg <= DATA;
            endcase
        end


endmodule


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值