Electronics 板


LINE

先說我不是高手!但是在verilog中略有心得 PTT的C_CPP版得知Programing版 在Programing版討論HDL串中發現此版 小小的瀏覽一下發現對於verilog有很多討論 就想在此與版友分享 ----------------癈話完畢-------------------- Verilog Code是硬體,寫出來的就是元件(不只是語法) 所以,新手要練到 1.在寫的同時,可以知道自己寫的是什麼元件 2.在合成的同時,可以知道合成出來的檔是什麼 是一件很重要的事 先來說第一件事 「在寫的同時,可以知道自己寫的是什麼元件」 要對於語法與元件的意義了解到某種程度,才可以掌握得很好 那語法要怎麼了解呢?(此篇先討論這件事吧?!) HDL大致上分成兩種電路 1.有clk 2.無clk 學術上(或業界)使用的詞很多!像Gate level、RTL...來分類電路 在此盡可能不要提這些專有名詞(因為我也搞不太懂) 「有clk」的電路屬於「受時間控制」的電路 也就是 觸發時 輸入是什麼,輸出才是什麼,花的時間以clk數(全波)計算 例如: 在Verilog中 always@(posedge clk) 表示 在clk正緣觸發時,以下電路動一次 always以下描述的電路隨clk的正緣變化才存在(動作)! 輸入是什麼東西,變化了幾次,都不存在(動作或影響)... 這也是最常見的寫法 還有「<=」的語法 「<=」代表不等待上一行回應,完成馬上執行 (這觀念是老師教的,我自己還沒有很懂!但老師的確是這樣講的沒錯) 我自己的理解是「觸發同時執行」(相同時間,也就是隨時間控制) 所以「<=」會放在「always@(正緣或負緣 clk)」的裡面。 還有「reg」的語法 在特定時間時,才更新內容的電路元件 不然儲存的內容不變(儲存功能就這樣出現了) 所以「reg」會放在「<=」的左邊,因為要更新資訊。 「無clk」的電路屬於「不受時間控制」的電路 : -也就是輸入是什麼,輸出馬上就是什麼,花的時間以gate count計算 +也就是輸入是什麼,輸出馬上就是什麼,花的時間以gate delay計算 //bakerly更正 例如: 在Verilog中 assign ... assign後面描述的電路為永久存在! 只要輸入變化,輸出也就會馬上變化 (因為沒有時間條限制電路的存在性) 同義寫法為(個人不常這麼寫,不過很多assign可以用這個取代) always@* 或 always@(a, b, c, ...)(沒有正負緣) 還有「=」的語法 「=」代表等待上一行回應後,再執行 (這觀念是老師教的,我自己還沒有很懂!但老師的確是這樣講的沒錯) 就是不隨時間影響,永久存在的電路(接線之類的) 所以「=」會放在always@(正緣或負緣 clk)外面 還有「wire」的語法 字面上是線,但是它代表永久存在的資料空間,只要輸入改變輸出就改變 (所以,不拿來用在儲存資料)常用在元件之間的立即傳遞資料 這種電路速度極快!不用等clk完成全波,馬上就可以做很多動作(只要輸入一直變) 但是容易失控 ---------------------------------------------------------------- 接下來講常見句子 先說無clk的 assign a = (c > 10) ? b : b+1; (c > 10)? 也就是 if(c > 10)(這種寫法在有clk的比較常見,只差在一個DFF) 代表一個方塊,裡面很多邏輯閘,在條件成立時輸出為hi(1bit的訊號輸出) 這個方塊已經在synthesis時最佳化(用數位邏輯教的方法) 輸出的線接給一個2to1的選擇器 輸入都算好了 b, b+1,輸出就等選擇的線決定誰要輸出 assign a = b + c; assign a = b; assign a = .... 剩下的我想不用我多說了!多練習就可以看懂複雜的Gate level電路了! 再說有clk的電路 always@(posedge clk) 代表以下電路都有接clk這條線,並且是正緣觸發(沒有小圓圈) +---- +---- clk | clk | ----|> ----o|> | | +---- +---- 正緣 負緣 always@(poedge clk, negedge rst) begin if(!rst) → 在此一定要使用!,而且上面的negedge rst一定要寫 ... end 有寫 negedge rst 電路不會把 if(!rst) //若rst負緣觸發 當作是 if(rst == 0) //若rst低準位 或 if(~rst) //若rst低準位 在有clk影響的電路將clk和rst設定好之後,就看見以下的語法(常用語法) (因大多數電路都是用DFF組成, 所以rst通常都會設定,不過也有不用的時候!) always@(posedge clk, negedge rst) //正負緣看需求訂定 begin if(!rst) begin ....(初始化設定) end else begin ....(電路function) end end 以上,應該可以應付很多新手觀念上模糊的問題了! 之後只要依一開始講的方向去做,合成完看RTL、synthesis report的時間估計 以及檔案之間的變化,慢慢的就可以成為高手了! 而合成的過程也可以在coding時掌握住!也就有寫元件的感覺了.... 在那時,如果有人問你,你可以說「我不是高手!不過略懂..」 跟別人分享心得,互相成長! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.80.140.211
1F:推 pachingoo:推 04/17 18:48
2F:推 xwxw:推 04/17 20:02
3F:推 robertshih:"="與"<="的涵意很深 如果做到synthesis就看得出差異了 04/17 20:25
4F:推 pupucar:不使用專有名詞而喜歡用自己的語言 等你出來工作就知道死 04/17 20:45
5F:→ pupucar:除非你天縱英才 可以一人搞定專案 都不用cowork的 04/17 20:47
6F:→ Zephyr750:樓上!只是本篇不用!不代表一輩子不用....XD 04/17 20:53
7F:推 echw:推!! 不過很多東西還是自己摸過才知道 04/17 21:25
8F:→ echw:像前面有人說的 "=" 和 "<=" 不完全是原PO所解釋得如此 04/17 21:26
9F:→ echw:比較簡單的用法裡面 "="可以用在你像是寫"c語言"那樣用 04/17 21:28
10F:推 echw:初學者通常會在"="和"<="有疑問 是因為寫道"always" 04/17 21:30
11F:→ echw:always裡面的描述 可以類似電路化的思考 用"<=" 04/17 21:32
12F:→ echw:或者"c語言"的方法 用"=" 這是比較基礎的概念 04/17 21:32
13F:→ Zephyr750:我個人不推薦把c語言和HDL語言拿來比較或介紹觀念... 04/17 21:41
14F:→ Zephyr750:我改一下好了! 04/17 21:42
※ 編輯: Zephyr750 來自: 114.33.224.25 (04/17 21:45) ※ 編輯: Zephyr750 來自: 114.33.224.25 (04/17 21:46)
15F:→ Zephyr750:好像愈改愈看不懂!^^" 04/17 21:47
16F:推 echw:已經寫得很好了XDD 04/17 21:55
17F:推 maxwellee:推推推 04/18 02:24
18F:推 luckyBF:推一下 04/18 07:39
19F:推 masage0514:大大 我想請問 !rst跟~rst難道不一樣嗎?差在哪?謝謝 04/20 12:48
20F:→ uxijgil:reg不一定是受時間控制的 ex: reg a; always @(*) a = b; 04/20 21:35
21F:→ uxijgil:!(2'b10) = 1'b0 ; ~(2'b10) = 2'b01 ; 對單訊號則沒差 04/20 21:37
22F:→ Zephyr750:~所有bit反向, ! 1'b1(最小的bit)反向 04/20 23:20
23F:→ Zephyr750:!(2'b10) = ~(1'b0) = 1'b1 好像是這樣才對 04/20 23:23
※ 編輯: Zephyr750 來自: 114.33.224.25 (04/21 00:02)
24F:推 Pash77:錯 !2'b10 = ~(2'b10==0) = ~0 = 1 不然你用 !2'b01 就知 04/21 06:42
25F:→ Pash77:我也寫錯! 是 !=0 才對 04/21 06:43
26F:推 Pash77:!rst = !(rst!=0) 所以 rst=0 時 !(0!=0)=!0=1 04/21 06:46
27F:→ Pash77:這個全華中譯本應該有吧? 04/21 06:48
28F:推 pikachu2005:推~+1 04/21 13:55
29F:推 potatojerry: ~: bitwise, ! : logical 04/22 23:09
30F:→ bakerly:gate count是面積單位,不是時間單位, wire真的就是線 04/23 22:08
※ 編輯: Zephyr750 來自: 59.120.98.226 (11/14 11:23)
31F:推 tj0706: 推推 04/07 11:34
32F:→ sneak: !(2'b10) = https://muxiv.com 08/13 19:11
33F:→ sneak: 不使用專有名詞而喜歡用 https://daxiv.com 09/17 23:05







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether 或 站內搜尋

TOP