作者zxvc (乐於助人)
看板Electronics
标题Re: [问题]请教Verilog 语法
时间Fri Oct 24 07:38:21 2008
※ 引述《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)
1F:推 promagicman:感谢,原来如此 ^ ^ 10/24 09:05