1.Vectors
module top_module(
input [2:0] vec,
output [2:0] outv,
output o2,
output o1,
output o0
);
assign outv = vec;
// This is ok too: assign {o2, o1, o0} = vec;
assign o0 = vec[0];
assign o1 = vec[1];
assign o2 = vec[2];
endmodule
2.Vectors in more detail
module top_module(
input wire [15:0] in,
output wire [7:0] out_hi,
output wire [7:0] out_lo );
assign out_hi = in[15:8];
assign out_lo = in[7:0];
endmodule
3.Vector part select
module top_module(
input [31:0] in,
output [31:0] out );//
// assign out[31:24] = ...;
assign out[31:24] = in[7:0];
assign out[23:16] = in[15:8];
assign out[15:8] = in[23:16];
assign out[7:0] = in[31:24];
endmodule
4.Bitwise oparators
module top_module(
input [2:0] a,
input [2:0] b,
output [2:0] out_or_bitwise,
output out_or_logical,
output [5:0] out_not
);
assign out_or_bitwise = a|b;
assign out_or_logical = a||b;
assign out_not[5:3] = ~b;
assign out_not[2:0] = ~a;
endmodule
5.Four-input gates
module top_module(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and = in[3]&in[2]&in[1]&in[0];
assign out_or = in[3]|in[2]|in[1]|in[0];
assign out_xor = in[3]^in[2]^in[1]^in[0];
endmodule
6.Vector contact operator
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
// assign { ... } = { ... };
assign w = {a[4:0],b[4:2]};
assign x = {b[1:0],c[4:0],d[4]};
assign y = {d[3:0],e[4:1]};
assign z = {e[0],f[4:0],1'b1,1'b1};
endmodule
7.Vector reversal 1
module top_module(
input [7:0] in,
output [7:0] out
);
assign out[7]=in[0];
assign out[6]=in[1];
assign out[5]=in[2];
assign out[4]=in[3];
assign out[3]=in[4];
assign out[2]=in[5];
assign out[1]=in[6];
assign out[0]=in[7];
endmodule
8.Replication operator
module top_module (
input [7:0] in,
output [31:0] out );//
// assign out = { replicate-sign-bit , the-input };
assign out = {{24{in[7]}} , in[7:0]};
endmodule
9.More replication
module top_module (
input a, b, c, d, e,
output [24:0] out );//
// The output is XNOR of two vectors created by
// concatenating and replicating the five inputs.
// assign out = ~{ ... } ^ { ... };
assign out = ~{a,a,a,a,a,
b,b,b,b,b,
c,c,c,c,c,
d,d,d,d,d,
e,e,e,e,e}
^
{a,b,c,d,e,
a,b,c,d,e,
a,b,c,d,e,
a,b,c,d,e,
a,b,c,d,e};
endmodule