[爆卦]Verilog for 迴圈是什麼?優點缺點精華區懶人包

為什麼這篇Verilog for 迴圈鄉民發文收入到精華區:因為在Verilog for 迴圈這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者bw51 (路人甲)看板Electronics標題[問題] verilog for loop?時...


問題:

由於需要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
michael6172:可以不要把verilog當C code寫嗎? 請善用FSM and coun 07/08 13:22
michael6172:ter 07/08 13:22
illl:systemverilog不能這樣寫嗎? 07/08 15:26
bw51:這跟c code 有什麼關係? sv 支援的語法 07/08 17:25
bw51:重點是怎麼改寫成可以合成? 07/08 17:27
illl:1for放在if,else裡會有差嗎?雖然我覺得應該沒差 07/08 17:37
你的意思是指?
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


kameng:這樣寫有點奇怪 你整個data[0..8191]都會是 data_in / 0 07/08 17:45
我知道你的意思,我把data_in換成array了
※ 編輯: bw51 (118.160.196.206), 07/08/2014 20:12:03
bxxl:不能直接寫 data=data_in, 整個array assign過去嗎? 07/08 21:18
wju1230:用genvar和generate 把for移到always外面 07/09 00:32
tkhan:請千萬別進這一行.. 07/10 11:00
idioyao:w大是對的, generate就是為了你這種情況而生的 07/12 11:59
storier: for loop放到if內就行,會用for loop的只有兩種人 12/24 22:30
storier: 高手跟新手 12/24 22:30
storier: generate會在verdi產生一堆gen block 12/24 22:31
storier: 除非是要instance module 逼不得已才用 12/24 22:32

你可能也想看看

搜尋相關網站