Verilog HDL里的一些语法问题

假如有下面的语句
input [7:0] a;
input [8:1] b;
output reg [16:1] out;
integer i;
always@ (a or b)
begin

out=0;

for (i=0;i<=7;i=i+1)

out=out+a[i];

for (i=1;i<=8;i=i+1)
out=out+a[i];
for (i=0;i<=7;i=i+1)
out=out+b[i];
for (i=1;i<=8;i=i+1)

out=out+a[i];
end

什么四个for循环使用有没有问题?如果i从1开始那a[0]和b[0]不就不能赋值了?
还有always@ (a or b)是什么意思,然后a,b都不是0xff那下面的语句还能执行吗?

楼主是C出身嘛?
verilog 可编译代码基本不用for语句,仿真会用的多点。
reg [7:0] a; 这种写法是说定义了一个 8 bits 寄存器 a

reg a[7:0]; 这种写法是说定义了八个 1 bits 寄存器 a[0] a1 a2 a3 a4 a5 a6 a7
reg [7:0] a[7:0]; 这种写法是定义了 8个 8bits 的寄存器 a[0][7:0] .....
一般情况下不要用。追问

嗯,那reg [8:1] a 有没有a [0]这个元素?always @ (a or b)是不是只要a,b都不是0就可以执行下面的语句?刚刚开始学Verilog,所以有好多不懂的

追答

没有 a[0].

并不是a 和 b 都不是 0 执行,是 a 或者 b 发生变化,则往下执行。甚至可以简略写为
always @ (*) 。你如果初学,建议不要这么写。

建议你从时序逻辑着手吧,先写一个点灯的程序,慢慢体会。

追问

那个FPGA的板子我还没有,老师说先把语法学一学然后提供板子

对了,可以帮助学习一下FPGA吗,老师要我开始为SIC竞赛准备了,但是我还什么都不知道,模电数电什么的全部是刚刚开始学,感觉好难

温馨提示:答案为网友推荐,仅供参考
相似回答