[問題] verilog合成出我不要的東西

看板Electronics作者 (kmdick)時間7年前 (2018/05/14 22:02), 7年前編輯推噓22(22045)
留言67則, 13人參與, 7年前最新討論串1/1
小弟在寫always時想要合出flipflop但是不知道為什麽卻跑出latch https://i.imgur.com/izT2jN4.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.215.224.161 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1526306549.A.D42.html

05/14 22:14, 7年前 , 1F
因為你自己的信號又放進去判斷句就會這樣
05/14 22:14, 1F
不是很懂,平常寫reset和clock不是也這樣寫嗎

05/14 22:24, 7年前 , 2F
我比較好奇不加clock真的可以合出flip-flop嗎?
05/14 22:24, 2F
應該不是認字吧XD ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 22:52:10 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 22:53:01

05/14 23:19, 7年前 , 3F
不然你哪個訊號有類似clock的功能? stop嗎?
05/14 23:19, 3F
那個是兩個按鈕 沒按的時候是1按下去變0 我原本是都用negedge,後來想說改一個pos一個neg看看會不會有差 結果沒差

05/14 23:25, 7年前 , 4F
另外最後else應該進不去吧,前面兩塊就包含所有進always條件
05/14 23:25, 4F
※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:33:54 會吧 兩個1bit訊號 有4種組合 前面佔3種 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:35:39

05/14 23:35, 7年前 , 5F
不然你把他合成的拿來跑模擬,看是不是符合你的敘述啊
05/14 23:35, 5F
不符合

05/14 23:36, 7年前 , 6F
沒吃clock當然是latch
05/14 23:36, 6F
所以我想問他是怎麼判斷clock啊... 而且他合出來的電路根本沒有偵測negedge 這點我跟助教也確認過我沒搞錯了

05/14 23:36, 7年前 , 7F
數位邏輯重唸一下
05/14 23:36, 7F
不好意思 可能小弟比較笨才會拿不到99,然後剛好讀學店助教也不太知道為什麼會跑出 latch QQ

05/14 23:38, 7年前 , 8F
可能你的敘述寫得跟你要的功能不一致,而程式覺得照敘述
05/14 23:38, 8F

05/14 23:38, 7年前 , 9F
你要的東西可以用latch 滿足
05/14 23:38, 9F
不 ,我做出來的結果是如果是用d latch合出來的根本不會偵測negedge 我按鈕按著那個d latch就會一直enable ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:43:32 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:45:44 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:48:32 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:49:33

05/14 23:53, 7年前 , 10F
這是他合出來的東西 如果reset_start是0的時候這個latch會被enable 如同前面所說 reset_start是一個按下去之後為0的按鈕,而我想要我按下去的時候 coun tdown_enable這個reg會取補數 但是合出來的電路變成我只要還按著,這個latch就會一直取補數,結果常常有按跟沒按 一樣,因為他取偶數次補數 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:54:28 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:55:19 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:58:22 ※ 編輯: nctukmdick (140.113.67.100), 05/14/2018 23:59:04 ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 00:10:27

05/15 00:20, 7年前 , 11F
取補數幹嘛用if else寫... 改掉應該就沒問題了
05/15 00:20, 11F
我原本是用not 也一樣 ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 00:24:17

05/15 00:24, 7年前 , 12F
換個助教試試..
05/15 00:24, 12F
好吧QQ ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 00:27:21

05/15 00:28, 7年前 , 13F
還有把counter enable用另一個reg去存值試試
05/15 00:28, 13F

05/15 00:37, 7年前 , 14F
這樣寫看的好不舒服...
05/15 00:37, 14F
改到崩潰 同學的各種偏方都用一下的結果XD ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 00:38:51

05/15 00:40, 7年前 , 15F
所以解決了嗎? 直接用一個reg去存counter enable的
05/15 00:40, 15F

05/15 00:40, 7年前 , 16F
05/15 00:40, 16F
可是我本來就把他宣告成reg 不是很懂您的意思 ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 00:44:49

05/15 00:50, 7年前 , 17F
我明天試試 睡覺去了
05/15 00:50, 17F

05/15 01:06, 7年前 , 18F
可以把counter enable另寫個always block 不然很亂
05/15 01:06, 18F

05/15 01:48, 7年前 , 19F
always @(negedge reset_start) cnt_en <= ~cnt_en;
05/15 01:48, 19F

05/15 02:12, 7年前 , 20F
不用叫clock也可以哦~
05/15 02:12, 20F

05/15 02:12, 7年前 , 21F
除非你是用fpga系列的 那就一定要用某些名
05/15 02:12, 21F

05/15 02:13, 7年前 , 22F
你的電路應該是經過簡化後得到用latch就可以了
05/15 02:13, 22F

05/15 02:14, 7年前 , 23F
就我說你的 你的sensitive list上的東西又連回去邏輯
05/15 02:14, 23F

05/15 02:15, 7年前 , 24F
就會有造成此類情況 你平常用沒有是因為你沒有拿clk
05/15 02:15, 24F

05/15 02:15, 7年前 , 25F
下去做判斷句
05/15 02:15, 25F
這個問題我有試過了 砍成這樣結果還是latch https://i.imgur.com/cE7HYM7.jpg
QQ 有點懷疑是因為我其他地方的code造成這個問題...

05/15 02:16, 7年前 , 26F
你可以看平常用的asyc rst做法和圖
05/15 02:16, 26F

05/15 02:16, 7年前 , 27F
再把你想要的電路換過去看看
05/15 02:16, 27F

