在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: come_on_sn

[求助] 请问在VHDL构造体内部可以将signal赋值给整数吗?

[复制链接]
 楼主| 发表于 2021-10-20 17:02:42 | 显示全部楼层


   
innovation 发表于 2021-10-20 12:52
这。。。不对呀。看来我忘了提醒你“VHDL(或verilog)代码会分为可综合和不可综合两种”。你这个综合会报er ...





   
这两句中对variable赋初值会被综合器忽略(这就是不可综合的代码),所以你的BAUD_CLK_TICKS这个信号根本没有传递进你这段计数器代码!这个问题综合器会warning。

哎?我最后综合并且上板测试发现功能是正常的哎,只是最高波特率只能支持460.8K,不支持921.6K




   
对整数类型的signal(或variable)指定范围时,range 0 to 。。。,to后面必须是一个常数,这个综合器在综合时报error。

RE:是的,提示error,后来我直接改成了2**14-1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-20 17:06:49 | 显示全部楼层


   
innovation 发表于 2021-10-20 13:32
帮你把代码微调一下,你和你最开始贴出的代码比对:
Tips:这个代码软件思维偏重,硬件电路思维偏弱,资源 ...



嗯嗯,感谢前辈的指点!我经验不是很丰富,写代码时确实从电路层面考虑的比较少。


想请教下目前我的代码从电路角度有什么可以优化的地方吗?用的确实xilinx的FPGA

不胜感激!
回复 支持 反对

使用道具 举报

发表于 2021-10-20 17:17:45 | 显示全部楼层


   
come_on_sn 发表于 2021-10-20 17:02
哎?我最后综合并且上板测试发现功能是正常的哎,只是最高波特率只能支持460.8K,不支持921.6K


???!!!
你确定你仅是将range 0 to 。。。修改为2**14 - 1,也就是你上板调试的代码是这样的?


   

        

                
  1. baud_rate_clk_generator: process(clk)
  2.    variable BAUD_CLK_TICKS_int : integer range 0 to 2**14-1 := conv_integer(unsigned(BAUD_CLK_TICKS));
  3.    variable baud_count: integer range 0 to 2**14 - 1 := (BAUD_CLK_TICKS_int - 1);
  4.     begin
  5.    if rising_edge(clk) then
  6.       if (reset = '1') then
  7.          baud_rate_clk <= '0';
  8.          baud_count := (BAUD_CLK_TICKS_int - 1);
  9.       else
  10.          if (baud_count = 0) then
  11.             baud_rate_clk <= '1';
  12.             baud_count := (BAUD_CLK_TICKS_int - 1);
  13.          else
  14.             baud_rate_clk <= '0';
  15.             baud_count := baud_count - 1;
  16.          end if;
  17.       end if;
  18.    end if;
  19.     end process baud_rate_clk_generator;
            

   

    复制代码


回复 支持 反对

使用道具 举报

发表于 2021-10-20 17:32:05 | 显示全部楼层
本帖最后由 innovation 于 2021-10-20 17:49 编辑


   
come_on_sn 发表于 2021-10-20 17:06
嗯嗯,感谢前辈的指点!我经验不是很丰富,写代码时确实从电路层面考虑的比较少。


这个我估计从原理上不太好在帖子里面给你讲清楚,会越扯越远,这个也不是一朝一夕的事儿。你得学习xilinx FPGA的原理,练习并感受优化的效果。

如果你已经学会查看Xilinx 软件的综合资源报告和综合时序性能报告,倒是可以带着你让你感受下优化前后的对比。从而确立FPGA逻辑工程师本质是电路工程师的概念。

之所以选择综合报告来感受,是因为综合报告可以针对每一个IP模块得出,虽然综合报告不代表最终实现结果,但趋势是一致的,综合报告性能越高,最终实现的电路性能也越高。贴出你现在上板调试的这个波特率模块的最终代码和综合报告
回复 支持 反对

使用道具 举报

发表于 2021-10-20 18:05:05 | 显示全部楼层


   
come_on_sn 发表于 2021-10-20 17:02
哎?我最后综合并且上板测试发现功能是正常的哎,只是最高波特率只能支持460.8K,不支持921.6K


???!!!
你确定你最终上板调试的程序仅仅是将5#的代码中range 0 to 。。。后面改成了2**14 - 1 ?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-21 09:59:58 | 显示全部楼层


   
innovation 发表于 2021-10-20 18:05
???!!!
你确定你最终上板调试的程序仅仅是将5#的代码中range 0 to 。。。后面改成了2**14 - 1 ?
...


哦哦,可能是我看错了,实在抱歉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-21 10:16:28 | 显示全部楼层


   
innovation 发表于 2021-10-20 17:32
这个我估计从原理上不太好在帖子里面给你讲清楚,会越扯越远,这个也不是一朝一夕的事儿。你得学习xilinx  ...



最终我按照您在#9建议的代码修改测试了。
但是发现一个很奇怪的现象:上板测试通信正常(UART可以完成收发功能),但是在vivado里功能仿真有问题(具体是发射机模块没有输出)很神奇。。

附件是综合后的时序报告~


timing_1.zip

9.5 KB, 下载次数: 1 , 下载积分: 资产 -2 信元, 下载支出 2 信元

综合后时序报告

回复 支持 反对

使用道具 举报

发表于 2021-10-21 21:14:30 | 显示全部楼层


   
come_on_sn 发表于 2021-10-21 10:16
最终我按照您在#9建议的代码修改测试了。
但是发现一个很奇怪的现象:上板测试通信正常(UART可以完成收 ...


我想你误会我的意思了,不是说你发个时序报告给我看,有问题的话我再帮你处理,如果这样的话,味儿就不对了。。。
是说你会查看xilinx软件的综合报告的话,可以尝试一步一步从电路设计思维的角度去感受优化的效果,重点是亲身尝试并感受

比如说,你在5#贴出的代码,baud_count在reload时,加载的阈值需要减1,你设计为在加载时减1,这就是比较典型的软件思维,你没考虑这个地方对综合工具来说,需要用对应的电路来实现这一个减1的工作,5#的代码综合后的资源消耗如下图:

image.png

9#的代码仅仅是将这个阈值减1修改到BAUD_CLK_TICKS这个ROM表这段代码,这个时候减1的操作综合器能识别出一个静态(或者说是常量)表达式,直接在编译阶段得到确定的结果,从而勿须电路实现。9#的代码综合后的资源消耗如下图:

image.png

可以看到,通过代码的优化,消耗的LUT资源由46 --> 32,相对5#的代码减少了(46-32)/46 = 30.4%的LUT资源消耗。

你掌握这一步(查看vivado的设计报告看来你掌握了的)后,并切实感受到效果后,有兴趣的话,咱们再看9#的代码怎么继续优化。

我能(并愿意)帮你的是解答你提出的具体原理问题,帮助你建立FPGA逻辑设计的电路设计思维我不会也不应该直接帮你处理你工程文件中的源文件

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 09:24:12 | 显示全部楼层


   
innovation 发表于 2021-10-21 21:14
我想你误会我的意思了,不是说你发个时序报告给我看,有问题的话我再帮你处理,如果这样的话,味儿就不对 ...


嗯嗯,明白了,是我冒昧了,感谢前辈的指导!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-8-22 04:24 , Processed in 0.018330 second(s), 4 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表