这里主要记录我在代码编写过程中遇到的错误或者代码编写的格式问题:
1 case...endcase 算一个执行语句
当使用always等结构语句,当里面有多个执行语句时,我们可以用begin...end括起来。
这里 一个完整的case...endcase 算一个执行语句,故可不用begin...end,如以下例子编译无误。
2 多个同类型端口可一起定义:
如图,多个input同类型端口可一起定义:
3 画出带具体数据的波形,需要用reg作为输出:
想要画出这种输出不是单一波形,而是存储的数据的,如图:当输入为000时,输出为00000001。
要在仿真文件和子模块中的输出都必须为reg类型。
如下:左图为仿真模块。右图为子模块。
4 用" , "还是" ; "
在某些结构内,执行语句用,如module...endmodule和模块例化,且执行语句中最后一个语句,不用使用任何符号,但括号外用分号:
module Decoder3_8
(
input in1,input in2,
output reg[7:0] out);
Decoder3_8 u_Decoder3_8
(
.in1(top_in1),
.in2(top_in2),
.in3(top_in3,
.out(top_out)
);
除上述一些结构外,执行语句都用分号“ ;”结尾,如:
always #10 top_in1 <= {$random} % 2;
always #10 top_in2 <= {$random} % 2;
always #10 top_in3 <= {$random} % 2;
case({in1,in2,in3})
3'b000: out = 8'b0000_0001;
3'b001: out = 8'b0000_0010;
3'b010: out = 8'b0000_0100;
3'b011: out = 8'b0000_1000;
3'b100: out = 8'b0001_0000;
3'b101: out = 8'b0010_0000;
3'b110: out = 8'b0100_0000;
3'b111: out = 8'b1000_0000;
default: out = 8'b0000_0001;
endcase