blob: 149465a5462e86bf63dbf6e65029f4f6ac0911bb [file]
module top(
input wire clk,
input wire rx,
output wire tx,
input wire [15:0] sw,
output wire [15:0] led
);
localparam NUM_FF = 4;
localparam FF_TYPE = "FDRE";
assign tx = rx;
// Generate some signals for the CE and reset lines.
wire ce = sw[14];
wire reset = sw[15];
wire [(4*NUM_FF)-1:0] Q;
wire [(4*NUM_FF)-1:0] D;
reg rst = 1;
always @(posedge clk) begin
rst <= 0;
end
assign led[0] = Q[0];
assign led[1] = Q[1];
assign led[2] = Q[2];
assign led[3] = Q[3];
assign led[4] = Q[4];
assign led[5] = Q[4*(NUM_FF-1)+0];
assign led[6] = Q[4*(NUM_FF-1)+1];
assign led[7] = Q[4*(NUM_FF-1)+2];
assign led[8] = Q[4*(NUM_FF-1)+3];
assign led[9] = ^Q;
assign led[10] = |Q;
assign led[11] = &Q;
assign led[12] = ^sw;
assign led[13] = |sw;
assign led[14] = &sw;
assign led[15] = sw[15];
genvar i;
// 4 FF's of each SR/CE varient to check packing behavior.
generate for(i = 0; i < NUM_FF; i=i+1) begin:ff
assign D[4*i+0] = sw[(4*i+0) % 14];
assign D[4*i+1] = sw[(4*i+1) % 14];
assign D[4*i+2] = sw[(4*i+2) % 14];
assign D[4*i+3] = sw[(4*i+3) % 14];
// Tie SR to GND and CE to VCC
(* keep *) FF #(
.INIT(1'b0),
.FF_TYPE(FF_TYPE)
) vcc_gnd (
.Q(Q[4*i+0]),
.C(clk),
.D(D[4*i+0]),
.CE(1'b1),
.SR(1'b0)
);
// Tie SR to GND and CE to signal
(* keep *) FF #(
.INIT(1'b0),
.FF_TYPE(FF_TYPE)
) s_gnd (
.Q(Q[4*i+1]),
.C(clk),
.D(D[4*i+1]),
.CE(ce),
.SR(1'b0)
);
// Tie SR to signal and CE to signal
(* keep *) FF #(
.INIT(1'b0),
.FF_TYPE(FF_TYPE)
) s_s (
.Q(Q[4*i+2]),
.C(clk),
.D(D[4*i+2]),
.CE(ce),
.SR(reset)
);
// Tie SR to signal and CE to VCC
(* keep *) FF #(
.INIT(0),
.FF_TYPE(FF_TYPE)
) vcc_s (
.Q(Q[4*i+3]),
.C(clk),
.D(D[4*i+3]),
.CE(1'b1),
.SR(reset)
);
end endgenerate
endmodule