|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
高手幫我看看這個(gè)狀態(tài)機(jī)設(shè)計(jì)(Verilog描述,序列檢測(cè)) |
| 作者:daiduohao 欄目:EDA技術(shù) |
MODULE set_det(clk,seqIn,rst,detOut); input clk,seqIn,rst; OUTPUT detOut; reg[5:0] state; wire detOut; parameter Idle=6'b000001, A=6'b000010, B=6'b000100, C=6'b001000, D=6'b010000, E=6'b100000; assign detOut=((state==D)&&(seqIn==0))? 1'b1:1'b0; always@(posedge clk or negedge rst) if (!rst) begin state<=Idle; end else casex(state) Idle:if (seqIn==1) state<=A; else state<=Idle; A:if (seqIn==0) state<=B; else state<=A; B:if (seqIn==0) state<=C; else state<=A; C:if (seqIn==1) state<=C; else state<=Idle; D:if (seqIn==0) state<=E; else state<=A; E:if (seqIn==1) state<=A; else state<=C; default state<=Idle; endcase endMODULE 圖片給出了警告,編譯器是FPGA Compiler,Q2下編譯的 |
| 2樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/8/31 21:22:00 發(fā)布:
看不到圖片 不過(guò),你用的時(shí)雙邊沿促發(fā),并且在進(jìn)程中還判斷敏感信號(hào),估計(jì)就是這里。always@(posedge clk or negedge rst)把negedge rst去掉就可以了。別的應(yīng)該不用動(dòng)了 |
|
| 3樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/8/31 21:27:00 發(fā)布:
另外 else 開(kāi)頭結(jié)尾出少begin -end |
|
| 4樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/8/31 22:04:00 發(fā)布:
哎呀,突然看到少了很多呀,每個(gè)case,超過(guò)一句的都需要 |
|
| 5樓: | >>參與討論 |
| 作者: daiduohao 于 2005/9/1 3:46:00 發(fā)布:
RE ???? 就一句話,不需要begin----end啊,而且casex語(yǔ)句分支有if--else,不需要額外begin和end.你編譯一下試試,語(yǔ)法的常識(shí)我還是有的。 還有一點(diǎn),我敏感量并沒(méi)有用到雙邊沿檢測(cè),用的異步復(fù)位,如果按照你的修改就成同步復(fù)位了,與我的設(shè)計(jì)意圖不符合。 |
|
| 6樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/9/1 9:17:00 發(fā)布:
不能那么用的,你可以用兩個(gè)狀態(tài)來(lái)檢測(cè)rst,但不可這么用 |
|
| 7樓: | >>參與討論 |
| 作者: crazywolf 于 2005/9/1 13:30:00 發(fā)布:
?? 我覺(jué)的rst可以這么用 最好還是不要這樣寫(xiě)狀態(tài)機(jī),還是三段論寫(xiě)法比較好 樓主這樣寫(xiě)我看不見(jiàn)敏感表? |
|
| 8樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/9/1 13:57:00 發(fā)布:
想一下,這么做很不穩(wěn)定呀 想一下在一個(gè)信號(hào)的上升沿對(duì)一個(gè)信號(hào)進(jìn)行采樣。不穩(wěn)定呀。 再加上這種寫(xiě)法就像兩個(gè)進(jìn)程一樣,不允許呀。 |
|
| 9樓: | >>參與討論 |
| 作者: f0rmat 于 2005/9/1 14:03:00 發(fā)布:
呵呵,樓主的狀態(tài)機(jī)有兩個(gè)跳不到 呵呵,樓主的狀態(tài)機(jī)有兩個(gè)跳不到,你可以看看,什么時(shí)候能跳到D,E? 這樣是一定會(huì)出問(wèn)題的. 樓主的代碼寫(xiě)法的風(fēng)格也是見(jiàn)過(guò)不少的,個(gè)人認(rèn)為不好,但是很多大公司給出來(lái)的參考代碼都是這個(gè)風(fēng)格,也就不亂評(píng)價(jià)了. 樓主看看你的warning是不是這個(gè)問(wèn)題. |
|
| 10樓: | >>參與討論 |
| 作者: 雷風(fēng) 于 2005/9/1 14:08:00 發(fā)布:
always@(posedge clk or negedge rst) 這種寫(xiě)法也可以,主要是一些參考書(shū)都這樣寫(xiě),我也這樣寫(xiě)過(guò)東西,沒(méi)什么問(wèn)題的,這樣就是異步復(fù)位 為什么用casex,不直接用case? 還有,你的警告在哪里 |
|
| 11樓: | >>參與討論 |
| 作者: f0rmat 于 2005/9/1 17:47:00 發(fā)布:
warning 他的warning肯定是跳不到d,e兩個(gè)狀態(tài)造成得. |
|
| 12樓: | >>參與討論 |
| 作者: daiduohao 于 2005/9/1 21:48:00 發(fā)布:
re 搞定了! C:if (seqIn==1) state<=C; else state<=Idle; 應(yīng)該是 C:if (seqIn==1) state<=D; else state<=Idle; to 吳明詩(shī):敏感變量檢測(cè)沒(méi)有任何問(wèn)題,也不存在可靠性的問(wèn)題,我從來(lái)都是這個(gè)搞。 |
|
| 13樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/9/1 21:52:00 發(fā)布:
呵呵,知道了,我可不會(huì)這樣用的,會(huì)出問(wèn)題的 以前用maxplus時(shí)間長(zhǎng)了,那個(gè)就不行了。 |
|
| 14樓: | >>參與討論 |
| 作者: daiduohao 于 2005/9/1 21:52:00 發(fā)布:
re warning是說(shuō)輸出被強(qiáng)拉到0了,實(shí)際上是狀態(tài)機(jī)轉(zhuǎn)不到D造成的。比較低級(jí)的錯(cuò)誤,但是警告說(shuō)強(qiáng)拉到0使我一頭霧水。 謝謝f0rmat! |
|
| 15樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2005/9/1 21:53:00 發(fā)布:
不過(guò),摟主可要細(xì)心一些呀,才這么一點(diǎn)就出問(wèn)題了 |
|
| 16樓: | >>參與討論 |
| 作者: smz 于 2009/4/10 15:10:30 發(fā)布:
異步復(fù)位很常用的沒(méi)問(wèn)題 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |