Re: [問題]請教Verilog 語法

看板Electronics作者 (樂於助人)時間15年前 (2008/10/24 07:38), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《promagicman (雨天後的彩虹)》之銘言: : 最近看到書上這個例題的其中一個段落: : genvar i; : generate for(i=0;i<n;i=i+1) begin:block1 : if(~) : assign example1 = ~~~~~ ; : else : assign example2 = ~~~~~ ; : end endgenerate : PS: ~~~~ = 略 : key in 完後 : HDL compiler 警告 conditionlity generate item 一定要在 named blok 內 : 指assign 這行敘述一定要在 named block 內 : 可是已經設好了 begin:block1 不是嗎? : 還是這種寫法根本是不行的? : 困惑中,請有經驗的幫忙解答 : THX ^ ^ conditionality指的是if else。if else才是condition statement, for是loop statement。 所以你必需對if、else的block命名。 但為什麼上面的的if、else沒看到begin、end,因為它後面只接一個敘述, 所以在這裡你必需要把begin、end寫出來、加上names。 另外有些人對HDL的loop有點恐懼、不敢用它,我想這是對語法特性不夠了解。 其實只要把loop unroll,也就展開它就沒什麼好怕的。 像這樣的1024行的敘述: begin D[0] <= x; D[1] <= D[0]; ... D[1023] <= D[1022]; end loop statement幾行就解決了: begin D[0] <= x; for(i=1; i<1024; i = i+1) begin D[i] <= D[i-1]; end end 我最近作業還寫了個LFSR,只要用module parameter overwrites LFSR的係數 就是一個新的LFSR,電路也可以用Xilinx ISE 8.2合成。 要寫出這麼general的LFSR,module parameters、generate loops很有用。 LFSR: http://cid-87cef5e6683b5427.skydrive.live.com/self.aspx/Share/LSFR.v Block diagram: http://cid-87cef5e6683b5427.skydrive.live.com/self.aspx/Share/LFSR.png
使用範例maximal-length LFSR: module MLLSFR6(g, SInit, SLoad, Reset1, Clock); // Order of MLLSFR parameter r = 6; // Coefficients parameter [r:0] Coeff = 'o103; output g; input [r-1:0] SInit; input SLoad; input Reset1; input Clock; LSFR #(r, Coeff) MLLSFR_Inst(g, SInit, SLoad, Reset1, Clock); endmodule 另外loop在Verilog有兩種,一種是generate loop, 另一種是在sequential block用的loop。 Xilinx ISE的synthesizer會要求generate loop的blocks要具名(names)。 -- 西方三聖:http://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg
《佛說阿彌陀經》http://web.cc.ncu.edu.tw/~93501025/amtf.doc 十一面觀音咒:http://file.buda.idv.tw/music/DBZFY04.mp3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.220.219 ※ 編輯: zxvc 來自: 140.115.220.219 (10/24 07:40)

10/24 09:05, , 1F
感謝,原來如此 ^ ^
10/24 09:05, 1F
文章代碼(AID): #190GhmrE (Electronics)
討論串 (同標題文章)
文章代碼(AID): #190GhmrE (Electronics)