阶段一
六进制计数器:
自行绘制的 电路结构RTL设计图
设计思路:利用加法器将每次的计数值加一,通过比较器将每次的计数值与计数最大值比较,选择器根据比较器的结果选择输出加法器的结果或计数初始值0,在时钟上升沿D触发器输出下一个计数值。
Quartus扫描生成的电路RTL图
电路的波形仿真截图
HDL代码
module count1(
CLK ,
RST ,
CNT);
input CLK,RST;
output [2:0]CNT;
reg [2:0]CNT,CNT_NEXT;
always @(posedge CLK or posedge RST) begin
if(RST)begin
CNT <= 0;
end
else begin
if(CNT<5)begin
CNT = CNT + 1'b1;
end
else begin
CNT = 0;
end
end
end
endmodule
7—10进制循环计数器:
自行绘制的 电路结构RTL设计图
设计思路:计数与判断部分同上题类似,不同的是利用了多个计数器,进行异步计数。当计数器完成一次完整计数后,输出一次时钟信号到另一个循环计数器,完成加一,从而实现进行计数最大数值控制。
Quartus扫描生成的电路RTL图
电路的波形仿真截图
HDL代码
module count2(
CLK,
RST,
CNT,
con,
);
input RST,
CLK;
output [3:0]CNT,con;
reg [3:0]CNT,con,cnt=6;
reg OV;
always @(posedge CLK or posedge RST) begin
if(RST)begin
con=0;
end
else begin
if(CNT<cnt)begin
con = CNT + 1'b1;
end
else begin
con=0;
end
end
end
always @ (posedge CLK or posedge RST) begin
if(RST)
CNT <= 0;
else
CNT <= con;
end
always @(CNT) begin
if(CNT == 0)
OV = 1;
else
OV = 0;
end
always@(posedge OV or posedge RST)begin
if(RST)begin
cnt=6;
end
else if(cnt<9)begin
cnt=cnt+1'b1;
end
else
cnt=6;
end
endmodule