概述
1.状态机的异步置位与复位
异步置位与复位是与时钟无关的.当异步置位与复位到来时它们立即分别置触发器的输出为1或0,不需要等到时钟沿到来才置位或复位。把它们列入always块的事件控制括号内就能触发always块的执行,因此,当它们到来时就能立即执行指定的操作。
状态机的异步置位与复位是用always块和事件控制实现的。先让我们来看一下事件控制的语法:
事件控制语法
@( <沿关键词 时钟信号or 沿关键词 复位信号or 沿关键词 置位信号> )
沿关键词包括 posedge(用于高电平有效的set、reset或上升沿触发的时钟)和 negedge(用于低电平有效的set、reset或下降沿触发的时钟),信号可以按任意顺序列出
事件控制实例
- 异步、高电平有效的置位(时钟的上升沿)
@(posedge clk or posedge set) - 异步低电平有效的复位(时钟的上升沿)
@(posedge clk or negedge reset) - 异步低电平有效的置位和高电平有效的复位(时钟的上升沿)
@( posedge clk or negedge set or posedge reset ) - 带异步高电平有效的置位与复位的always块样板
always @(posedge clk or posedge set or posedge reset)
begin
if(reset)
begin
/*置输出为0*/
end
else
if(set)
begin
/*置输出为1*/
end
else
begin
/*与时钟同步的逻辑*/
end
end
- 带异步高电平有效的置/复位端的D触发器实例
module dff1( q, qb, d, clk, set, reset );
input d, clk, set, reset;
output q, qb;
//声明q和qb为reg类型,因为它需要在always块内赋值
reg q, qb;
always @( posedge clk or posedge set or posedge reset )//这个带了很多信号
begin
if(reset)
begin
q = 0;
qb = 1;
end
else
if (set)
begin
q = 1;
qb = 0;
end
else
begin
q = d;
qb = ~d;
end
end
endmodule
2.状态机的同步置位与复位
同步置位与复位是指只有在时钟的有效跳变沿时刻置位或复位信号才能使触发器置位或复位(即,使触发器的输出分别转变为逻辑1或0)
不要把set和reset信号名列入always块的事件控制表达式,因为当它们有变化时不应触发always块的执行。相反,always块的执行应只由时钟有效跳变沿触发,是否置位或复位应在always块中首先检查set和reset信号的电平。
事件控制语法:
@(<沿关键词 时钟信号>)
其中沿关键词指 posedge(正沿触发)或 negedge(负沿触发)
事件控制实例
- 正沿触发
@(posedge clk) - 负沿触发
@(negedge clk) - 同步的具有高电平有效的置位与复位端的always块样板
always @(posedge clk)
begin
if(reset)
begin
/*置输出为0*/
end
else
if(set)
begin
/*置输出为1*/
end
else
begin
/*与时钟同步的逻辑*/
end
end//只带复位信号与时钟信号
- 同步的具有高电平有效的置位/复位端的D触发器
module dff2( q, qb, d, clk, set, reset);
input d, clk, set, reset;
output q, qb;
reg q, qb;
always @(posedge clk)
begin
if(reset)
begin
q=0;
qb=1;
end
else
if(set)
begin
q=1;
qb=0;
end
else
begin
q=d;
qb=~d;
end
end
endmodule
最后
以上就是活泼棉花糖为你收集整理的状态机的置位与复位的全部内容,希望文章能够帮你解决状态机的置位与复位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复