搜索
bottom↓
回复: 18

把 状态机的多个 状态这样放置有什么好处 ?

[复制链接]

出0入0汤圆

发表于 2014-10-1 15:29:37 | 显示全部楼层 |阅读模式
本帖最后由 atom100 于 2014-10-1 15:42 编辑

   i_ready:
             case (cState)
               c_idle,
               c_tRCD,
               c_tRFC,
               c_cl,
               c_rdata,
               c_wdata:  begin
                           `sdr_COMMAND <= #tDLY NOP;
                           sdr_CKE <= #tDLY 1;
                           sdr_BA  <= #tDLY 2'b11;
                           sdr_A   <= #tDLY 12'b1111_1111_1111;
                         end
               c_ACTIVE: begin
                           `sdr_COMMAND <= #tDLY ACTIVE;
                           sdr_CKE <= #tDLY 1;
                           sdr_BA  <= #tDLY sys_A[BA_MSB:BA_LSB];//bank
                           sdr_A   <= #tDLY sys_A[RA_MSB:RA_LSB];//row
                         end
看到一个代码,状态变化 是在另一个always里切换的, 但对应状态 在此处的always 里没有 对应的输出,
就是下面这几个状态
                   c_idle,
               c_tRCD,
               c_tRFC,
               c_cl,
               c_rdata,
但还是 列出来了放在上面,而且后面还是用 逗号 分隔,这样写有什么好处 ?

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-10-1 15:39:11 | 显示全部楼层
               c_idle,
               c_tRCD,
               c_tRFC,
               c_cl,
               c_rdata,
在這些state時和c_wdata是執行一樣的動作。
LZ需要看k熟verilog語法。

出0入0汤圆

 楼主| 发表于 2014-10-1 15:45:22 | 显示全部楼层
嗯,知道了,
再请教下
下面这样
always @(iState or cState or clkCNT)
  case (iState)
    i_PRE:
         syncResetClkCNT <= #tDLY (NUM_CLK_tRP == 0) ? 1 : 0;
    i_AR1,
    i_AR2:
         syncResetClkCNT <= #tDLY (NUM_CLK_tRFC == 0) ? 1 : 0;
    i_NOP:
         syncResetClkCNT <= #tDLY 1;
    i_tRP:
         syncResetClkCNT <= #tDLY (`endOf_tRP) ? 1 : 0;
    i_tMRD:
         syncResetClkCNT <= #tDLY (`endOf_tMRD) ? 1 : 0;
    i_tRFC1,
    i_tRFC2:
         syncResetClkCNT <= #tDLY (`endOf_tRFC) ? 1 : 0;
    i_ready:
         case (cState)

那个  #tDL 应该  只是在仿真的时候起作用吧,延迟tDLY个时钟周期,而在综合的时候的时候是 被忽视的?
那么    在仿真的时候 加上这个#tDLY,有什么好处?

出0入0汤圆

发表于 2014-10-1 15:54:53 | 显示全部楼层
本帖最后由 jarodzz 于 2014-10-1 17:47 编辑

看waveform比較好看,可以看data 是在 clock rising edge 後才變化的,
如果有接一些model或電路中有一些standard cell combination circuit,剛好clock穿過這些combination circuit,
這樣作可以避免一些simulation上的錯誤,這些來自simulator event queue 內的 event 順序是不保證先誰先後,
在不同的simulator上會有不同的結果。

出0入0汤圆

 楼主| 发表于 2014-10-1 16:04:38 | 显示全部楼层
感谢赐教,呵呵,感觉知道点你 说的意思,
还不是太明白
“  剛好clock穿過這些combination circut”  “standard cell combination circuit”什么意思?
有没有这方面的资料

出0入0汤圆

 楼主| 发表于 2014-10-1 17:39:13 | 显示全部楼层
请问 这个延时 用还是不用,以及延迟多少 是依据什么确定的 ?
有没有相关资料

出0入0汤圆

发表于 2014-10-1 17:47:00 | 显示全部楼层
combinaton circuit 就是指不含DFF/latch之類有記憶性的電路,
一般作clock gating動作就會讓clock經過combination circuit的問題,
基於一些理由,有時候在verilog code manual instance 一些 standard cell 對 clock 作一些處理(開關, mux),
這個在ASIC design很常見,不過純FPGA design上應該是不太會看到這些東西的。


出0入0汤圆

