FPGA的RTL_Viewer图如何查看

一、以一小段时钟模块代码为例,说明一下RTL图如何查看,代码如下:

 
  1. --1s时钟模块

  2. Module_1Hz : process(clk)

  3. begin

  4. if(clk'event and clk='1')then

  5. if(cnt_50MHz=49999999)then

  6. cnt_50MHz<=0;

  7. else

  8. cnt_50MHz<=cnt_50MHz+1;

  9. end if;

  10. if(cnt_50MHz<=24999999)then

  11. clk1Hz<=1;

  12. else

  13. clk1Hz<=0;

  14. end if;

  15. end if;

  16. end process module_1Hz;

输入时钟clk=50MHz,通过一个cnt_50MHz=49999999的计数来实现1Hz的粗时钟输出。

对应的RTL如下:

二、解释RTL图之前,首先说一下RTL图例,在Quartus软件的Help文件中可以查到部分解释:

三、我们来详细了解一下RTL图例与代码的对应关系

这是一个锁存器,这个锁存器的作用就是当clk上升沿到来时,Q<=D。此处的D就是代码中的cnt_50MHz.

这个锁存器是26位的,不是一位的,注意cnt_50MHz[25..0]。右单击这个锁存器图示,点击Properties,在左侧窗口可以看到:

因为时钟源50MHz对应的计数值49999999,其二进制位数为26位,对应的十六进制是

然后,我们在说一下锁存器前面三个图例:

Add0:  OUT=A+B  其中B[25..0]是一个常量 26'h1 ,B[25..0]=1  。(26'h1表示二进制位数是26位的,h1表示用16进制数 1,因为大的数全部用二进制数写出来,不方便查看)。此处相当于代码中的cnt_50MHz<=cnt_50MHz+1.  图例中的1'h0可能表示初始值为0吧。

Equal0: 当A==B时,OUT=1;当A!=B时,OUT=0。B[25..0]的上限就是49999999,即16进制数2FAF07F。

cnt_50MHz~[25..0] :这是一个选择器,当Equal0的out=0时,选择0对应的数据。当Equal0的out=1时,选择1对应的26'h0,就是将cnt_50MHz重新赋值为0.

这三个图例就是实现了如下逻辑:

 
  1. if(cnt_50MHz=49999999)then

  2. cnt_50MHz<=0;

  3. else

  4. cnt_50MHz<=cnt_50MHz+1;

  5. end if;

1Hz的时钟如下:

对应的代码:

 
  1. if(cnt_50MHz<=24999999)then

  2. clk1Hz<=1;

  3. else

  4. clk1Hz<=0;

  5. end if;

图例LessThan0中的 1'h1 CIN 应该表示 out的初始值为1.这是因为cnt_50MHz小于24999999的时候,clk1hz一直是高。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值