Verilog编程总结(一)

主程序

assign赋值

  1. 主程序里面只需要写 input,ouput和assign赋值
  2. assign格式: assign y=~a;多位赋值的时候也使用这个语句
  3. 如果变量是多位使用input[7:0] A;这样的格式
  4. 在反码输出逻辑里面使用了wire[6:0] b;来定义中间变量

always赋值

  1. reg y; 输出变量需要定义为reg
  2. always语句的作用:循环执行语句
  3. always语句的格式:
always@(a or b or sel) //输入列表需要写全
begin
//语句
end
  1. 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

  1. 一般都是用异名例化
  2. testbench基本结构:
    1. module endmodule
    2. regwire 定义变量
    3. device device(.x(x),.y(y)); 异名例化
    4. initial begin end 语句
    5. <=赋值语句(或者可以使用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
  1. 使用always来循环赋值
    1. 原来begin end里面替换成一个赋值和一个停止
    2. 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

猜你喜欢

转载自blog.csdn.net/KafenWong/article/details/121376503