作者e1090128 (肥龜)
看板Electronics
標題[請益] verilog條件運算子問題請教
時間Wed Oct 11 16:03:30 2017
小弟最近給子電路寫output時有個小問題
以下是我的程式碼
output wire [9:0] oDATA
reg chg;
wire js=chg;
assign oDATA=(js == 1'b1) ? {sub[10:3],2'b0}:10'b0;
關於sub的部分都是我之間的運算式,之前都有確認是正常的
有問題的是我oDATA的部分像上面這樣寫會有問題,實際跑FPGA出來會不正常
但不用條件運算式直接寫
assign oDATA={sub[10:3],2'b0};
是可以正常執行的,請問各位大大這是甚麼原因造成的?有甚麼辦法解決嗎?
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.234.232
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1507709013.A.CF3.html
→ hsucheng: 為什麼還要再宣告一個wire? 10/11 18:44
推 mmonkeyboyy: 為什麼要reg chg才對 10/11 20:19
推 mmonkeyboyy: 我想正確答案都不我和一樓講的那個 你只其實有一個不 10/11 20:24
→ mmonkeyboyy: 太合理的東西被你宣告了XD 10/11 20:25
→ mmonkeyboyy: 你可以再想想 拿掉一個東西我想電路就會正確了 10/11 20:26
→ mmonkeyboyy: 你可以查查assign if的用法 10/11 20:26
→ e1090128: wire oDATA是試驗時用的,應該可以不需要,chg寫reg 是 10/11 22:02
→ e1090128: 因為有寫在always 裡,但怕是判別式裡不能用reg 才有改 10/11 22:02
→ e1090128: 成wire 10/11 22:02
→ mmonkeyboyy: 所以你知道那裡有問題了嗎? 10/11 22:42
→ mmonkeyboyy: BTW 你那樣寫 態一樣會繼承 所以根本沒差 10/11 22:43
→ mmonkeyboyy: 那是硬體電路 不要用軟體想法去想 那是一條線 10/11 22:43
→ e1090128: 有問題的就是assign那條不能用條件運算子使用,會出錯, 10/11 23:06
→ e1090128: 想知到為什麼不能這樣使用,並想知到如何解決,因為我看 10/11 23:06
→ e1090128: 到的書都沒有寫到這部分,感謝 10/11 23:06
推 mmonkeyboyy: @_@ 你把 output "wire" 的wire拿掉看看 10/11 23:10
推 mmonkeyboyy: 一個小觀念 reg 不是一定指register 10/11 23:14
→ mmonkeyboyy: 它指的是一個會變化的信號 10/11 23:14
→ mmonkeyboyy: wire就一定是 wire了 是一條線連過去這樣 10/11 23:14
推 mmonkeyboyy: 我記得uc berkeley有一篇小文件講這個 講很仔細 10/11 23:21
→ mmonkeyboyy: 很多目前你synthesis不過 儲simulate會過都是這樣 10/11 23:22
推 Jielolz: wire js; 10/12 01:41
→ Jielolz: assign js = chg; 10/12 01:41
→ e1090128: J大的這方法試過了也不太行 10/12 16:32
推 BellCranell: 改成output reg [9:0] oDATA 10/12 20:15
推 amistad: 為什麼要用FPGA 看不懂的方式去寫?直接按範例方式去寫就 10/12 20:48
→ amistad: 好。一般複雜的combination logic 習慣用 always@(*) 方 10/12 20:49
→ amistad: 式去寫。FPGA 弄不出來,也沒有可能他根本搞不清楚你要 10/12 20:49
→ amistad: 要做什麼。 10/12 20:50
→ amistad: 與其花時間在探索語法問題上,除非你要寫FPGA compiler, 10/12 20:51
→ amistad: 不然建議專注在主要的問題上。 10/12 20:52
推 bakerly: 你有寫出來的部分都沒問題,問題一定出在沒寫出來的部分 10/12 21:33
→ bakerly: 。 10/12 21:33
推 tkhan: 屎拉一半就要別人幫忙擦屁股.. 10/12 22:52
推 mmonkeyboyy: output 不用改就是reg了 因為那個只有在有always才要 10/12 23:15
→ mmonkeyboyy: 我也同意樓上 最近一堆這種文@_@ 真的是老師沒教好 10/12 23:16
→ mmonkeyboyy: 然後都是丟上來請大家幫忙debug debug有沒有用都不知 10/12 23:16
→ mmonkeyboyy: 第一句有點 output不用改reg就是了 除非是always 10/12 23:17
推 BellCranell: 有點像是在隔空抓藥的感覺 ... 10/12 23:23
推 ericute: 問題應該是你沒寫出來的地方,其他部分補上來看看 10/12 23:27
→ ericute: 加油 10/12 23:28
推 BellCranell: 要不要貼chg的部分... 10/13 02:33
→ e1090128: 謝謝bakerly和ericute兩位大大的提醒,問題真的是出在al 10/13 16:54
→ e1090128: always裡,因為chg訊號不同步而出錯,現已修正好成功了 10/13 16:55
→ e1090128: 因為我是自己學,實驗室也沒有其他人會,在網路上也找 10/13 16:56
→ e1090128: 不太到相關的論壇可以問問題,如果有人知道相關的 10/13 16:58
→ e1090128: verilog請跟大家一起分享學習一下,謝謝 10/13 16:58
推 mmonkeyboyy: 網路上有好多相關教學文件 先看一下吧q_q 10/13 20:19
→ mmonkeyboyy: 結果你其實還沒有遇到跑不過的問題Q_Q 10/13 20:19
→ mmonkeyboyy: 那個FPGA COMPILER已經好聰明了orz 10/13 20:20
→ e1090128: 我是覺得編譯器不過的還有方向,但過了後有結果錯誤就很 10/13 21:36
→ e1090128: 麻煩了 10/13 21:36
推 mmonkeyboyy: a..我講的不是這件事 我講的是標準的問題 10/13 21:48
→ mmonkeyboyy: 不過反正很多人也不是很在乎這事就是了@_@ 10/13 21:48