作者zxvc (众生都是未来佛)
看板Electronics
标题Re: [问题] verilog
时间Thu May 12 08:46:51 2011
※ 引述《ccjin (半年之後你会变怎样)》之铭言:
: 标题: [问题] verilog
: 时间: Thu May 12 00:49:58 2011
:
:
: 目前手边没有工具
: case里面很多有规则的数字
: 我想用for loop取代
: 以下这种语法会有错 可合成吗
: 下面大概写一下概念
: 谢谢
:
:
: input wire [(CH_WIDTH-1):0] rch [(CH_NUM-1):0]=0;
: input wire [(CH_WIDTH-1):0] gch [(CH_NUM-1):0]=0;
: input wire [(CH_WIDTH-1):0] bch [(CH_NUM-1):0]=0;
:
: reg [(CH_WIDTH-1):0] rch1;
: reg [(CH_WIDTH-1):0] gch1;
: reg [(CH_WIDTH-1):0] bch1;
:
:
: genvar i;
: generate
: always @(posedge clk)
: begin
: case(select)
: for (i=0; i < CH_NUM; i=i+1)
: begin:
: i:
: begin
: rch1 <= #DLY rch[i];
: gch1 <= #DLY gch[i];
: bch1 <= #DLY bch[i];
: end
: end
: endcase
: end
: endgenerate
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 123.195.15.55
: 推 zxvc:loop generate与procedural loop的for是两种不同概念的for。 05/12 08:14
: → zxvc:它们所用的indexing variables宣告方式也不同。 05/12 08:15
loop generate的indexing variables要用genvar宣告,
procedural loop一般用integer宣告。
要写出可合成的for loop要把握"迭代次数是常数"的原则。
原po的case的语法就有问题,Verilog的标准应该不允许这种case, for语法。
又原po的input有unpacked的维度,这在SystemVerilog才支援的。
原po看来想写的是个多工器後面接flip-flop,可以这样写:
module t
#(
parameter CH_WIDTH = 5,
parameter CH_NUM = 4,
parameter SEL_WIDTH = 2
)
(
output logic [(CH_WIDTH-1):0] rch1,
input [(CH_WIDTH-1):0] rch [(CH_NUM-1):0],
input [SEL_WIDTH-1:0] select,
input clock
);
always_ff@(posedge clock) begin
rch1 <= rch[select];
end
endmodule
此code已用Precision RTL 2010a合成过。
--
信佛的人要知道:佛绝不会说谎。但请把握时光。
法灭尽经:
http://www.cbeta.org/result/normal/T12/0396_001.htm
共勉之。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.221.79