atom100 发表于 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;//bank
                           sdr_A   <= #tDLY sys_A;//row
                         end
看到一个代码,状态变化 是在另一个always里切换的, 但对应状态 在此处的always 里没有 对应的输出,
就是下面这几个状态
                   c_idle,
               c_tRCD,
               c_tRFC,
               c_cl,
               c_rdata,
但还是 列出来了放在上面,而且后面还是用 逗号 分隔,这样写有什么好处 ?

jarodzz 发表于 2014-10-1 15:39:11

               c_idle,
               c_tRCD,
               c_tRFC,
               c_cl,
               c_rdata,
在這些state時和c_wdata是執行一樣的動作。
LZ需要看k熟verilog語法。

atom100 发表于 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,有什么好处?

jarodzz 发表于 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上會有不同的結果。

atom100 发表于 2014-10-1 16:04:38

感谢赐教,呵呵,感觉知道点你 说的意思,
还不是太明白
“剛好clock穿過這些combination circut”“standard cell combination circuit”什么意思?
有没有这方面的资料

atom100 发表于 2014-10-1 17:39:13

请问 这个延时 用还是不用,以及延迟多少 是依据什么确定的 ?
有没有相关资料

jarodzz 发表于 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上應該是不太會看到這些東西的。


jarodzz 发表于 2014-10-1 17:49:11

這delay如果不是要避simulation上的錯誤,什麼值高興就好,
只要不要超過clock period,常看到的 1。

atom100 发表于 2014-10-1 18:25:36

请教 加#tDLY只是因为仿真软件的对数据处理 原因 才加的吧? 虽然加了 #tDLY 应该还是在功能仿真的范围内吧?

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

atom100 发表于 2014-10-2 07:27:53

刚看到一个定义 ,这个应该叫内定延时,
请问下,是不是所有 <= 费阻塞赋值,verilog代码 都需要加上这个 延时 ?

atom100 发表于 2014-10-2 08:06:41

在使用altera的ddr控制器的时候,quartus ii 会自动生成一个例子代码,
但我 看他的例子代码里的<=费阻塞赋值都没有加这个 内定延时#,
这样   quartus ii生成的这些例子代码在仿真时 ,是不是都有问题   ??

atom100 发表于 2014-10-2 09:07:42

加这个#tDLY 延时 ,是不是 就是为了 在仿真的时候 模拟 实际电路的 惯性延时,还是主要为了防止 仿真软件的clock gating出错?

jarodzz 发表于 2014-10-2 09:17:55

如果是全rtl code,加和不加行為是一樣的,如果是altera提供的範例,應該是不會有問題的。
雖然digital circuit design現在是用verilog在implement,看起來像在寫code,
但是想法應該要反過來,應該是腦袋裡先有電路,後在用verilog implement出來。

atom100 发表于 2014-10-2 13:14:02

本帖最后由 atom100 于 2014-10-2 13:15 编辑

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

jarodzz 发表于 2014-10-2 14:54:36

這真的就看你喜歡哪種,這個可以算個人的風格,解non ideal clock(clock 經過一些combination circuit) simulation 的錯誤有很多種解法,
在sequence circuit 後加 delay 只是剛好可以順便避掉這問題(不過前提是 delay 要比 clock 上 combination circuit 大)。

atom100 发表于 2014-10-2 22:17:55

"clock 經過一些combination circuit"
请教,这句话的意思,呵呵,
应该不是指的行波时钟吧?
是 clock 要对一些 经过了 combination circuit 的信号 采样?

atom100 发表于 2014-10-2 22:20:30

本帖最后由 atom100 于 2014-10-3 00:38 编辑

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

atom100 发表于 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?这方面了解的少,望赐教

atom100 发表于 2014-10-7 20:04:05

#tDLY 始终没有弄明白,这个延迟 什么情况下要加,什么情况下可以不加,是否和不同厂家的器件有关系?
还是和 不同的人 的 写仿真代码习惯有关系(在 “clock 經過一些combination circuit”的情况下)   用不同方法都可以避免?一种方法就是加   #tDLY ,但其他的方法是什么?
哪位 知道,望赐教啊?
页: [1]
查看完整版本: 把 状态机的多个 状态这样放置有什么好处 ?