作者Maddulin (what else do u focus?)
看板Electronics
标题Re: [问题] HDL问题
时间Sat Jun 23 14:36:02 2007
※ 引述《CuckooBoy (阿书)》之铭言:
: 请问
: if ...
: elsif...
: elsif...
: .....
: end if;
: 跟
: case
: when
: when
: .........
: end case
: 请问 合成出来的电路有差吗?
你觉得这样的描述电路分别会怎麽合成?
: 另外,
: process(clk) begin
: if rising_edge(clk) then
: if reset='1' then
: cnt<=0;
: else
: cnt<=cnt+1;
: end if;
: end if;
: end process;
: process(cnt) begin
: <===
: case (cnt) then
: when
: when
: end case;
: end process;
: 请问 <== 处.....加不加rising_edge(clk)差在哪边?还是没差??
: 会不会没加就会delay一点点之类的
HDL是来描述你的电路,换句话,你的电路的"行为"由你的code 描述
我认为你没有理解什麽是 sensitive list
若一个 process 中的 sensitve event 不包含张三, 那此 process 与张三何干?
[补充&修正]
因为你原先并不期待 "张三" 是这 process 的 stimulus
换句话说, 电路的 response 将与张三无关 (simulation)
即可能造成simulation-synthesis mismatch
但若在 process 其中加入条件判断, 例如你说的 if rising ...... 之类的
那你必需思考你所描述的是什麽样的行为与对应如何的电路
虽然我没写过VHDL, 不过我认为这样的描述应该在syntax检查时就必需出现错误
因为既然 process 需要判断某讯号是否为正缘之事件
那麽就该将该讯号加入 sensitive list 内
否则这就是一个不合语义的描述
当然我不懂formal language,
上述只是以一个数位设计者的角度去看问题
而不是以一个语言设计者的角度
但是否出现在此 process 内的绦件判断之讯号都必需在 sentivity list 内
当然不一定, 需视你的电路的行为而定, 例如你前面描述的 synchronous reset
他若出现在 sensitive list 中,那它必然为 asynchronous
所以需不需要在sensitive list中, 由电路的行为决定
所以说到这边, 再次印证 "HDL是来描述你的电路行为 而不是电路行为由HDL决定"
你写的 code 该怎麽写 有没有意义(果) 完全决定在你欲描述电路的行为上 (因)
不确定电路的行为, 你如何描述?
你之所以问这问题很清楚的告诉大家 你仅是在打字 不是在写code(描述)
若这样的坏习惯不能更正, 那你肯定不适合数位电路设计, 至少在 cell-based flow
我只有一个建议, 请你多问问"自已": 为何这样写 而不那样写
当你"苦思一整天试验一整天"仍然不得其门而入, 再将你的问题提出
否则一个无法思考的人 就算有途径解决问题,
然而他在该领域的水平可能很难提升
看了你许多问题, 我觉得你也许程度没问题, 但是不懂思考, 这样很可惜
无意贬损你, 而是期待你有更大的进步
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.141.101.203
1F:推 tkhan:中肯,这些东西都是可以"试"出来的.. 06/23 14:56
2F:→ pow:已经很多人讲过类似的话了 他如果懂就不会问这种问题了 06/23 19:46
3F:→ ccjin:case => 多工器 if elseif elseif 会造成多个多工器重叠 06/24 00:26
4F:推 CuckooBoy:谢谢 06/24 00:32
5F:→ Maddulin:case 是 parallel 形态, if else if ... 是 serial 形态 06/24 01:08
6F:→ Maddulin:case 不一定是多工器, if else if...也非重叠,而是叠加 06/24 01:09
※ 编辑: Maddulin 来自: 220.141.96.154 (06/24 08:59)