mirror of
				https://github.com/YosysHQ/sby.git
				synced 2025-10-29 04:00:03 +00:00 
			
		
		
		
	Merge pull request #86 from mattvenn/master
make wolf goat cabbage puzzle gender neutral
This commit is contained in:
		
						commit
						3c14d12180
					
				
					 1 changed files with 16 additions and 16 deletions
				
			
		|  | @ -1,38 +1,38 @@ | ||||||
| // A man needs to cross a river with a wolf, a goat and a cabbage. His boat is only large
 | // A person needs to cross a river with a wolf, a goat and a cabbage. Their boat is only large
 | ||||||
| // enough to carry himself and one of his three possessions, so he must transport these
 | // enough to carry themselves and one of their three possessions, so they must transport these
 | ||||||
| // items one at a time. However, if he leaves the wolf and the goat together unattended,
 | // items one at a time. However, if they leave the wolf and the goat together unattended,
 | ||||||
| // then the wolf will eat the goat; similarly, if he leaves the goat and the cabbage together
 | // then the wolf will eat the goat; similarly, if they leave the goat and the cabbage together
 | ||||||
| // unattended, then the goat will eat the cabbage. How can the man get across safely with
 | // unattended, then the goat will eat the cabbage. How can the person get across safely with
 | ||||||
| // his three items?
 | // their three items?
 | ||||||
| 
 | 
 | ||||||
| module wolf_goat_cabbage (input clk, input w, g, c); | module wolf_goat_cabbage (input clk, input w, g, c); | ||||||
| 	// everyone starts at the 1st river bank
 | 	// everyone starts at the 1st river bank
 | ||||||
| 	reg bank_w = 0; // wolf
 | 	reg bank_w = 0; // wolf
 | ||||||
| 	reg bank_g = 0; // goat
 | 	reg bank_g = 0; // goat
 | ||||||
| 	reg bank_c = 0; // cabbage
 | 	reg bank_c = 0; // cabbage
 | ||||||
| 	reg bank_m = 0; // man
 | 	reg bank_p = 0; // person who drives the boat
 | ||||||
| 
 | 
 | ||||||
| 	always @(posedge clk) begin | 	always @(posedge clk) begin | ||||||
|  | 		// person travels and takes the selected item with him
 | ||||||
|  | 		bank_p <= !bank_p; | ||||||
|  | 		if (w && (bank_w == bank_p)) bank_w <= !bank_p; | ||||||
|  | 		if (g && (bank_g == bank_p)) bank_g <= !bank_p; | ||||||
|  | 		if (c && (bank_c == bank_p)) bank_c <= !bank_p; | ||||||
|  | 
 | ||||||
| 		// maximum one of the control signals must be high
 | 		// maximum one of the control signals must be high
 | ||||||
| 		assume (w+g+c <= 1); | 		assume (w+g+c <= 1); | ||||||
| 
 | 
 | ||||||
| 		// we want wolf, goat, and cabbage on the 2nd river bank
 | 		// we want wolf, goat, and cabbage on the 2nd river bank
 | ||||||
| 		cover (bank_w && bank_g && bank_c); | 		cover(bank_w == 1 && bank_g == 1 && bank_c == 1); | ||||||
| 
 | 
 | ||||||
| 		// don't leave wolf and goat unattended
 | 		// don't leave wolf and goat unattended
 | ||||||
| 		if (bank_w != bank_m) begin | 		if (bank_w != bank_p) begin | ||||||
| 			assume (bank_w != bank_g); | 			assume (bank_w != bank_g); | ||||||
| 		end | 		end | ||||||
| 
 | 
 | ||||||
| 		// don't leave goat and cabbage unattended
 | 		// don't leave goat and cabbage unattended
 | ||||||
| 		if (bank_g != bank_m) begin | 		if (bank_g != bank_p) begin | ||||||
| 			assume (bank_g != bank_c); | 			assume (bank_g != bank_c); | ||||||
| 		end | 		end | ||||||
| 
 |  | ||||||
| 		// man travels and takes the selected item with him
 |  | ||||||
| 		if (w && (bank_w == bank_m)) bank_w <= !bank_m; |  | ||||||
| 		if (g && (bank_g == bank_m)) bank_g <= !bank_m; |  | ||||||
| 		if (c && (bank_c == bank_m)) bank_c <= !bank_m; |  | ||||||
| 		bank_m <= !bank_m; |  | ||||||
| 	end | 	end | ||||||
| endmodule | endmodule | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue