preset_5k.v
/////////////////////////////////////////////////// // PRESET_5K.V Version 1.0 // // Example of 5k FF with Async. Preset // // implemented with inverter on input and output // // of FF because FFs have only async. resets // // November 1997 // ///////////////////////////////////////////////////
module preset_5k (CLK, DATA, PRESET, Q);
input CLK, DATA, PRESET; output Q;
reg Q;
always @ (posedge CLK or posedge PRESET) begin: SET_FLOP if (PRESET) Q <= 1; else Q <= DATA; end
endmodule
barrel.v
/////////////////////////////////////////
// BARREL.V Version 1.0 //
// Xilinx HDL Synthesis Design Guide //
// XAPP 26 http://www.xilinx.com //
// 16-bit Barrel Shifter [shift right] //
// May 1997 //
/////////////////////////////////////////
module barrel (S, A_P, B_P);
input [3:0] S;
input [15:0] A_P;
output [15:0] B_P;
reg [15:0] B_P;
wire [1:0] SEL1, SEL2;
reg [15:0] C;
assign SEL1 = S[1:0];
assign SEL2 = S[3:2];
always @ (A_P or SEL1)
begin
case (SEL1)
2'b00 : // Shift by 0
begin
C <= A_P;
end
2'b01 : // Shift by 1
begin
C[15] <= A_P[0];
C[14:0] <= A_P[15:1];
end
2'b10 : // Shift by 2
begin
C[15:14] <= A_P[1:0];
C[13:0] <= A_P[15:2];
end
2'b11 : // Shift by 3
begin
C[15:13] <= A_P[2:0];
C[12:0] <= A_P[15:3];
end
default :
C <= A_P;
endcase
end
always @ (C or SEL2)
begin
case (SEL2)
2'b00 : // Shift by 0
begin
B_P <= C;
end
2'b01 : // Shift by 4
begin
B_P[15:12] <= C[3:0];
B_P[11:0] <= C[15:4];
end
2'b10 : // Shift by 8
begin
B_P[7:0] <= C[15:8];
B_P[15:8] <= C[7:0];
end
2'b11 : // Shift by 12
begin
B_P[3:0] <= C[15:12];
B_P[15:4] <= C[11:0];
end
default :
B_P <= C;
endcase
end
endmodule
barrel_org.v
///////////////////////////////////////////////////
// BARREL_ORG.V Version 1.0 //
// Xilinx HDL Synthesis Design Guide //
// Unoptimized model for a 16-bit Barrel Shifter //
// THIS EXAMPLE IS FOR COMPARISON ONLY //
// Use BARREL.V //
// January 1998 //
///////////////////////////////////////////////////
module barrel_org (S, A_P, B_P);
input [3:0] S;
input [15:0] A_P;
output [15:0] B_P;
reg [15:0] B_P;
always @ (A_P or S)
begin
case (S)
4'b0000 : // Shift by 0
begin
B_P <= A_P;
end
4'b0001 : // Shift by 1
begin
B_P[15] <= A_P[0];
B_P[14:0] <= A_P[15:1];
end
4'b0010 : // Shift by 2
begin
B_P[15:14] <= A_P[1:0];
B_P[13:0] <= A_P[15:2];
end
4'b0011 : // Shift by 3
begin
B_P[15:13] <= A_P[2:0];
B_P[12:0] <= A_P[15:3];
end
4'b0100 : // Shift by 4
begin
B_P[15:12] <= A_P[3:0];
B_P[11:0] <= A_P[15:4];
end
4'b0101 : // Shift by 5
begin
B_P[15:11] <= A_P[4:0];
B_P[10:0] <= A_P[15:5];
end
4'b0110 : // Shift by 6
begin
B_P[15:10] <= A_P[5:0];
B_P[9:0] <= A_P[15:6];
end
4'b0111 : // Shift by 7
begin
B_P[15:9] <= A_P[6:0];
B_P[8:0] <= A_P[15:7];
end
4'b1000 : // Shift by 8
begin
B_P[15:8] <= A_P[7:0];
B_P[7:0] <= A_P[15:8];
end
4'b1001 : // Shift by 9
begin
B_P[15:7] <= A_P[8:0];
B_P[6:0] <= A_P[15:9];
end
4'b1010 : // Shift by 10
begin
B_P[15:6] <= A_P[9:0];
B_P[5:0] <= A_P[15:10];
end
4'b1011 : // Shift by 11
begin
B_P[15:5] <= A_P[10:0];
B_P[4:0] <= A_P[15:11];
end
4'b1100 : // Shift by 12
begin
B_P[15:4] <= A_P[11:0];
B_P[3:0] <= A_P[15:12];
end
4'b1101 : // Shift by 13
begin
B_P[15:3] <= A_P[12:0];
B_P[2:0] <= A_P[15:13];
end
4'b1110 : // Shift by 14
begin
B_P[15:2] <= A_P[13:0];
B_P[1:0] <= A_P[15:14];
end
4'b1111 : // Shift by 15
begin
B_P[15:1] <= A_P[14:0];
B_P[0] <= A_P[15];
end
default :
B_P <= A_P;
endcase
end
endmodule
bidir_io_from_lb.v
// Xilinx Verilog produced by program ngd2ver, Version M1.3.7 // Date: Mon Sep 8 17:10:12 1997 // Design file: /var/tmp/bidir_io_from_lb.ngd // Device: xc4000ex `timescale 1 ns/1 ps
module bidir_io_from_lb (OE, IGATE, P, O, IQ); input OE; input IGATE; inout [1:0] P; input [1:0] O; output [1:0] IQ;
wire INV_FF_I0_OUT, INV_FF_I1_OUT, 'FF_I0/D_BUF , 'FF_I0/G_INV , 'FF_I1/D_BUF , 'FF_I1/G_INV , TRI_0_2_INV, TRI_1_2_INV, GND; `ifdef GSR_SIGNAL wire GSR = `GSR_SIGNAL ; `else wire GSR ; `endif
X_INV INV_FF_I0 (.IN (IGATE), .OUT (INV_FF_I0_OUT)); X_INV INV_FF_I1 (.IN (IGATE), .OUT (INV_FF_I1_OUT)); X_TRI TRI_0 (.IN (O[0]), .OUT (P[0]), .CTL (TRI_0_2_INV)); X_TRI TRI_1 (.IN (O[1]), .OUT (P[1]), .CTL (TRI_1_2_INV)); X_BUF 'FF_I0/D_BUF_2 (.IN (P[0]), .OUT ('FF_I0/D_BUF )); X_INV 'FF_I0/G_INV_3 (.IN (INV_FF_I0_OUT), .OUT ('FF_I0/G_INV )); X_LATCH 'FF_I0/INLATCH (.IN ('FF_I0/D_BUF ), .CLK ('FF_I0/G_INV ), .SET (GND), .RST (GSR), .OUT (IQ[0])); X_BUF 'FF_I1/D_BUF_7 (.IN (P[1]), .OUT ('FF_I1/D_BUF )); X_INV 'FF_I1/G_INV_8 (.IN (INV_FF_I1_OUT), .OUT ('FF_I1/G_INV )); X_LATCH 'FF_I1/INLATCH (.IN ('FF_I1/D_BUF ), .CLK ('FF_I1/G_INV ), .SET (GND), .RST (GSR), .OUT (IQ[1])); X_INV TRI_0_2_INV_13 (.IN (OE), .OUT (TRI_0_2_INV)); X_INV TRI_1_2_INV_14 (.IN (OE), .OUT (TRI_1_2_INV)); X_ZERO GND_15 (.OUT (GND)); X_PD NGD2VER_PD_10 (.OUT (GSR) ); endmodule
bidir_logiblox.v
/////////////////////////////////////////// // BIDIR_LOGIBLOX.V Version 1.0 // // This is an example of using LogiBLOX // // to create a bi-directional port. // // August 1997 // ///////////////////////////////////////////
//---------------------------------------------------- // LogiBLOX BIDI Module "bidir_io_from_lb" // Created by LogiBLOX version M1.3.7 // on Mon Sep 8 17:10:15 1997 // Attributes // MODTYPE = BIDI // BUS_WIDTH = 2 // IN_TYPE = LATCH // OUT_TYPE = TRI //----------------------------------------------------
module bidir_logiblox (DATA, READ_WRITE);
input READ_WRITE ; inout [1:0] DATA ;
reg [1:0] LATCH_OUT ; wire [1:0] DATA_OUT ;
assign DATA_OUT[0] = LATCH_OUT[0] & LATCH_OUT[1]; assign DATA_OUT[1] = LATCH_OUT[0] | LATCH_OUT[1];
// LogBLOX instantiation
bidir_io_from_lb BIDIR_BUSSED_PORT ( .O(DATA_OUT), .OE(READ_WRITE), .P(DATA), .IQ(LATCH_OUT), .IGATE(READ_WRITE));
endmodule
module bidir_io_from_lb(O, OE, P, IQ, IGATE); input [1:0] O; input OE; input IGATE; inout [1:0] P; output [1:0] IQ; endmodule
bidir_infer.v ////////////////////////////////////////////////////////////////////
// BIDIR_INFER.V Version 1.0 //
// This is an example of an inference of a bi-directional signal. //
// Note: Logic description of port should always be on top-level //
// code when using Synopsys Compiler and verilog. //
// August 1997 //
////////////////////////////////////////////////////////////////////
module bidir_infer (DATA, READ_WRITE);
input READ_WRITE ;
inout [1:0] DATA ;
reg [1:0] LATCH_OUT ;
always @ (READ_WRITE)
begin
if (READ_WRITE == 1'b1)
LATCH_OUT <= DATA;
end
assign DATA[0] = READ_WRITE ? 1'bZ : (LATCH_OUT[0] & LATCH_OUT[1]);
assign DATA[1] = READ_WRITE ? 1'bZ : (LATCH_OUT[0] | LATCH_OUT[1]);
endmodule
bidir_instantiate.v ////////////////////////////////////////////
// BIDIR_INSTANTIATE.V Version 1.0 //
// This is an example of an instnatiation //
// of a bi-directional port. //
// August 1997 //
////////////////////////////////////////////
module bidir_instantiate (DATA, READ_WRITE);
input READ_WRITE ;
inout [1:0] DATA ;
reg [1:0] LATCH_OUT ;
wire [1:0] DATA_OUT ;
wire GATE ;
assign GATE = ~READ_WRITE;
assign DATA_OUT[0] = LATCH_OUT[0] & LATCH_OUT[1];
assign DATA_OUT[1] = LATCH_OUT[0] | LATCH_OUT[1];
// I/O primitive instantiation
ILD_1 INPUT_PATH_0 (.Q(LATCH_OUT[0]), .D(DATA[0]), .G(GATE));
ILD_1 INPUT_PATH_1 (.Q(LATCH_OUT[1]), .D(DATA[1]), .G(GATE));
OBUFT_S OUPUT_PATH_0 (.O(DATA[0]), .I(DATA_OUT[0]), .T(READ_WRITE));
OBUFT_S OUPUT_PATH_1 (.O(DATA[1]), .I(DATA_OUT[1]), .T(READ_WRITE));
endmodule
bnd_scan.v /////////////////////////////////////////////////////
// BND_SCAN.V Version 1.0 //
// Example of instantiating the BSCAN symbol in //
// activating the Boundary Scan circuitry //
// Count4 is an instanited .v file of a counter //
// September 1997 //
/////////////////////////////////////////////////////
module bnd_scan (LOAD_P, CLOCK_P, CE_P, RESET_P,
DATA_P, COUT_P);
input LOAD_P, CLOCK_P, CE_P, RESET_P;
input [3:0] DATA_P;
output [3:0] COUT_P;
wire TDI_NET, TMS_NET, TCK_NE, TDO_NET;
BSCAN U1 (.TDO(TDO_NET), .TDI(TDI_NET), .TMS(TMS_NET), .TCK(TCK_NET));
TDI U2 (.I(TDI_NET));
TCK U3 (.I(TCK_NET));
TMS U4 (.I(TMS_NET));
TDO U5 (.O(TDO_NET));
count4 U6 (.LOAD(LOAD_P), .CLOCK(CLOCK_P), .CE(CE_P),
.RST(RESET_P), .DATA(DATA_P), .COUT(COUT_P));
endmodule
count4.v
/////////////////////////////////////////////////////
// BND_SCAN.V Version 1.0 //
// Example of instantiating the BSCAN symbol in //
// activating the Boundary Scan circuitry //
// Count4 is an instanited .v file of a counter //
// September 1997 //
/////////////////////////////////////////////////////
module bnd_scan (LOAD_P, CLOCK_P, CE_P, RESET_P,
DATA_P, COUT_P);
input LOAD_P, CLOCK_P, CE_P, RESET_P;
input [3:0] DATA_P;
output [3:0] COUT_P;
wire TDI_NET, TMS_NET, TCK_NE, TDO_NET;
BSCAN U1 (.TDO(TDO_NET), .TDI(TDI_NET), .TMS(TMS_NET), .TCK(TCK_NET));
TDI U2 (.I(TDI_NET));
TCK U3 (.I(TCK_NET));
TMS U4 (.I(TMS_NET));
TDO U5 (.O(TDO_NET));
count4 U6 (.LOAD(LOAD_P), .CLOCK(CLOCK_P), .CE(CE_P),
.RST(RESET_P), .DATA(DATA_P), .COUT(COUT_P));
endmodule
|