shiyinjita的个人空间 https://blog.eetop.cn/239461 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

关于reg寄存器的使用

已有 5567 次阅读| 2012-1-18 11:37 |个人分类:quartus

前两天在使用MAX5开发板的时候,做了很简单的24位计数器,当时没有考虑太多,同时当时的写法是reg【23:0】=24‘b111111111111111111111111 ;
发现资源使用为48个,当时没有考虑太多,觉得是正常现象,后来越考虑越不对,打开结构查看,此时异步复位综合成了同步复位,同时与寄存器相关的查找表变成了1,
后来修改 reg【23:0】=24‘b0;此时发现寄存器资源使用为25个,复位信号变成了异步复位,
根据这个得知 申请reg寄存器的时候,如果其中有 1,那么布局布线的时候,会把1综合到查找表中。

因此以后尽量不要使用reg【count:0】cnt = a 了。
具体的博客内容 因为在博客中没有复制粘贴,就先把内容粘贴上吧

MAX5开发板全面测试-笔记3

在全面测试文章中,提到了资源占用率为48,当时也没有仔细的思考为什么会这么大,哎,看来我的毛躁的毛病一点也么有改变,是时候该改变自己了。闲话转过来。如图1所示资源

 1

当时的想法是24count占用了24个寄存器,配置为正常模式。计数器需要23LE来作为组合逻辑,同时这23LE应该设置为算术模式。而led2输出占用一个LE,配置为正常模式,这样加起来就是24 +23+1 = 48 了。

 

后来仔细分析 fitting报告

+---------------------------------------------+------------------+

; Resource                                    ; Usage            ;

+---------------------------------------------+------------------+

; Total logic elements                        ; 48 / 570 ( 8 % ) ;

;     -- Combinational with no register       ; 24               ;

;     -- Register only                        ; 19               ;

;     -- Combinational with a register        ; 5                ;

;                                             ;                  ;

; Logic element usage by number of LUT inputs ;                  ;

;     -- 4 input functions                    ; 0                ;

;     -- 3 input functions                    ; 0                ;

;     -- 2 input functions                    ; 23               ;

;     -- 1 input functions                    ; 5                ;

;     -- 0 input functions                    ; 1                ;

;                                             ;                  ;

; Logic elements by mode                      ;                  ;

;     -- normal mode                          ; 26               ;

;     -- arithmetic mode                      ; 22               ;

;     -- qfbk mode                            ; 0                ;

;     -- register cascade mode                ; 0                ;

;     -- synchronous clear/load mode          ; 0                ;

;     -- asynchronous clear/load mode         ; 24               ;

;                                             ;                  ;

              ;

; Maximum fan-out node                        ; clk              ;

; Maximum fan-out                             ; 24               ;

; Highest non-global fan-out signal           ; Add0~37          ;

; Highest non-global fan-out                  ; 5                ;

; Total fan-out                               ; 137              ;

; Average fan-out                             ; 2.49             ;

+---------------------------------------------+------------------+

看到算术模式的LE 只有22个,而普通模式却是26个,所有有所以疑惑。

quartus11.0下打开post fitting 发现打不来,于是把程序移植到quartsu10.0下,并用max2来试验,此时打开fpost fitting如图2所示范

2

打开其中一个小部分 如图3所示范

这里面有一点令我疑惑的是 为什么我设置的异步复位连接的却不是clr引脚,而是ADATA引脚,因此我分析师因为我的程序在复位的时候,设置的为1的缘故,这样相当于导入数据了,不过这样感觉不是异步复位还是同步复位了。!!!!!   这不太明白,待会在分析这个问题,现在回归主题。

如图4所示范

针对counter0】来讲,由图来分析,每隔一个周期,信号就经过反相器后,进入触发器,这就产生了0-1-0的这个循环

 

而针对counter1】所示范

分析数据

此时counter0】与counter1】进过了异或门后,输出数据返回到counter1 ,此时counter1】保持2个周期,同时异或门配置为算术模式

 

针对counter2-----counter22 此时

分析的原理如同counter1】所示范,同时配置为算术模式

 

而对于counter23

这个可以通过普通模式来进行,

分析后,发现进位链用了23个,而算术逻辑用了22个,其中add0-0用了普通模式,

如图所示范普通模式

 

算术模式

 

 

这样资源使用为 24counter + 23个进位链(22个算术模式 + 1个普通模式) + osc时钟逻辑 = 48

 

这样就对了

 

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

在来分析 既然占用48个逻辑,其中24 1 占用了24个查找表,那么怎么样才能让算术逻辑也走寄存器对应的查找表呢?

程序如下

always @(posedge clk1 or negedge cb)

              begin

                     if (!cb)

                            counter <= 24'b0000_0000_0000_0000_0000_0000 ;

                     else

                            counter <= counter + 1'b1 ;

              end

此时资源和逻辑占用率如下所示范

Total logic elements                        ; 25 / 240 ( 10 % )                                                                               

;     -- Combinational with no register       ; 1                                                                                  

; Logic element usage by number of LUT inputs ;                                                                          

;     -- 4 input functions                    ; 0                                                                                  

;     -- 3 input functions                    ; 0                                                                                 

;     -- 2 input functions                    ; 23                                                                                 

;     -- 1 input functions                    ; 1                                                                                 

;     -- 0 input functions                    ; 1                                                                                  

; Logic elements by mode                      ;                                                       

;     -- normal mode                          ; 3                                                                                  

;     -- arithmetic mode                      ; 22                                                                                

;     -- qfbk mode                            ; 0                                                                                 

;     -- register cascade mode                ; 0

;     -- synchronous clear/load mode          ; 0                                                                                  

;     -- asynchronous clear/load mode         ; 24                                                                                                                         

根据上面的分析,24位的计数器,需要22个算术LE,2个普通模式LE,

1个时钟LE,这样正好是 22 +2+1 = 25 LE

算术模式

普通模式

根据此图可以发现 这一种的优势在于算术逻辑使用后经过DFF,这样就节省了查找表,而第一种方式,查找表占用的是 1 ,所以浪费资源。同时根据下图所示,复位信号此时经过了clr,就是完全的异步复位。

 

此时还是不太理解,为什么在复位的时候,赋值为1,走的就是同步复位,而0就是异步复位。

继续试验

发现问题出在寄存器初始化上

比如在24位的寄存器中

reg230counter = 24’b0000_0000_0000_0000_0000_0000 ;

此时走的复位信号就是 异步复位

而当reg230counter = 24’b100_0000_0000_0000_0000_0000 ;或者countermax5开发板.rar


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 2

    好友
  • 1

    获赞
  • 29

    评论
  • 2809

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-26 08:42 , Processed in 0.018887 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部