概述
刚开始的想法是
module cont16(clk,rst,en,load,cout,dout,data);
parameter value=10;
input clk,rst,en,load;
input [15:0] data;
output [15:0] dout;
output cout;
reg [15:0] q;
reg cout;
assign dout = q;
always @(posedge clk or posedge rst)
begin
if(rst)
begin
q<=0;
cout<=0;
end
else if(en)
begin
if(!load) q<=data;
else if(q>=(value/2-1))
begin
q=0;
cout=~cout;
end
else q<=q+1;
end
end
endmodule
但用仿真时发现当 load = 0时,发现不能做到自动加载。后来改了下
module lsyyx_1(clk,rst,en,load,cout,dout,data,count);
parameter value=10000;
input clk,rst,en,load;
input [15:0] data;
output [15:0] dout;
output cout,count;
reg [15:0] q;
reg cout,count;
assign dout = q;
always @(posedge clk or posedge rst)
begin
if(rst)
begin
q<=0; //rst=1时,异步f复位
end
else if(en)//同步使能en=1,则允许加载或计数
begin
if(count==load) q<=data;
else q<=q+1;
end
end
always @(posedge clk or posedge rst)
begin
if(rst)
begin
cout<=0;
end
else if(q>=(value/2-1))
cout=~cout;//翻转
end
always @(q)
begin
if(q==(value/2-1)) count=1'b1;
else count=1'b0;
end
endmodule
波形大概为这样
最后
以上就是冷酷奇异果为你收集整理的用quartus II作一个异步复位,同步使能,自动加载型16位二进制加法计数器的全部内容,希望文章能够帮你解决用quartus II作一个异步复位,同步使能,自动加载型16位二进制加法计数器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复