mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	Improvements in sf2 cells_sim.v
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
		
							parent
							
								
									2d2c1617ee
								
							
						
					
					
						commit
						8b0719d1e3
					
				
					 2 changed files with 261 additions and 40 deletions
				
			
		| 
						 | 
				
			
			@ -1,41 +1,3 @@
 | 
			
		|||
module SLE (
 | 
			
		||||
	output Q,
 | 
			
		||||
	input ADn,
 | 
			
		||||
	input ALn,
 | 
			
		||||
	input CLK,
 | 
			
		||||
	input D,
 | 
			
		||||
	input LAT,
 | 
			
		||||
	input SD,
 | 
			
		||||
	input EN,
 | 
			
		||||
	input SLn
 | 
			
		||||
);
 | 
			
		||||
	reg q_latch, q_ff;
 | 
			
		||||
 | 
			
		||||
	always @(posedge CLK, negedge ALn) begin
 | 
			
		||||
		if (!ALn) begin
 | 
			
		||||
			q_ff <= !ADn;
 | 
			
		||||
		end else if (EN) begin
 | 
			
		||||
			if (!SLn)
 | 
			
		||||
				q_ff <= SD;
 | 
			
		||||
			else
 | 
			
		||||
				q_ff <= D;
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	always @* begin
 | 
			
		||||
		if (!ALn) begin
 | 
			
		||||
			q_latch <= !ADn;
 | 
			
		||||
		end else if (CLK && EN) begin
 | 
			
		||||
			if (!SLn)
 | 
			
		||||
				q_ff <= SD;
 | 
			
		||||
			else
 | 
			
		||||
				q_ff <= D;
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	assign Q = LAT ? q_latch : q_ff;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module CFG1 (
 | 
			
		||||
	output Y,
 | 
			
		||||
	input A
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +36,41 @@ module CFG4 (
 | 
			
		|||
	assign Y = INIT >> {D, C, B, A};
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module ADD2 (
 | 
			
		||||
	input A, B,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A & B;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module ADD3 (
 | 
			
		||||
	input A, B, C,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A & B & C;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module ADD4 (
 | 
			
		||||
	input A, B, C, D,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A & B & C & D;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module BUFF (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module BUFD (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module CLKINT (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +78,217 @@ module CLKINT (
 | 
			
		|||
	assign Y = A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module CLKINT_PRESERVE (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module GCLKINT (
 | 
			
		||||
	input A, EN,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A & EN;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module RCLKINT (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module RGCLKINT (
 | 
			
		||||
	input A, EN,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A & EN;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module SLE (
 | 
			
		||||
	output Q,
 | 
			
		||||
	input ADn,
 | 
			
		||||
	input ALn,
 | 
			
		||||
	input CLK,
 | 
			
		||||
	input D,
 | 
			
		||||
	input LAT,
 | 
			
		||||
	input SD,
 | 
			
		||||
	input EN,
 | 
			
		||||
	input SLn
 | 
			
		||||
);
 | 
			
		||||
	reg q_latch, q_ff;
 | 
			
		||||
 | 
			
		||||
	always @(posedge CLK, negedge ALn) begin
 | 
			
		||||
		if (!ALn) begin
 | 
			
		||||
			q_ff <= !ADn;
 | 
			
		||||
		end else if (EN) begin
 | 
			
		||||
			if (!SLn)
 | 
			
		||||
				q_ff <= SD;
 | 
			
		||||
			else
 | 
			
		||||
				q_ff <= D;
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	always @* begin
 | 
			
		||||
		if (!ALn) begin
 | 
			
		||||
			q_latch <= !ADn;
 | 
			
		||||
		end else if (CLK && EN) begin
 | 
			
		||||
			if (!SLn)
 | 
			
		||||
				q_ff <= SD;
 | 
			
		||||
			else
 | 
			
		||||
				q_ff <= D;
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	assign Q = LAT ? q_latch : q_ff;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// module AR1
 | 
			
		||||
// module FCEND_BUFF
 | 
			
		||||
// module FCINIT_BUFF
 | 
			
		||||
// module FLASH_FREEZE
 | 
			
		||||
// module OSCILLATOR
 | 
			
		||||
// module SYSRESET
 | 
			
		||||
// module SYSCTRL_RESET_STATUS
 | 
			
		||||
// module LIVE_PROBE_FB
 | 
			
		||||
// module GCLKBUF
 | 
			
		||||
// module GCLKBUF_DIFF
 | 
			
		||||
// module GCLKBIBUF
 | 
			
		||||
// module DFN1
 | 
			
		||||
// module DFN1C0
 | 
			
		||||
// module DFN1E1
 | 
			
		||||
// module DFN1E1C0
 | 
			
		||||
// module DFN1E1P0
 | 
			
		||||
// module DFN1P0
 | 
			
		||||
// module DLN1
 | 
			
		||||
// module DLN1C0
 | 
			
		||||
// module DLN1P0
 | 
			
		||||
 | 
			
		||||
module INV (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module INVD (
 | 
			
		||||
	input A,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module MX2 (
 | 
			
		||||
	input A, B, S,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = S ? B : A;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module MX4 (
 | 
			
		||||
	input D0, D1, D2, D3, S0, S1,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = S1 ? (S0 ? D3 : D2) : (S0 ? D1 : D0);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NAND2 (
 | 
			
		||||
	input A, B,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A & B);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NAND3 (
 | 
			
		||||
	input A, B, C,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A & B & C);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NAND4 (
 | 
			
		||||
	input A, B, C, D,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A & B & C & D);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NOR2 (
 | 
			
		||||
	input A, B,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A | B);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NOR3 (
 | 
			
		||||
	input A, B, C,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A | B | C);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module NOR4 (
 | 
			
		||||
	input A, B, C, D,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = !(A | B | C | D);
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module OR2 (
 | 
			
		||||
	input A, B,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A | B;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module OR3 (
 | 
			
		||||
	input A, B, C,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A | B | C;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module OR4 (
 | 
			
		||||
	input A, B, C, D,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A | B | C | D;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module XOR2 (
 | 
			
		||||
	input A, B,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A ^ B;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module XOR3 (
 | 
			
		||||
	input A, B, C,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A ^ B ^ C;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module XOR4 (
 | 
			
		||||
	input A, B, C, D,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A ^ B ^ C ^ D;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
module XOR8 (
 | 
			
		||||
	input A, B, C, D, E, F, G, H,
 | 
			
		||||
	output Y
 | 
			
		||||
);
 | 
			
		||||
	assign Y = A ^ B ^ C ^ D ^ E ^ F ^ G ^ H;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// module UJTAG
 | 
			
		||||
// module BIBUF
 | 
			
		||||
// module BIBUF_DIFF
 | 
			
		||||
// module CLKBIBUF
 | 
			
		||||
 | 
			
		||||
module CLKBUF (
 | 
			
		||||
	input PAD,
 | 
			
		||||
	output Y
 | 
			
		||||
| 
						 | 
				
			
			@ -88,6 +296,8 @@ module CLKBUF (
 | 
			
		|||
	assign Y = PAD;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// module CLKBUF_DIFF
 | 
			
		||||
 | 
			
		||||
module INBUF (
 | 
			
		||||
	input PAD,
 | 
			
		||||
	output Y
 | 
			
		||||
| 
						 | 
				
			
			@ -95,9 +305,20 @@ module INBUF (
 | 
			
		|||
	assign Y = PAD;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// module INBUF_DIFF
 | 
			
		||||
 | 
			
		||||
module OUTBUF (
 | 
			
		||||
	input D,
 | 
			
		||||
	output PAD
 | 
			
		||||
);
 | 
			
		||||
	assign PAD = D;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
// module OUTBUF_DIFF
 | 
			
		||||
// module TRIBUFF
 | 
			
		||||
// module TRIBUFF_DIFF
 | 
			
		||||
// module DDR_IN
 | 
			
		||||
// module DDR_OUT
 | 
			
		||||
// module RAM1K18
 | 
			
		||||
// module RAM64x18
 | 
			
		||||
// module MACC
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,8 +38,8 @@ static void handle_iobufs(Module *module, bool clkbuf_mode)
 | 
			
		|||
			for (auto bit : sigmap(cell->getPort("\\CLK")))
 | 
			
		||||
				clk_bits.insert(bit);
 | 
			
		||||
		}
 | 
			
		||||
		if (cell->type.in("\\INBUF", "\\OUTBUF", "\\TRIBUF", "\\BIBUF", "\\CLKBUF", "\\CLKBIBUF",
 | 
			
		||||
				"\\INBUF_DIFF", "\\OUTBUF_DIFF", "\\BIBUFF_DIFF", "\\TRIBUF_DIFF", "\\CLKBUF_DIFF",
 | 
			
		||||
		if (cell->type.in("\\INBUF", "\\OUTBUF", "\\TRIBUFF", "\\BIBUF", "\\CLKBUF", "\\CLKBIBUF",
 | 
			
		||||
				"\\INBUF_DIFF", "\\OUTBUF_DIFF", "\\BIBUFF_DIFF", "\\TRIBUFF_DIFF", "\\CLKBUF_DIFF",
 | 
			
		||||
				"\\GCLKBUF", "\\GCLKBUF_DIFF", "\\GCLKBIBUF")) {
 | 
			
		||||
			for (auto bit : sigmap(cell->getPort("\\PAD")))
 | 
			
		||||
				handled_io_bits.insert(bit);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue