搜索
bottom↓
回复: 23

程序多写一句话,编译出来反而占用更少的LE。 CPLD的程序优化问题

[复制链接]

出0入25汤圆

发表于 2020-9-22 08:57:31 | 显示全部楼层 |阅读模式
本帖最后由 rei1984 于 2020-9-22 09:00 编辑

昨天我继续在写 epm240 的iic程序。  通过对比别人写的程序,别人实现同样的功能。用的类似的编程思路,我得到的结果如下:

1. 我写的程序 占用了 239个LE

2. 别人写的程序只占用 152个LE

虽然功能实现了。我还是想知道 为什么 会有如此大的差异。


早上我分析了别人的程序。 看起来很多句话 都是 “废话”。   而这些“废话”对 cpld 编译程序来说,反而起到更加优化的效果,如下:



我有2个问题:

1. 为什么 cpld 的程序,   写的越“死”,编译后 占用的LE更少?   

2. 是否有 CPLD的优化技巧, 适合初学者学习呢? pdf 或者 网页也可以。   不要涉及太深入的知识。


以下是 程序文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入59汤圆

发表于 2020-9-22 09:14:43 | 显示全部楼层
楼主精通C语言

出0入0汤圆

发表于 2020-9-22 09:18:36 | 显示全部楼层
楼主用的啥工具综合呢?换synplify来综合看看

出200入429汤圆

发表于 2020-9-22 09:33:16 | 显示全部楼层
你所理解的else跟你想的else是不一样的,你少一个else,在编译后是会形成锁存器电路,锁存器电路消耗的逻辑单元是比不加高的

出0入25汤圆

 楼主| 发表于 2020-9-22 09:34:38 来自手机 | 显示全部楼层
lanliang714 发表于 2020-9-22 09:18
楼主用的啥工具综合呢?换synplify来综合看看

quatus ii。。。。。

出0入0汤圆

发表于 2020-9-22 09:37:38 | 显示全部楼层
4楼正解,必须写死,各种可能性都得列全面

出0入25汤圆

 楼主| 发表于 2020-9-22 09:44:59 来自手机 | 显示全部楼层
我的感悟是。设计这东西就好比画一条鱼。
mcu 的c 语言。是画鱼骨头。鱼头。鱼尾巴。  就好比我们画电路板的 正片设计。

hdl 是硬件描述性语言, 画的是鱼的轮廓。  所有的语言是对轮廓的描述。   当到了综合阶段,让电脑去算 内部的门电路是怎么layout的。

所以hdl语言设计的越详细,“越死”   是对轮廓的详细描述。   好比是电路板的电源层负片设计。   也就是写的越详细。扣掉的轮廓越多。所以le占用更少。      如果写的不详细,电脑综合的时候就会把所有可能都布线上去。就会导致le暴增。

这是我的一点点感悟

出0入0汤圆

发表于 2020-9-22 10:05:19 | 显示全部楼层
原因其实简单的很,,,就是一句话,,写了   不产生锁存器,,,不写产生锁存器,,,而锁存器是需要逻辑资源的!

出0入0汤圆

发表于 2020-9-22 10:27:39 | 显示全部楼层
rei1984 发表于 2020-9-22 09:44
我的感悟是。设计这东西就好比画一条鱼。
mcu 的c 语言。是画鱼骨头。鱼头。鱼尾巴。  就好比我们画电路板 ...

其实最好不要拿 HDL 和 C 语言对比,一个是描述电路的,一个是会编译成指令的,完全不是一类东西,只是 Verilog 和 C 语法稍微有点像而已

出20入30汤圆

发表于 2020-9-22 10:40:28 来自手机 | 显示全部楼层
rei1984 发表于 2020-9-22 09:44
我的感悟是。设计这东西就好比画一条鱼。
mcu 的c 语言。是画鱼骨头。鱼头。鱼尾巴。  就好比我们画电路板 ...

多年前学过,楼主的理解存在偏差,用Verilog写代码,在你的脑海中呈现的是一幅数字电路,用C语言写程序,脑海中呈现的是一条流水线,在用Verilog写代码过程中尽量不要把C语言思维带进来。楼主所述的问题其实在夏宇闻的教程中已经说的非常详细了,具体哪一章我也忘记了,好像是第四章,把这本教程多看几遍,以后想用Verilog搞项目,建议把数电搞熟了,越熟越好。

出0入22汤圆

发表于 2020-9-22 11:10:14 | 显示全部楼层
谭春林 发表于 2020-9-22 09:33
你所理解的else跟你想的else是不一样的,你少一个else,在编译后是会形成锁存器电路,锁存器电路消耗的逻辑 ...

