首页 > 其他 > 详细

FPGA两种寄存器的使能

时间:2017-05-11 23:34:13      阅读:532      评论:0      收藏:0      [点我收藏+]

在FPGA中,寄存器的使能设计一般有两种方式:

1.直接使用寄存器的使能端口。

技术分享

2.使用一个数据选择器连接寄存器的D端口,通过数据选择器的sel端口做使能。如下图

技术分享

 

 

 

 

 

 

这个方式与直接使用寄存器的CE端口有什么区别呢?

我们可以看出来,

1.在Q1为输出端口时,此时这个结构所具有的功能和普通的寄存器是一样的,当CE=1时,D经过数据选择器选通在经过一个时钟的延迟后到达Q1端口。CE=0时具有保存功能。是不是就是下面的写法。

always@(posedge clk)begin
    if(CE)begin
        Q1 <= D;
    end
end

2.那在Q0为输出端口是呢?此时当CE=1时,数据直接被选通输出到Q0端口,没有延迟。而当CE=0时也具有保持功能。

我们这里就会思考,没有延迟,直接通过,那么我下面这样写是不是就是这种功能呢?

always@(posedge clk)begin
    if(CE)begin
        Q0 = D;
    end
end

将 非阻塞赋值 <=变成 =阻塞赋值, 那这样行不行呢?下面就进行验证

这是综合后的电路,直接告诉我们这个写法和1寄存器的写法是一样的Q0与D同样存在一个时钟的延迟,并且下面这个仿真图也验证了我们的观点。

这样的写法并不会综合成2结构的电路,并且D端口与Q0端口存在一个时钟的延迟。

技术分享

技术分享

事实上我们应该写成以下形式:

module test
(
    input clk,
    input  D,
    input CE,
    output  Q0
);
    
reg Qt=0;
assign Q0 = CE ? D:Qt;
always@(posedge clk)begin
    if(CE)begin
        Qt <= D;
    end
end

endmodule

综合出来的电路如下图所示,这才是2结构的电路。

技术分享

 

那讲到这里,BB了这么多,这个电路结构到低有什么用呢? 下面我就举个栗子

 

假设我们需要这样一个功能

1. 连续输入 x1 y1 x2 y2

2. 当 x1>0时 输出 x1 否则 -x1

3. 当 x1>0时 输出 y1 否则 -y1,即y1根据x1的符号进行输出

4. 当 x2>0时 输出 x2 否则 -x2

5. 当 x2>0时 输出 y2 否则 -y2,即y2根据x2的符号进行输出

那么我们就使用这样的结构保存x的符号值,供y使用。

 

FPGA两种寄存器的使能

原文:http://www.cnblogs.com/wystar/p/6842874.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!