為什麼這篇verilog語法鄉民發文收入到精華區:因為在verilog語法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者zxvc (樂於助人)看板Electronics標題Re: [問題]請教Verilog 語法時間...
※ 引述《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
![](https://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://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg)
十一面觀音咒:http://file.buda.idv.tw/music/DBZFY04.mp3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.220.219
※ 編輯: zxvc 來自: 140.115.220.219 (10/24 07:40)