|
技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
大家看這個代碼有什么問題嗎? |
作者:radeonlcl 欄目:EDA技術 |
夏宇聞verilog數字系統(tǒng)設計教程P147。 MODULE fbosc1(y1,y2,clk,rst) OUTPUT y1,y2; input clk,rst; reg y1,y2; always @(posedge clk or posedge rst) if(rst) y1=0; else y1=y2; always @(posedge clk or posedge rst) if(rst) y2=1; else y2=y1; endMODULE 因為阻塞賦值,所以如果前一個always模塊的復位信號先到0時刻,則y1,y2都會取1,而如果后一個always模塊的復位信號先到0時刻,則y1,y2都會取0。 為什么那? 如果吧阻塞賦值改成非阻塞賦值無論那個always的復位信號先到在always模塊結束時y1=0,y2=1是確定的,這是為什么? 哪位大哥幫忙解釋一下? |
2樓: | >>參與討論 |
作者: xjg1111 于 2005/1/30 15:14:00 發(fā)布:
像這種可以用全局時鐘的,我從來沒用想過用阻塞觸發(fā)! |
3樓: | >>參與討論 |
作者: wqi1012 于 2005/1/31 20:14:00 發(fā)布:
回復! 你這個問題是非阻塞賦值得概念問題. 非阻塞賦值所存的實時鐘沿前的值,在時鐘沿處,如果數值有變化,在下一周期才會體現出來! 我也不知道說的對不對,請其他高手指教 |
4樓: | >>參與討論 |
作者: xjg1111 于 2005/1/31 20:48:00 發(fā)布:
re 阻塞是語句執(zhí)行后,便執(zhí)行。 非阻塞是塊完全執(zhí)行后,塊內的一起執(zhí)行。 所以在實際運用中,為了避免毛毛刺兒的后級傳遞,盡量采用全局時鐘的非阻塞觸發(fā)。 * - 本貼最后修改時間:2005-1-31 21:04:18 修改者:xjg1111 |
5樓: | >>參與討論 |
作者: radeonlcl 于 2005/2/1 12:18:00 發(fā)布:
望高手指教,歡迎大家討論。 夏宇聞的書有些例子太別扭了,實際中大概根本沒有人這么用,他就是為了介紹他的概念故意編出來這么別扭的代碼來說明問題。 |
6樓: | >>參與討論 |
作者: ltvxworks 于 2005/2/2 8:28:00 發(fā)布:
有問題 "因為阻塞賦值,所以如果前一個always模塊的復位信號先到0時刻,則y1,y2都會取1,而如果后一個always模塊的復位信號先到0時刻,則y1,y2都會取0。 為什么那? " 引用樓主:其實如果代表實際中就不知道是哪個always模塊的復位信號先到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. |
7樓: | >>參與討論 |
作者: radeonlcl 于 2005/2/2 10:07:00 發(fā)布:
為什么會這樣? 如果前一個always模塊的復位信號先到0時刻,則y1,y2都會取1,而如果后一個always模塊的復位信號先到0時刻,則y1,y2都會取0。 ????????????????????????????? |
8樓: | >>參與討論 |
作者: xjg1111 于 2005/2/2 10:38:00 發(fā)布:
RE 贊同 ltvxworks 樓主的寫法的確有不確定性,在實際運用中這是不允許的。 |
9樓: | >>參與討論 |
作者: radeonlcl 于 2005/2/2 12:15:00 發(fā)布:
各位大哥,俺知道有不確定性啊,誰給解釋一下why? 小弟初學,看不懂啊。 |
|
|
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |