|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
verilog中這種寫法可取嗎?高手解釋一下吧! |
| 作者:radeonlcl 欄目:EDA技術(shù) |
always @(posedge clk1 or posedge clk2) 怎么我看書上 一會說可以:在表示時序和組合邏輯的事件控制表達式中,如果有多個沿和多個電平,期間要用or連接。 一會又說不好:每個表示時序的always塊只能由一個時鐘跳變沿出發(fā),置位或復(fù)位最好也由這個時鐘跳變沿觸發(fā)。 我都暈了,到底應(yīng)該怎樣? |
| 2樓: | >>參與討論 |
| 作者: xjg1111 于 2005/1/29 22:04:00 發(fā)布:
re 這樣用不能被綜合的,想想數(shù)字電路中怎么可能有兩個時鐘來觸發(fā)一個D觸發(fā)器??加個與門就另當別論了!! always @(posedge rst or posedge clk) if (rst) .... else begin .... end 像這種是可以綜合的 可以綜合為異步復(fù)位(置1或清0)的觸發(fā)器 |
|
| 3樓: | >>參與討論 |
| 作者: radeonlcl 于 2005/1/29 22:16:00 發(fā)布:
那除了異步清零觸發(fā)器還有什么情況可以這么寫? |
|
| 4樓: | >>參與討論 |
| 作者: 阿基里奧斯 于 2005/2/1 15:08:00 發(fā)布:
綜合工具處理也不一樣吧 感覺這種寫法不太直觀, 描述嘛,應(yīng)該是規(guī)范優(yōu)先, 不同綜合工具可能也有限制,只知道DC是把其中一個當時鐘,另外 一個做異步復(fù)位信號來理解。 |
|
| 5樓: | >>參與討論 |
| 作者: ulsii 于 2005/2/1 17:29:00 發(fā)布:
應(yīng)該可以綜合 應(yīng)該可以綜合,但是綜合的結(jié)果一定是異步的 結(jié)果應(yīng)該是觸發(fā)器的時鐘端是 clk1 & clk2 |
|
| 6樓: | >>參與討論 |
| 作者: xjg1111 于 2005/2/1 19:28:00 發(fā)布:
沒過可以當成兩個時鐘來綜合的!! 一般是當成一個異步復(fù)位,一個時種來處理。 如果當成兩個時鐘來綜合的話,增長了異步設(shè)計的氣焰,應(yīng)該不會有編譯器這么處理。 同步設(shè)計才是首選。 |
|
| 7樓: | >>參與討論 |
| 作者: ltvxworks 于 2005/2/2 8:27:00 發(fā)布:
不可取 "因為阻塞賦值,所以如果前一個always模塊的復(fù)位信號先到0時刻,則y1,y2都會取1,而如果后一個always模塊的復(fù)位信號先到0時刻,則y1,y2都會取0。 為什么那? " 引用樓主:其實如果代表實際中就不知道是哪個always模塊的復(fù)位信號先到0時刻,就有不確定性,那么就沒有必要用了。 而用非阻塞賦值,你所想要的答案是確定的,而且可以用到一些技巧中。 比如 input rxd; input clk16x; input rst; reg rxd1; reg rxd2; reg clk1x_enable; reg [3:0] no_bits_rcvd; always @(posedge clk16x or posedge rst) begin if (rst) begin rxd1 <= 1'b1; rxd2 <= 1'b1; end else begin rxd1 <= rxd; rxd2 <= rxd1; end end always @(posedge clk16x or posedge rst) begin if (rst) clk1x_enable <= 1'b0; else if (!rxd1 && rxd2) clk1x_enable <= 1'b1 ; else if (no_bits_rcvd == 4'B1001) begin clk1x_enable <= 1'b0; end end 看到有這樣的說法,共同理解吧。 By using non_blocking statements it is made sure that right hand side of the statement is evaluated and stored before assignments are done. |
|
| 8樓: | >>參與討論 |
| 作者: ltvxworks 于 2005/2/2 8:31:00 發(fā)布:
回答錯地方了,也修改不了,不知道為什么 回答錯地方了,也修改不了,不知道為什么 |
|
| 9樓: | >>參與討論 |
| 作者: xjg1111 于 2005/2/2 10:40:00 發(fā)布:
RE 可以點以點帶面“l(fā)tvxworks 發(fā)表于 2005-2-2 08:31 EDA 技術(shù) ←返回版面 ”按此帖編輯的圖標,修改。改后要注明原因才可重新再發(fā)。 |
|
| 10樓: | >>參與討論 |
| 作者: wqi1012 于 2005/2/2 19:02:00 發(fā)布:
DC會報錯! 我記得DC在綜合這樣代碼時好像會報錯,好像是說同一個D觸發(fā)器不能被兩個時鐘驅(qū)動! 具體是Warning還是Error我也記不清了,大家可以寫一個試試! |
|
| 11樓: | >>參與討論 |
| 作者: radeonlcl 于 2005/2/2 21:16:00 發(fā)布:
如果不是clk1,clk2,是其他的信號那? 比如說一個是input1,一個是input2,不是時鐘那? |
|
| 12樓: | >>參與討論 |
| 作者: wqi1012 于 2005/2/3 11:14:00 發(fā)布:
和名字沒關(guān)系! 和名字好像沒有關(guān)系! 看你電路如何寫: 如果想樓上的寫成: always @(posedge input1 or posedge input2) begin if (input2) ...... else ...... end 那也是將input1當時鐘,input2當作一個異步的reset; 如果只是寫成: always @(posedge input1 or posedge input2) begin end input1和input2還是會人成是時鐘! |
|
| 13樓: | >>參與討論 |
| 作者: picklas 于 2005/2/4 7:41:00 發(fā)布:
re 使用兩個時鐘是一種錯誤的代碼形式,不是一種典型的方法,就算綜合器過得去也是有很大的潛在的問題。所以除了包含復(fù)位信號外,應(yīng)該只有一個工作時鐘。不要老是想著在always后面加兩個時鐘,遇到這種問題用改用更合理的其他辦法解決。 |
|
| 14樓: | >>參與討論 |
| 作者: littleou 于 2005/2/4 11:36:00 發(fā)布:
可以綜合的 決不推薦這樣寫 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |