1.案例:把32bit数据写入4位深8bit位宽的memery中去
reg[31:0] data;
reg[7:0] byte[1:0];
integer i;
always @(*) begin
for(i=0; i<4; i=i+1) begin
byte[i] = data[(i+1)*8-1 -: 8];
end
end
说明:byte[i] = data[(i+1)*8-1 :i*8];常规我们这么写好像更容易理解。但是,这种区间表达式中,尽量不要起始端和终止端都带有变量,这样VCS编译器可能不识别。
2.运算符
①算术运算符:
(1)+、-、*、/、%、**:加减随便用,乘除慎重使用(做设计的时候乘除是没有现成的模块的,是需要单独设计乘法器或者除法器),这里主要针对是变量运算,如果是纯数值计算是可以使用的
(2)举例:
c=a*b;//必须要调用乘法器的,通过模块例化调用才行
c=a*2;//可以直接计算,无需调用乘法器
②阻塞赋值和非阻塞赋值
分析:
阻塞赋值——看成连线
举例:
reg a= 0;
always@(*) begin
a = 1;
b = a + 1;
end
always@(posedge clk) begin
a <= 1;
b <= a + 1;
end</