aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYRabbit <rabbit@yrabbit.cyou>2023-04-04 09:41:10 +1000
committerLofty <dan.ravensloft@gmail.com>2023-04-12 09:59:57 +0100
commitf9a6c0fcbd29c4a14d81307b6d9f51896dfff9cf (patch)
treef15be43a5bde11c3dd5b59fa7be6707f64740654
parent101075611fc5698739180017bf96b1abf140c8e7 (diff)
downloadyosys-f9a6c0fcbd29c4a14d81307b6d9f51896dfff9cf.tar.gz
yosys-f9a6c0fcbd29c4a14d81307b6d9f51896dfff9cf.tar.bz2
yosys-f9a6c0fcbd29c4a14d81307b6d9f51896dfff9cf.zip
gowin: Add serialization/deserialization primitives
Primitives are added to convert parallel signals to serial and vice versa. IDES4, IDES8, IDES10, IDES16, IVIDEO, OSER4, OSER8, OSER10, OSER16, OVIDEO. Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
-rw-r--r--techlibs/gowin/cells_sim.v244
1 files changed, 244 insertions, 0 deletions
diff --git a/techlibs/gowin/cells_sim.v b/techlibs/gowin/cells_sim.v
index 535fd05ed..86bd677e2 100644
--- a/techlibs/gowin/cells_sim.v
+++ b/techlibs/gowin/cells_sim.v
@@ -598,6 +598,250 @@ module TLVDS_OBUF (I, O, OB);
assign OB = ~I;
endmodule
+module OSER4(D3, D2, D1, D0, TX1, TX0, FCLK, PCLK, RESET, Q1, Q0);
+ output Q1;
+ output Q0;
+
+ input D3;
+ input D2;
+ input D1;
+ input D0;
+ input TX1;
+ input TX0;
+ input FCLK;
+ input PCLK;
+ input RESET;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+ parameter TXCLK_POL = 0;
+ parameter HWL = "false";
+endmodule
+
+module OSER8(D7, D6, D5, D4, D3, D2, D1, D0, TX3, TX2, TX1, TX0, FCLK, PCLK, RESET, Q1, Q0);
+ output Q1;
+ output Q0;
+
+ input D7;
+ input D6;
+ input D5;
+ input D4;
+ input D3;
+ input D2;
+ input D1;
+ input D0;
+ input TX3;
+ input TX2;
+ input TX1;
+ input TX0;
+ input FCLK;
+ input PCLK;
+ input RESET;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+ parameter TXCLK_POL = 0;
+ parameter HWL = "false";
+endmodule
+
+module OSER10(D9, D8, D7, D6, D5, D4, D3, D2, D1, D0, FCLK, PCLK, RESET, Q);
+ output Q;
+
+ input D9;
+ input D8;
+ input D7;
+ input D6;
+ input D5;
+ input D4;
+ input D3;
+ input D2;
+ input D1;
+ input D0;
+ input FCLK;
+ input PCLK;
+ input RESET;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module OVIDEO(D6, D5, D4, D3, D2, D1, D0, FCLK, PCLK, RESET, Q);
+ output Q;
+
+ input D6;
+ input D5;
+ input D4;
+ input D3;
+ input D2;
+ input D1;
+ input D0;
+ input FCLK;
+ input PCLK;
+ input RESET;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module OSER16(D15, D14, D13, D12, D11, D10,
+D9, D8, D7, D6, D5, D4, D3, D2, D1, D0, FCLK, PCLK,
+RESET, Q);
+ output Q;
+
+ input D15;
+ input D14;
+ input D13;
+ input D12;
+ input D11;
+ input D10;
+ input D9;
+ input D8;
+ input D7;
+ input D6;
+ input D5;
+ input D4;
+ input D3;
+ input D2;
+ input D1;
+ input D0;
+ input FCLK;
+ input PCLK;
+ input RESET;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IDES4(Q3, Q2, Q1, Q0, FCLK, PCLK,
+RESET, CALIB, D);
+ input D;
+ input FCLK;
+ input PCLK;
+ input RESET;
+ input CALIB;
+
+ output Q3;
+ output Q2;
+ output Q1;
+ output Q0;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IDES8(Q7, Q6, Q5, Q4, Q3, Q2, Q1, Q0, FCLK, PCLK,
+RESET, CALIB, D);
+ input D;
+ input FCLK;
+ input PCLK;
+ input RESET;
+ input CALIB;
+
+ output Q7;
+ output Q6;
+ output Q5;
+ output Q4;
+ output Q3;
+ output Q2;
+ output Q1;
+ output Q0;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IDES10(Q9, Q8, Q7, Q6, Q5, Q4, Q3, Q2, Q1, Q0, FCLK, PCLK,
+RESET, CALIB, D);
+ input D;
+ input FCLK;
+ input PCLK;
+ input RESET;
+ input CALIB;
+
+ output Q9;
+ output Q8;
+ output Q7;
+ output Q6;
+ output Q5;
+ output Q4;
+ output Q3;
+ output Q2;
+ output Q1;
+ output Q0;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IVIDEO(Q6, Q5, Q4, Q3, Q2, Q1, Q0, FCLK, PCLK,
+RESET, CALIB, D);
+ input D;
+ input FCLK;
+ input PCLK;
+ input RESET;
+ input CALIB;
+
+ output Q6;
+ output Q5;
+ output Q4;
+ output Q3;
+ output Q2;
+ output Q1;
+ output Q0;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IDES16(Q15, Q14, Q13, Q12, Q11, Q10,
+Q9, Q8, Q7, Q6, Q5, Q4, Q3, Q2, Q1, Q0, FCLK, PCLK,
+RESET, CALIB, D);
+ input D;
+ input FCLK;
+ input PCLK;
+ input RESET;
+ input CALIB;
+
+ output Q15;
+ output Q14;
+ output Q13;
+ output Q12;
+ output Q11;
+ output Q10;
+ output Q9;
+ output Q8;
+ output Q7;
+ output Q6;
+ output Q5;
+ output Q4;
+ output Q3;
+ output Q2;
+ output Q1;
+ output Q0;
+
+ parameter GSREN = "false";
+ parameter LSREN = "true";
+endmodule
+
+module IDDR(D, CLK, Q0, Q1);
+ input D;
+ input CLK;
+ output Q0;
+ output Q1;
+ parameter Q0_INIT = 1'b0;
+ parameter Q1_INIT = 1'b0;
+endmodule
+
+module IDDRC(D, CLK, CLEAR, Q0, Q1);
+ input D;
+ input CLK;
+ input CLEAR;
+ output Q0;
+ output Q1;
+ parameter Q0_INIT = 1'b0;
+ parameter Q1_INIT = 1'b0;
+endmodule
+
(* blackbox *)
module ODDR(D0, D1, TX, CLK, Q0, Q1);
input D0;