主程序
assign赋值
主程序里面只需要写 input,ouput和assign赋值
assign格式: assign y=~a;
多位赋值的时候也使用这个语句
如果变量是多位使用input[7:0] A;
这样的格式
在反码输出逻辑里面使用了wire[6:0] b;
来定义中间变量
always赋值
reg y;
输出变量需要定义为reg
always语句的作用:循环执行语句
always语句的格式:
always@(a or b or sel) //输入列表需要写全
begin
//语句
end
case语句的格式
case(num)
4'd0: begin y<= 8'b00000000; end //注意最好有begin end,使用"<="
4'd1: begin y<= 8'b00000001; end
4'd9: begin y<= 8'b00111001;end
default:begin y<= 8'b00111001;end
endcase
testbench
一般都是用异名例化
testbench基本结构:
module endmodule
对
reg
和 wire
定义变量
device device(.x(x),.y(y));
异名例化
initial begin end
语句
<=赋值语句
(或者可以使用always
语句,具体见下)
module device_tb;
reg a,b,sel; //定义变量为reg型
wire y;//输出使用wire
device device(.a(a),.b(b),.sel(sel));//变量都要是程序里面定义的
initial//initial语句里面来赋值,使用“<=”
begin
a<=0;b<=1;sel<=2'b00;
#10 a<=0;b<=0;sel<=2'b10;
#10 a<=0;b<=1;sel<=2'b11;
#10 a<=0;b<=0;sel<=2'b00;
#10 $stop;
end
endmodule
使用always
来循环赋值
原来begin end里面替换成一个赋值和一个停止
end
后加上always
循环语句
module device_tb;
reg[ 7 : 0 ] a_in;
wire[ 7 : 0 ] y_out;
device device ( . a ( a_in) , . a_comp ( y_out) ) ;
initial begin
a_in<= 0 ;
#3000 $stop;
end
always#10 a_in<= a_in+ 1 ;
endmodule