数字逻辑:模60计数器(使用MAX+plus II 、Verilog语言 编写)

代码:

module test(clk,reset,min_H,min_L,min_H_cy,min_L_cy);
input clk,reset;
output [3:0] min_H,min_L;
output min_H_cy,min_L_cy;
reg [3:0] min_H,min_L;

assign min_L_cy=(min_L==4'b1001)?1:0;
always @(posedge clk)
    begin 
		if(reset) min_L<=4'b0000;
		if(min_L_cy==1) 
			begin 
				min_L<=4'b0000;
			end
		else min_L<=min_L+1;
	end
                 
assign min_H_cy=(min_H==4'b0101)?1:0;
//另一种写法是assign min_H_cy=(min_H==4'b0101)&(min_L_cy==1)?1:0  ,需要改下注释P1后的写法;
always @(posedge clk)
	begin
		if(reset) min_H<=4'b0000;
		if(min_L_cy==1) //P1
			begin
				if(min_H_cy==1) 
					begin
						min_H<=4'b0000;
					end
//always不能写min_L;
                else min_H<=min_H+1;
			end
	end
endmodule

时序图:

数字逻辑:模60计数器(使用MAX+plus II 、Verilog语言 编写)_第1张图片

总结:

1)每个always 处理一位(例如59的个位“9”),例如:min_L已经在第一个always处理过了,就不能在第二个always中赋值;(经验总结)

2)每一个begin-end 相当于(c语言中的)一个括号;

3)if-if else-if else … … 最后要补else,(即使语句无实际功能,例如a<=a;)要养成好习惯;

  1. 其实无需高位插眼,用二进制码表示就挺方便的。

你可能感兴趣的:(数字逻辑,verilog)