作者bw51 (路人甲)
看板Electronics
标题[问题] verilog for loop?
时间Mon Jul 7 22:46:48 2014
问题:
由於需要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://webptt.com/cn.aspx?n=bbs/Electronics/M.1404744412.A.D83.html
※ 编辑: bw51 (118.160.196.206), 07/07/2014 22:49:22
1F:→ michael6172:可以不要把verilog当C code写吗? 请善用FSM and coun 07/08 13:22
2F:→ michael6172:ter 07/08 13:22
3F:推 illl:systemverilog不能这样写吗? 07/08 15:26
4F:→ bw51:这跟c code 有什麽关系? sv 支援的语法 07/08 17:25
5F:→ bw51:重点是怎麽改写成可以合成? 07/08 17:27
6F:推 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
7F:推 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
8F:推 bxxl:不能直接写 data=data_in, 整个array assign过去吗? 07/08 21:18
9F:推 wju1230:用genvar和generate 把for移到always外面 07/09 00:32
10F:推 tkhan:请千万别进这一行.. 07/10 11:00
11F:推 idioyao:w大是对的, generate就是为了你这种情况而生的 07/12 11:59
12F:推 storier: for loop放到if内就行,会用for loop的只有两种人 12/24 22:30
13F:→ storier: 高手跟新手 12/24 22:30
14F:→ storier: generate会在verdi产生一堆gen block 12/24 22:31
15F:→ storier: 除非是要instance module 逼不得已才用 12/24 22:32