Peterson算法的Verilog实现

1. 概念

Peterson算法是一种实现互斥锁的并发程序设计方式,保证了两个进程真正实现互斥进入关键区域。

2. 方式
通过设置两个标志来达到互斥的目的。

3. verilog代码.

//peterson.v: Model of Peterson's algorithm for mutual exclusion of two processes.
typedef enum {L0, L1, L2, L3, L4, L5} loc;

module peterson(clock,select,pause);
    input     clock;
    input     select;
    input     pause;

    reg       interested[0:1];
    reg [0:0] turn, self;
    loc reg   pc[0:1];

    initial begin
	pc[0] = L0; pc[1] = L0;
	interested[0] = 0; interested[1] = 0;
	turn = 0;
	self = 0;
    end

    always @ (posedge clock) begin
	self = select;
	case (pc[self])
	  L0: if (!pause) pc[self] = L1;	// noncritical section
	  L1: begin interested[self] = 1; pc[self] = L2; end
	  L2: begin turn = ~self; pc[self] = L3; end
	  L3: if (!interested[~self] || turn == self) pc[self] = L4;
	  L4: if (!pause) pc[self] = L5;	// critical section
	  L5: begin interested[self] = 0; pc[self] = L0; end
	endcase
    end

endmodule // peterson

这里设置了turn和interested两个标签。前者是礼让标志,表明可以让对方进入关键区域;后者是期望标志,表明希望进入关键区域。

对peterson算法的一些规范检验见另一篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值