mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 19:52:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			310 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			310 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
| module IBUF(input I, output O);
 | |
|     assign O = I;
 | |
| endmodule
 | |
| 
 | |
| module IOBUFE(input I, input E, output O, inout IO);
 | |
|     assign O = IO;
 | |
|     assign IO = E ? I : 1'bz;
 | |
| endmodule
 | |
| 
 | |
| module ANDTERM(IN, IN_B, OUT);
 | |
|     parameter TRUE_INP = 0;
 | |
|     parameter COMP_INP = 0;
 | |
| 
 | |
|     input [TRUE_INP-1:0] IN;
 | |
|     input [COMP_INP-1:0] IN_B;
 | |
|     output reg OUT;
 | |
| 
 | |
|     integer i;
 | |
| 
 | |
|     always @(*) begin
 | |
|         OUT = 1;
 | |
|         for (i = 0; i < TRUE_INP; i=i+1)
 | |
|             OUT = OUT & IN[i];
 | |
|         for (i = 0; i < COMP_INP; i=i+1)
 | |
|             OUT = OUT & ~IN_B[i];
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module ORTERM(IN, OUT);
 | |
|     parameter WIDTH = 0;
 | |
| 
 | |
|     input [WIDTH-1:0] IN;
 | |
|     output reg OUT;
 | |
| 
 | |
|     integer i;
 | |
| 
 | |
|     always @(*) begin
 | |
|         OUT = 0;
 | |
|         for (i = 0; i < WIDTH; i=i+1) begin
 | |
|             OUT = OUT | IN[i];
 | |
|         end
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module MACROCELL_XOR(IN_PTC, IN_ORTERM, OUT);
 | |
|     parameter INVERT_OUT = 0;
 | |
| 
 | |
|     input IN_PTC;
 | |
|     input IN_ORTERM;
 | |
|     output wire OUT;
 | |
| 
 | |
|     wire xor_intermed;
 | |
| 
 | |
|     assign OUT = INVERT_OUT ? ~xor_intermed : xor_intermed;
 | |
|     assign xor_intermed = IN_ORTERM ^ IN_PTC;
 | |
| endmodule
 | |
| 
 | |
| module FDCP (C, PRE, CLR, D, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module FDCP_N (C, PRE, CLR, D, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module LDCP (G, PRE, CLR, D, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input G, PRE, CLR, D;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @* begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (G == 1)
 | |
|             Q <= D;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module LDCP_N (G, PRE, CLR, D, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input G, PRE, CLR, D;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @* begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (G == 0)
 | |
|             Q <= D;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module BUFG(I, O);
 | |
|     input I;
 | |
|     output O;
 | |
| 
 | |
|     assign O = I;
 | |
| endmodule
 | |
| 
 | |
| module BUFGSR(I, O);
 | |
|     parameter INVERT = 0;
 | |
| 
 | |
|     input I;
 | |
|     output O;
 | |
| 
 | |
|     assign O = INVERT ? ~I : I;
 | |
| endmodule
 | |
| 
 | |
| module BUFGTS(I, O);
 | |
|     parameter INVERT = 0;
 | |
| 
 | |
|     input I;
 | |
|     output O;
 | |
| 
 | |
|     assign O = INVERT ? ~I : I;
 | |
| endmodule
 | |
| 
 | |
| module FDDCP (C, PRE, CLR, D, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module FTCP (C, PRE, CLR, T, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, T;
 | |
|     output wire Q;
 | |
|     reg Q_;
 | |
| 
 | |
|     initial begin
 | |
|         Q_ <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q_ <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q_ <= 1;
 | |
|         else if (T == 1)
 | |
|             Q_ <= ~Q_;
 | |
|     end
 | |
| 
 | |
|     assign Q = Q_;
 | |
| endmodule
 | |
| 
 | |
| module FTCP_N (C, PRE, CLR, T, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, T;
 | |
|     output wire Q;
 | |
|     reg Q_;
 | |
| 
 | |
|     initial begin
 | |
|         Q_ <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q_ <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q_ <= 1;
 | |
|         else if (T == 1)
 | |
|             Q_ <= ~Q_;
 | |
|     end
 | |
| 
 | |
|     assign Q = Q_;
 | |
| endmodule
 | |
| 
 | |
| module FTDCP (C, PRE, CLR, T, Q);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, T;
 | |
|     output wire Q;
 | |
|     reg Q_;
 | |
| 
 | |
|     initial begin
 | |
|         Q_ <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q_ <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q_ <= 1;
 | |
|         else if (T == 1)
 | |
|             Q_ <= ~Q_;
 | |
|     end
 | |
| 
 | |
|     assign Q = Q_;
 | |
| endmodule
 | |
| 
 | |
| module FDCPE (C, PRE, CLR, D, Q, CE);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D, CE;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else if (CE == 1)
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module FDCPE_N (C, PRE, CLR, D, Q, CE);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D, CE;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else if (CE == 1)
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 | |
| 
 | |
| module FDDCPE (C, PRE, CLR, D, Q, CE);
 | |
|     parameter INIT = 0;
 | |
| 
 | |
|     input C, PRE, CLR, D, CE;
 | |
|     output reg Q;
 | |
| 
 | |
|     initial begin
 | |
|         Q <= INIT;
 | |
|     end
 | |
| 
 | |
|     always @(posedge C, negedge C, posedge PRE, posedge CLR) begin
 | |
|         if (CLR == 1)
 | |
|             Q <= 0;
 | |
|         else if (PRE == 1)
 | |
|             Q <= 1;
 | |
|         else if (CE == 1)
 | |
|             Q <= D;
 | |
|     end
 | |
| endmodule
 |