Re: [問題] verilog

看板Electronics作者 (眾生都是未來佛)時間14年前 (2011/05/12 08:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/9 (看更多)
※ 引述《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
文章代碼(AID): #1Doot_rE (Electronics)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
1
2
完整討論串 (本文為第 4 之 9 篇):
問題
1
1
問題
問題
5
28
問題
5
9
問題
1
2
問題
0
3
問題
2
6
文章代碼(AID): #1Doot_rE (Electronics)