把 状态机的多个 状态这样放置有什么好处 ?
本帖最后由 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,
但还是 列出来了放在上面,而且后面还是用 逗号 分隔,这样写有什么好处 ? c_idle,
c_tRCD,
c_tRFC,
c_cl,
c_rdata,
在這些state時和c_wdata是執行一樣的動作。
LZ需要看k熟verilog語法。
嗯,知道了,
再请教下
下面这样
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 17:47 编辑
看waveform比較好看,可以看data 是在 clock rising edge 後才變化的,
如果有接一些model或電路中有一些standard cell combination circuit,剛好clock穿過這些combination circuit,
這樣作可以避免一些simulation上的錯誤,這些來自simulator event queue 內的 event 順序是不保證先誰先後,
在不同的simulator上會有不同的結果。
感谢赐教,呵呵,感觉知道点你 说的意思,
还不是太明白
“剛好clock穿過這些combination circut”“standard cell combination circuit”什么意思?
有没有这方面的资料 请问 这个延时 用还是不用,以及延迟多少 是依据什么确定的 ?
有没有相关资料 combinaton circuit 就是指不含DFF/latch之類有記憶性的電路,
一般作clock gating動作就會讓clock經過combination circuit的問題,
基於一些理由,有時候在verilog code manual instance 一些 standard cell 對 clock 作一些處理(開關, mux),
這個在ASIC design很常見,不過純FPGA design上應該是不太會看到這些東西的。
這delay如果不是要避simulation上的錯誤,什麼值高興就好,
只要不要超過clock period,常看到的 1。 请教 加#tDLY只是因为仿真软件的对数据处理 原因 才加的吧? 虽然加了 #tDLY 应该还是在功能仿真的范围内吧?
加#tDLY应该和时序仿真 还没有任何关系吧
刚看到一个定义 ,这个应该叫内定延时,
请问下,是不是所有 <= 费阻塞赋值,verilog代码 都需要加上这个 延时 ?
在使用altera的ddr控制器的时候,quartus ii 会自动生成一个例子代码,
但我 看他的例子代码里的<=费阻塞赋值都没有加这个 内定延时#,
这样 quartus ii生成的这些例子代码在仿真时 ,是不是都有问题 ?? 加这个#tDLY 延时 ,是不是 就是为了 在仿真的时候 模拟 实际电路的 惯性延时,还是主要为了防止 仿真软件的clock gating出错? 如果是全rtl code,加和不加行為是一樣的,如果是altera提供的範例,應該是不會有問題的。
雖然digital circuit design現在是用verilog在implement,看起來像在寫code,
但是想法應該要反過來,應該是腦袋裡先有電路,後在用verilog implement出來。
本帖最后由 atom100 于 2014-10-2 13:15 编辑
感谢,
现在我明白 #tDLY 仅仅在仿真的时候才有用,但仿真这个代码的时候 就是不明确 什么时候 该加(这代码是lattice的,加了 #tDLY ),什么时候不加(不加的例子代码是altera的,没有加 #tDLY )?
写 verilog的代码的时候,而且要拿去仿真,那这段代码 加还是不加#tDLY?
這真的就看你喜歡哪種,這個可以算個人的風格,解non ideal clock(clock 經過一些combination circuit) simulation 的錯誤有很多種解法,
在sequence circuit 後加 delay 只是剛好可以順便避掉這問題(不過前提是 delay 要比 clock 上 combination circuit 大)。 "clock 經過一些combination circuit"
请教,这句话的意思,呵呵,
应该不是指的行波时钟吧?
是 clock 要对一些 经过了 combination circuit 的信号 采样?
本帖最后由 atom100 于 2014-10-3 00:38 编辑
我想是不是lattice器件比altera响应速度慢,所以加了#tDLY ,而altera 响应速度足够快,所以不会出问题 ?
解non ideal clock,除了 加 #tDLY,还有什么其他的方法 ? 本帖最后由 atom100 于 2014-10-3 00:09 编辑
jarodzz 发表于 2014-10-2 09:17
如果是全rtl code,加和不加行為是一樣的,如果是altera提供的範例,應該是不會有問題的。
雖然digital cir ...
请教 rtl code 应该都是可综合的吧?除了rtl code,还有什么code?这方面了解的少,望赐教
#tDLY 始终没有弄明白,这个延迟 什么情况下要加,什么情况下可以不加,是否和不同厂家的器件有关系?
还是和 不同的人 的 写仿真代码习惯有关系(在 “clock 經過一些combination circuit”的情况下) 用不同方法都可以避免?一种方法就是加 #tDLY ,但其他的方法是什么?
哪位 知道,望赐教啊?
页:
[1]