05/15 02:16, 7年前 , 28F
如果你真不知道我在講什麼...就把opt關了 有時就好了
05/15 02:16, 28F
好喔 我再試試看

05/15 02:17, 7年前 , 29F
這種情況很多 在 gated clk就有很多了
05/15 02:17, 29F
※ 編輯: nctukmdick (140.113.136.218), 05/15/2018 11:39:24

05/15 11:43, 7年前 , 30F
nctu 交大?
05/15 11:43, 30F
國防 ※ 編輯: nctukmdick (140.113.67.100), 05/15/2018 12:28:37

05/15 21:02, 7年前 , 31F
用哪套軟體、哪一版
05/15 21:02, 31F

05/15 21:46, 7年前 , 32F
如果你這段砍成這樣還有一樣問題 那就是其他code了
05/15 21:46, 32F

05/15 21:47, 7年前 , 33F
還有 下次問問題最好能付上所有code&軟體的資訊
05/15 21:47, 33F

05/15 21:48, 7年前 , 34F
要不然大家是隔空抓藥哦~
05/15 21:48, 34F

05/15 21:48, 7年前 , 35F
還有 都是學生了 不是該去問老師嗎....
05/15 21:48, 35F
一個禮拜只有一次課,想說快點解決不要等到下禮拜QQ 謝謝大家給的建議

05/15 22:22, 7年前 , 36F
你看看你精簡過後的code,reset_start 為0時countdown_ena
05/15 22:22, 36F

05/15 22:22, 7年前 , 37F
ble=~countdown_start,reset_start=1時countdown_enable
05/15 22:22, 37F

05/15 22:22, 7年前 , 38F
不變,這不就是latch嗎?
05/15 22:22, 38F

05/15 22:45, 7年前 , 39F
他這段是latch但他其他stop那裡應該也是有類似的才
05/15 22:45, 39F

05/15 22:46, 7年前 , 40F
會造成這個情況 不過 是誰教寫這段code我比較好奇
05/15 22:46, 40F

05/15 22:47, 7年前 , 41F
要不然stop posedge其他會合出stop的ff
05/15 22:47, 41F

05/15 22:48, 7年前 , 42F
一個小概念 有 edge+ 相對應的 1 or 0 就會合出latch
05/15 22:48, 42F

05/15 22:49, 7年前 , 43F
posedge + ==1 + 另一個 ==0條件 這樣就會出latch
05/15 22:49, 43F

05/15 23:09, 7年前 , 44F
你合成有create clock嗎
05/15 23:09, 44F
我後來有想要再加clock進去試試看但是合成時wire會直接被砍掉,我有用synthesis ke ep了@@

05/15 23:10, 7年前 , 45F
至於理由和背後原理就再說了
05/15 23:10, 45F
※ 編輯: nctukmdick (140.113.67.100), 05/16/2018 18:57:14

05/16 18:58, 7年前 , 46F
孩子你整個code裡面有clk訊號嗎……
05/16 18:58, 46F

05/16 18:58, 7年前 , 47F
至少現在原版&刪減版的always內完全沒看到像是clk的東
05/16 18:58, 47F

05/16 18:58, 7年前 , 48F
西
05/16 18:58, 48F

05/16 18:58, 7年前 , 49F
stop感覺是控制訊號吧
05/16 18:58, 49F

05/16 19:00, 7年前 , 50F
你stop如果要用posedge trigger
05/16 19:00, 50F

05/16 19:00, 7年前 , 51F
那直接改成這樣
05/16 19:00, 51F

05/16 19:00, 7年前 , 52F
always@(posedge clk, negedge rst)
05/16 19:00, 52F

05/16 19:05, 7年前 , 53F
結論,請提供這個always block有clock功能的訊號線!
05/16 19:05, 53F

05/16 19:05, 7年前 , 54F
而不是像stop這種控制訊號來trigger
05/16 19:05, 54F

05/17 01:52, 7年前 , 55F
看monkey大的推文後回去試一下
05/17 01:52, 55F

05/17 01:52, 7年前 , 56F

05/17 01:52, 7年前 , 57F
只要把指定的按鈕當clock,另一個按鈕當reset即可合
05/17 01:52, 57F
我是以為tool會這樣判定啊QQ 所以我才好奇寫的格式跟平常差不多而且有打edge trigger 怎麼會變latch 因為latch明明就只能level trigger==

05/17 01:52, 7年前 , 58F
成FF
05/17 01:52, 58F

05/17 01:52, 7年前 , 59F

05/17 01:52, 7年前 , 60F

05/17 01:52, 7年前 , 61F
因為countdown_enable是以reset_start當clock,
05/17 01:52, 61F

05/17 01:52, 7年前 , 62F
temp是以stop當clock,reset_start當reset,
05/17 01:52, 62F

05/17 01:52, 7年前 , 63F
所以要分成不同always寫才不會合出latch
05/17 01:52, 63F

05/17 02:40, 7年前 , 64F
樓上正解哦 或是你把optimization取消也可能會出現
05/17 02:40, 64F

05/17 02:48, 7年前 , 65F
不一定需要clock/clk
05/17 02:48, 65F

05/17 13:28, 7年前 , 66F
我想寫個慘字
05/17 13:28, 66F

05/17 21:47, 7年前 , 67F
樓上 為什麼啊XD
05/17 21:47, 67F
※ 編輯: nctukmdick (101.12.162.112), 05/18/2018 15:22:30 ※ 編輯: nctukmdick (140.113.67.100), 05/18/2018 15:30:00
文章代碼(AID): #1Q-PRrr2 (Electronics)