发表于 2014-10-1 17:49:11 | 显示全部楼层
這delay如果不是要避simulation上的錯誤,什麼值高興就好,
只要不要超過clock period,常看到的 1。

出0入0汤圆

 楼主| 发表于 2014-10-1 18:25:36 | 显示全部楼层
请教 加  #tDLY  只是因为仿真软件的对数据处理 原因 才加的吧? 虽然加了 #tDLY 应该还是在功能仿真的范围内吧?

加  #tDLY  应该和  时序仿真 还没有任何关系吧

出0入0汤圆

 楼主| 发表于 2014-10-2 07:27:53 | 显示全部楼层
刚看到一个定义 ,这个应该叫  内定延时,
请问下,是不是  所有 <= 费阻塞赋值,verilog代码 都需要加上这个 延时 ?

出0入0汤圆

 楼主| 发表于 2014-10-2 08:06:41 | 显示全部楼层
在使用altera的ddr控制器的时候,quartus ii 会自动生成一个例子代码,
但我 看他的例子代码里  的<=费阻塞赋值都  没有加  这个 内定延时#,
这样   quartus ii  生成的这些例子代码  在仿真时 ,是不是都有问题   ??

出0入0汤圆

 楼主| 发表于 2014-10-2 09:07:42 | 显示全部楼层
加这个  #tDLY 延时 ,是不是 就是为了 在仿真的时候 模拟 实际电路的 惯性延时,还是主要为了防止 仿真软件的clock gating出错?

出0入0汤圆

发表于 2014-10-2 09:17:55 | 显示全部楼层
如果是全rtl code,加和不加行為是一樣的,如果是altera提供的範例,應該是不會有問題的。
雖然digital circuit design現在是用verilog在implement,看起來像在寫code,
但是想法應該要反過來,應該是腦袋裡先有電路,後在用verilog implement出來。

出0入0汤圆

 楼主| 发表于 2014-10-2 13:14:02 | 显示全部楼层
本帖最后由 atom100 于 2014-10-2 13:15 编辑

感谢,
现在我明白 #tDLY 仅仅在仿真的时候才有用,但仿真这个代码的时候 就是不明确 什么时候 该加(这代码是lattice的,加了 #tDLY ),什么时候不加(不加的例子代码是altera的,没有加 #tDLY )?
写 verilog的代码的时候,而且要拿去仿真,那这段代码 加还是不加  #tDLY  ?

出0入0汤圆

发表于 2014-10-2 14:54:36 | 显示全部楼层
這真的就看你喜歡哪種,這個可以算個人的風格,解non ideal clock(clock 經過一些combination circuit) simulation 的錯誤有很多種解法,
在sequence circuit 後加 delay 只是剛好可以順便避掉這問題(不過前提是 delay 要比 clock 上 combination circuit 大)。

出0入0汤圆

 楼主| 发表于 2014-10-2 22:17:55 | 显示全部楼层
"clock 經過一些combination circuit"
请教,这句话的意思,呵呵,
应该不是指的行波时钟吧?
是 clock 要对一些 经过了 combination circuit 的信号 采样  ?

出0入0汤圆

 楼主| 发表于 2014-10-2 22:20:30 | 显示全部楼层
本帖最后由 atom100 于 2014-10-3 00:38 编辑

我想是不是lattice器件比altera响应速度慢,所以加了  #tDLY ,而altera 响应速度足够快,所以不会出问题 ?
解non ideal clock,除了 加 #tDLY  ,还有什么其他的方法 ?

出0入0汤圆

 楼主| 发表于 2014-10-3 00:07:55 | 显示全部楼层
本帖最后由 atom100 于 2014-10-3 00:09 编辑
jarodzz 发表于 2014-10-2 09:17
如果是全rtl code,加和不加行為是一樣的,如果是altera提供的範例,應該是不會有問題的。
雖然digital cir ...


请教 rtl code 应该都是可综合的吧?除了rtl code,还有什么code?这方面了解的少,望赐教

出0入0汤圆

 楼主| 发表于 2014-10-7 20:04:05 | 显示全部楼层
  #tDLY 始终没有弄明白,这个延迟 什么情况下要加,什么情况下可以不加,是否和不同厂家的器件有关系?
还是和 不同的人 的 写仿真代码习惯有关系(在 “clock 經過一些combination circuit”的情况下)   用不同方法都可以避免?一种方法就是加   #tDLY ,但其他的方法是什么?
哪位 知道,望赐教啊?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-27 02:18

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

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