mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			136 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
 | 
						|
//Cells still in this file have INCOMPLETE simulation models, need to finish them
 | 
						|
 | 
						|
module GP_DCMP(input[7:0] INP, input[7:0] INN, input CLK, input PWRDN, output reg GREATER, output reg EQUAL);
 | 
						|
	parameter PWRDN_SYNC = 1'b0;
 | 
						|
	parameter CLK_EDGE = "RISING";
 | 
						|
	parameter GREATER_OR_EQUAL = 1'b0;
 | 
						|
 | 
						|
	//TODO implement power-down mode
 | 
						|
 | 
						|
	initial GREATER = 0;
 | 
						|
	initial EQUAL = 0;
 | 
						|
 | 
						|
	wire clk_minv = (CLK_EDGE == "RISING") ? CLK : ~CLK;
 | 
						|
	always @(posedge clk_minv) begin
 | 
						|
		if(GREATER_OR_EQUAL)
 | 
						|
			GREATER <= (INP >= INN);
 | 
						|
		else
 | 
						|
			GREATER <= (INP > INN);
 | 
						|
 | 
						|
		EQUAL <= (INP == INN);
 | 
						|
	end
 | 
						|
 | 
						|
endmodule
 | 
						|
 | 
						|
module GP_EDGEDET(input IN, output reg OUT);
 | 
						|
 | 
						|
	parameter EDGE_DIRECTION = "RISING";
 | 
						|
	parameter DELAY_STEPS = 1;
 | 
						|
	parameter GLITCH_FILTER = 0;
 | 
						|
 | 
						|
	//not implemented for simulation
 | 
						|
 | 
						|
endmodule
 | 
						|
 | 
						|
module GP_RCOSC(input PWRDN, output reg CLKOUT_HARDIP, output reg CLKOUT_FABRIC);
 | 
						|
 | 
						|
	parameter PWRDN_EN = 0;
 | 
						|
	parameter AUTO_PWRDN = 0;
 | 
						|
	parameter HARDIP_DIV = 1;
 | 
						|
	parameter FABRIC_DIV = 1;
 | 
						|
	parameter OSC_FREQ = "25k";
 | 
						|
 | 
						|
	initial CLKOUT_HARDIP = 0;
 | 
						|
	initial CLKOUT_FABRIC = 0;
 | 
						|
 | 
						|
	//output dividers not implemented for simulation
 | 
						|
	//auto powerdown not implemented for simulation
 | 
						|
 | 
						|
	always begin
 | 
						|
		if(PWRDN) begin
 | 
						|
			CLKOUT_HARDIP = 0;
 | 
						|
			CLKOUT_FABRIC = 0;
 | 
						|
		end
 | 
						|
		else begin
 | 
						|
 | 
						|
			if(OSC_FREQ == "25k") begin
 | 
						|
				//half period of 25 kHz
 | 
						|
				#20000;
 | 
						|
			end
 | 
						|
 | 
						|
			else begin
 | 
						|
				//half period of 2 MHz
 | 
						|
				#250;
 | 
						|
			end
 | 
						|
 | 
						|
			CLKOUT_HARDIP = ~CLKOUT_HARDIP;
 | 
						|
			CLKOUT_FABRIC = ~CLKOUT_FABRIC;
 | 
						|
		end
 | 
						|
	end
 | 
						|
 | 
						|
endmodule
 | 
						|
 | 
						|
module GP_RINGOSC(input PWRDN, output reg CLKOUT_HARDIP, output reg CLKOUT_FABRIC);
 | 
						|
 | 
						|
	parameter PWRDN_EN = 0;
 | 
						|
	parameter AUTO_PWRDN = 0;
 | 
						|
	parameter HARDIP_DIV = 1;
 | 
						|
	parameter FABRIC_DIV = 1;
 | 
						|
 | 
						|
	initial CLKOUT_HARDIP = 0;
 | 
						|
	initial CLKOUT_FABRIC = 0;
 | 
						|
 | 
						|
	//output dividers not implemented for simulation
 | 
						|
	//auto powerdown not implemented for simulation
 | 
						|
 | 
						|
	always begin
 | 
						|
		if(PWRDN) begin
 | 
						|
			CLKOUT_HARDIP = 0;
 | 
						|
			CLKOUT_FABRIC = 0;
 | 
						|
		end
 | 
						|
		else begin
 | 
						|
			//half period of 27 MHz
 | 
						|
			#18.518;
 | 
						|
			CLKOUT_HARDIP = ~CLKOUT_HARDIP;
 | 
						|
			CLKOUT_FABRIC = ~CLKOUT_FABRIC;
 | 
						|
		end
 | 
						|
	end
 | 
						|
 | 
						|
endmodule
 | 
						|
 | 
						|
module GP_SPI(
 | 
						|
	input SCK,
 | 
						|
	inout SDAT,
 | 
						|
	input CSN,
 | 
						|
	input[7:0] TXD_HIGH,
 | 
						|
	input[7:0] TXD_LOW,
 | 
						|
	output reg[7:0] RXD_HIGH,
 | 
						|
	output reg[7:0] RXD_LOW,
 | 
						|
	output reg INT);
 | 
						|
 | 
						|
	initial RXD_HIGH = 0;
 | 
						|
	initial RXD_LOW = 0;
 | 
						|
	initial INT = 0;
 | 
						|
 | 
						|
	parameter DATA_WIDTH = 8;		//byte or word width
 | 
						|
	parameter SPI_CPHA = 0;			//SPI clock phase
 | 
						|
	parameter SPI_CPOL = 0;			//SPI clock polarity
 | 
						|
	parameter DIRECTION = "INPUT";	//SPI data direction (either input to chip or output to host)
 | 
						|
	//parallel output to fabric not yet implemented
 | 
						|
 | 
						|
	//TODO: write sim model
 | 
						|
	//TODO: SPI SDIO control... can we use ADC output while SPI is input??
 | 
						|
	//TODO: clock sync
 | 
						|
 | 
						|
endmodule
 | 
						|
 | 
						|
//keep constraint needed to prevent optimization since we have no outputs
 | 
						|
(* keep *)
 | 
						|
module GP_SYSRESET(input RST);
 | 
						|
	parameter RESET_MODE = "EDGE";
 | 
						|
	parameter EDGE_SPEED = 4;
 | 
						|
 | 
						|
	//cannot simulate whole system reset
 | 
						|
 | 
						|
endmodule
 |