状态机的置位与复位

1.状态机的异步置位与复位

异步置位与复位是与时钟无关的.当异步置位与复位到来时它们立即分别置触发器的输出为1或0,不需要等到时钟沿到来才置位或复位。把它们列入always块的事件控制括号内就能触发always块的执行,因此,当它们到来时就能立即执行指定的操作。
状态机的异步置位与复位是用always块和事件控制实现的。先让我们来看一下事件控制的语法:
事件控制语法
@( <沿关键词 时钟信号or 沿关键词 复位信号or 沿关键词 置位信号> )
沿关键词包括 posedge(用于高电平有效的set、reset或上升沿触发的时钟)和 negedge(用于低电平有效的set、reset或下降沿触发的时钟),信号可以按任意顺序列出
事件控制实例

  1. 异步、高电平有效的置位(时钟的上升沿)
    @(posedge clk or posedge set)
  2. 异步低电平有效的复位(时钟的上升沿)
    @(posedge clk or negedge reset)
  3. 异步低电平有效的置位和高电平有效的复位(时钟的上升沿)
    @( posedge clk or negedge set or posedge reset )
  4. 带异步高电平有效的置位与复位的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
  1. 带异步高电平有效的置/复位端的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(负沿触发)

事件控制实例

  1. 正沿触发
    @(posedge clk)
  2. 负沿触发
    @(negedge clk)
  3. 同步的具有高电平有效的置位与复位端的always块样板
always @(posedge clk)
	begin
		if(reset)
			begin
			/*置输出为0*/
		end
		else
			if(set)
			begin
				/*置输出为1*/
			end
		else
			begin
			/*与时钟同步的逻辑*/
			end
	end//只带复位信号与时钟信号
  1. 同步的具有高电平有效的置位/复位端的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值