[問題] verilog for loop?

看板Electronics作者 (路人甲)時間11年前 (2014/07/07 22:46), 11年前編輯推噓8(807)
留言15則, 9人參與, 最新討論串1/1
問題: 由於需要access大量的資料,需要使用 for loop for loop 使用 synchronous reset 寫法可以 synthesis 而使用 asynchronous reset 寫法無法 synthesis 如何改寫 asynchronous reset的寫法讓他可以合成(必須使用asynchronous flip-flop) input [63:0] data_in [8191:0]; reg[63:0]data[8191:0]; Synchronous reset: always_ff@(posedge clk) for(i=0;i<8192;i=i+1) if(!rst_n) data[i] <= 0; else if(en) data[i] <= data_in; Asynchronous reset: always_ff@(posedge clk or negedge rst_n) for(i=0;i<8192;i=i+1) if(!rst_n) data[i] <= 0; else if(en) data[i] <= data_in[i]; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.196.206 ※ 文章網址: http://www.ptt.cc/bbs/Electronics/M.1404744412.A.D83.html ※ 編輯: bw51 (118.160.196.206), 07/07/2014 22:49:22

07/08 13:22, , 1F
可以不要把verilog當C code寫嗎? 請善用FSM and coun
07/08 13:22, 1F

07/08 13:22, , 2F
ter
07/08 13:22, 2F

07/08 15:26, , 3F
systemverilog不能這樣寫嗎?
07/08 15:26, 3F

07/08 17:25, , 4F
這跟c code 有什麼關係? sv 支援的語法
07/08 17:25, 4F

07/08 17:27, , 5F
重點是怎麼改寫成可以合成?
07/08 17:27, 5F

07/08 17:37, , 6F
1for放在if,else裡會有差嗎?雖然我覺得應該沒差
07/08 17:37, 6F
你的意思是指? Asynchronous reset: always_ff@(posedge clk or negedge rst_n) if(!rst_n) for(i=0;i<8192;i=i+1) begin data[i] <= 0; end else if(en) for(i=0;i<8192;i=i+1) begin data[i] <= data_in[i]; end

07/08 17:45, , 7F
這樣寫有點奇怪 你整個data[0..8191]都會是 data_in / 0
07/08 17:45, 7F
我知道你的意思,我把data_in換成array了 ※ 編輯: bw51 (118.160.196.206), 07/08/2014 20:12:03

07/08 21:18, , 8F
不能直接寫 data=data_in, 整個array assign過去嗎?
07/08 21:18, 8F

07/09 00:32, , 9F
用genvar和generate 把for移到always外面
07/09 00:32, 9F

07/10 11:00, , 10F
請千萬別進這一行..
07/10 11:00, 10F

07/12 11:59, , 11F
w大是對的, generate就是為了你這種情況而生的
07/12 11:59, 11F

12/24 22:30, , 12F
for loop放到if內就行,會用for loop的只有兩種人
12/24 22:30, 12F

12/24 22:30, , 13F
高手跟新手
12/24 22:30, 13F

12/24 22:31, , 14F
generate會在verdi產生一堆gen block
12/24 22:31, 14F

12/24 22:32, , 15F
除非是要instance module 逼不得已才用
12/24 22:32, 15F
文章代碼(AID): #1JkhBSs3 (Electronics)