以下for循环代码转换成verilog语言如何写,有偿,急! 帮帮忙
这种改成时序逻辑要分开写,但我这个还少了一个限定条件你可以自己加进去,我这个写法他是一直在计数你可以加一个if作为限定条件,需要的时候调用
always@(posedge iclk or negedge irst_n)//循环计数
if(!rst)begin
i <= 1'b0;
end else if(i < 4'd10) begin
i <= i + 1'b1;
end
end
always@(posedge iclk or negedge irst_n)//地址操作
if(!rst)begin
addr1 <= addr1;
end else if(map[i]) begin
addr1 <= addr1 + 1'b1;
end else begin
addr1 <= addr1;
end
end
assign addr = addr1;
always@(posedge iclk or negedge irst_n)//数据操作
if(!rst)begin
fifo <= 1'b0;
end else if(map[i])
case(i)
0: fifo[addr] <= A + B + (B * 0);
1: fifo[addr] <= A + B + (B * 1);
2: fifo[addr] <= A + B + (B * 2);
3: fifo[addr] <= A + B + (B * 3);
4: fifo[addr] <= A + B + (B * 4);
5: fifo[addr] <= A + B + (B * 5);
6: fifo[addr] <= A + B + (B * 6);
7: fifo[addr] <= A + B + (B * 7);
8: fifo[addr] <= A + B + (B * 8);
9: fifo[addr] <= A + B + (B * 9);
default: fifo <= 1'b0;
endcase
end
个人理解,这个直接在verilog里写for循环不就可以了吗?
map fif0数组要定义位宽 深度 看自己需求
A B 常量parameter 定义就行
addr reg型变量
其他如下:
integer i;
always@( * )
begin
for(i=0;i<10;i=i+1)
if(map[i])
fif0[addr]=A+B*(i+1);
addr=addr+1;
end