mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
module example (
 | 
						|
	input  clk,
 | 
						|
	input  SW1,
 | 
						|
	input  SW2,
 | 
						|
	output LED1,
 | 
						|
	output LED2,
 | 
						|
	output LED3,
 | 
						|
	output LED4,
 | 
						|
 | 
						|
	output AA, AB, AC, AD,
 | 
						|
	output AE, AF, AG, CA
 | 
						|
);
 | 
						|
 | 
						|
	localparam BITS = 8;
 | 
						|
	localparam LOG2DELAY = 22;
 | 
						|
 | 
						|
	reg [BITS+LOG2DELAY-1:0] counter = 0;
 | 
						|
	reg [BITS-1:0] outcnt;
 | 
						|
 | 
						|
	always @(posedge clk) begin
 | 
						|
		counter <= counter + SW1 + SW2 + 1;
 | 
						|
		outcnt <= counter >> LOG2DELAY;
 | 
						|
	end
 | 
						|
 | 
						|
	assign {LED1, LED2, LED3, LED4} = outcnt ^ (outcnt >> 1);
 | 
						|
 | 
						|
	// assign CA = counter[10];
 | 
						|
	// seg7enc seg7encinst (
 | 
						|
	// 	.seg({AA, AB, AC, AD, AE, AF, AG}),
 | 
						|
	// 	.dat(CA ? outcnt[3:0] : outcnt[7:4])
 | 
						|
	// );
 | 
						|
 | 
						|
	assign {AA, AB, AC, AD, AE, AF, AG} = ~(7'b 100_0000 >> outcnt[6:4]);
 | 
						|
	assign CA = outcnt[7];
 | 
						|
endmodule
 | 
						|
 | 
						|
module seg7enc (
 | 
						|
	input [3:0] dat,
 | 
						|
	output [6:0] seg
 | 
						|
);
 | 
						|
	reg [6:0] seg_inv;
 | 
						|
	always @* begin
 | 
						|
		seg_inv = 0;
 | 
						|
		case (dat)
 | 
						|
			4'h0: seg_inv = 7'b 0111111;
 | 
						|
			4'h1: seg_inv = 7'b 0000110;
 | 
						|
			4'h2: seg_inv = 7'b 1011011;
 | 
						|
			4'h3: seg_inv = 7'b 1001111;
 | 
						|
			4'h4: seg_inv = 7'b 1100110;
 | 
						|
			4'h5: seg_inv = 7'b 1101101;
 | 
						|
			4'h6: seg_inv = 7'b 1111101;
 | 
						|
			4'h7: seg_inv = 7'b 0000111;
 | 
						|
			4'h8: seg_inv = 7'b 1111111;
 | 
						|
			4'h9: seg_inv = 7'b 1101111;
 | 
						|
			4'hA: seg_inv = 7'b 1110111;
 | 
						|
			4'hB: seg_inv = 7'b 1111100;
 | 
						|
			4'hC: seg_inv = 7'b 0111001;
 | 
						|
			4'hD: seg_inv = 7'b 1011110;
 | 
						|
			4'hE: seg_inv = 7'b 1111001;
 | 
						|
			4'hF: seg_inv = 7'b 1110001;
 | 
						|
		endcase
 | 
						|
	end
 | 
						|
	assign seg = ~seg_inv;
 | 
						|
endmodule
 |