mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-28 18:29:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			209 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # test: acceptable for output IOFF promotion
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input a, output reg o);
 | |
|     always @(posedge clk) begin
 | |
|         o <= ~a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 1 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: acceptable for output IOFF promotion
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input [3:0] a, output reg [3:0] o);
 | |
|     always @(posedge clk) begin
 | |
|         o <= ~a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 4 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: acceptable for output IOFF promotion; duplicate output FF
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input [3:0] a, output [3:0] o, output [3:0] p);
 | |
|     reg [3:0] r;
 | |
|     always @(posedge clk) begin
 | |
|         r <= ~a;
 | |
|     end
 | |
|     assign o = r;
 | |
|     assign p = r;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 8 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: acceptable for input IOFF promotion
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input a, output o);
 | |
|     reg r;
 | |
|     always @(posedge clk) begin
 | |
|         r <= a;
 | |
|     end
 | |
|     assign o = ~r;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 1 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: acceptable for input IOFF promotion
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input [3:0] a, output [3:0] o);
 | |
|     reg [3:0] r;
 | |
|     always @(posedge clk) begin
 | |
|         r <= a;
 | |
|     end
 | |
|     assign o = ~r;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 4 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: acceptable for either IOFF promotion
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input a, output reg o);
 | |
|     always @(posedge clk) begin
 | |
|         o <= a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 1 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for output IOFF promotion: output signal is used
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input a, output reg o);
 | |
|     always @(posedge clk) begin
 | |
|         o <= ~a | o;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for output IOFF promotion: output signal is used
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input [3:0] a, output reg [3:0] o);
 | |
|     always @(posedge clk) begin
 | |
|         o <= ~a | o;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for input IOFF promotion: input signal is used
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input a, output o, p);
 | |
|     reg r;
 | |
|     always @(posedge clk) begin
 | |
|         r <= a;
 | |
|     end
 | |
|     assign o = ~r;
 | |
|     assign p = ~a;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for input IOFF promotion: input signal is used
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input [3:0] a, output [3:0] o, output [3:0] p);
 | |
|     reg [3:0] r;
 | |
|     always @(posedge clk) begin
 | |
|         r <= a;
 | |
|     end
 | |
|     assign o = ~r;
 | |
|     assign p = ~a;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for IOFF promotion: FF has reset
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input rst, input a, output reg o);
 | |
|     always @(posedge clk) begin
 | |
|         if (rst)
 | |
|             o <= 1'b0;
 | |
|         else
 | |
|             o <= a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for IOFF promotion: FF has reset
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input rst, input [3:0] a, output reg [3:0] o);
 | |
|     always @(posedge clk) begin
 | |
|         if (rst)
 | |
|             o <= 4'b0;
 | |
|         else
 | |
|             o <= a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for IOFF promotion: FF has enable
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input en, input a, output reg o);
 | |
|     always @(posedge clk) begin
 | |
|         if (en)
 | |
|             o <= a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: not acceptable for IOFF promotion: FF has enable
 | |
| read_verilog <<EOF
 | |
| module top (input clk, input en, input [3:0] a, output reg [3:0] o);
 | |
|     always @(posedge clk) begin
 | |
|         if (en)
 | |
|             o <= a;
 | |
|     end
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 0 t:dff
 | |
| 
 | |
| design -reset
 | |
| # test: duplicate registers driving multiple output ports
 | |
| read_verilog <<EOF
 | |
| module top (
 | |
|     input clk,
 | |
|     input en,
 | |
|     input [3:0] a,
 | |
|     output reg [3:0] o_1,
 | |
| 	output wire [3:0] o_2
 | |
| );
 | |
| always @(posedge clk) begin
 | |
|     o_1[1:0] <= ~a[1:0];
 | |
|     if (en)
 | |
|         o_1[2] <= a[2];
 | |
| end
 | |
| always @(*) o_1[3] = a[3];
 | |
| assign o_2 = o_1;
 | |
| endmodule
 | |
| EOF
 | |
| synth_quicklogic -family qlf_k6n10f -top top
 | |
| select -assert-count 4 t:dff
 |