请教一下,如果不管这个,就让其产生锁存器。除了多消耗逻辑资源,还有没有坏处?
谢谢!

出0入0汤圆

发表于 2020-9-22 12:18:01 | 显示全部楼层
case不全记得是组合逻辑才有问题,时序逻辑没事。

出300入477汤圆

发表于 2020-9-22 12:21:01 来自手机 | 显示全部楼层
zxq6 发表于 2020-9-22 11:10
请教一下,如果不管这个,就让其产生锁存器。除了多消耗逻辑资源,还有没有坏处?
谢谢! ...

你不关心的状态,总得有个值啊。是1,是0,是上次值?
你确定你列完了所有的有用状态吗?如果某种情况下进了无用状态该怎么办?
如果确定那些无用状态永远不会进入,那么你这样写也能正常使用。

出0入442汤圆

发表于 2020-9-22 13:31:23 来自手机 | 显示全部楼层
zxq6 发表于 2020-9-22 11:10
请教一下,如果不管这个,就让其产生锁存器。除了多消耗逻辑资源,还有没有坏处?
谢谢! ...

工作状态存在不确定性。

出0入0汤圆

发表于 2020-9-22 13:36:56 | 显示全部楼层
学习了!

出200入429汤圆

发表于 2020-9-22 15:05:51 | 显示全部楼层
zxq6 发表于 2020-9-22 11:10
请教一下,如果不管这个,就让其产生锁存器。除了多消耗逻辑资源,还有没有坏处?
谢谢! ...

我的理解是假如锁存器是你无意中产生的,这可能会导致你的电路多出一层组合电路,相应的你的跑的最大时钟会降低不少,且做优化时序的时候很容易忽略这个问题。其他功能上应该是一致的

出200入429汤圆

发表于 2020-9-22 15:10:14 | 显示全部楼层
redroof 发表于 2020-9-22 12:21
你不关心的状态,总得有个值啊。是1,是0,是上次值?
你确定你列完了所有的有用状态吗?如果某种情况下 ...

它会锁住上一个状态如果说你没有给它加个明确的值的话。

出300入477汤圆

发表于 2020-9-22 15:26:28 | 显示全部楼层
wye11083 发表于 2020-9-22 13:31
工作状态存在不确定性。

没有不确定啊,没赋值的等于是有个隐含的锁存器,保持上次的值。
这是确定的状态。关键问题是,这种状态是不是你需要的。
如果你确定这种输入状态绝对不会发生,那么就完全不影响工作正确性。

出0入22汤圆

发表于 2020-9-22 16:00:16 | 显示全部楼层
redroof 发表于 2020-9-22 12:21
你不关心的状态,总得有个值啊。是1,是0,是上次值?
你确定你列完了所有的有用状态吗?如果某种情况下 ...

就类似于这样的一段代码把,

  1. reg [3:0]  state;
  2. always @ (posedge clk)
  3. begin
  4.         if(state==0) begin
  5.                 state=1;
  6.                 do_process0();
  7.         end
  8.         else if(state==1)begin
  9.                 state=0;
  10.                 do_process1();
  11.         end
  12. end
复制代码

出0入442汤圆

发表于 2020-9-22 16:17:03 来自手机 | 显示全部楼层
redroof 发表于 2020-9-22 15:26
没有不确定啊,没赋值的等于是有个隐含的锁存器,保持上次的值。
这是确定的状态。关键问题是,这种状态 ...

这个latch的状态就是不确定的。一个毛刺就搞死了。

出0入36汤圆

发表于 2020-9-22 16:55:50 | 显示全部楼层
redroof 发表于 2020-9-22 15:26
没有不确定啊,没赋值的等于是有个隐含的锁存器,保持上次的值。
这是确定的状态。关键问题是,这种状态 ...

机器的思维是,既然必定不会进入的状态就要显式的提出来,然后剔除掉,而不是不做处理,不做处理的状态就是不确定状态。

出0入0汤圆

发表于 2020-9-22 21:28:13 | 显示全部楼层
一个合格的HDL设计师,应该具备HDL转化为逻辑电路的个能力。不然连机器都不如。哈哈。

出0入4汤圆

发表于 2020-9-22 21:49:32 来自手机 | 显示全部楼层
这种情况很常见,通常是因为写成了死逻辑,就是说逻辑最后变成一个不能达到,或者其实综合到最后就是一个固定逻辑,编译器把它优化掉了。

出0入4汤圆

发表于 2020-10-11 02:25:04 | 显示全部楼层
写程序的时候还是要明白自己写的究竟是什么,做到心中有数
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 06:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表