Vector0
module top_module (
input wire [2:0] vec,
output wire [2:0] outv,
output wire o2,
output wire o1,
output wire o0 ); // Module body starts after module declaration
assign outv = vec[2:0];
assign o2 = vec[2];
assign o1 = vec[1];
assign o0 = vec[0];
endmodule
Vectors in more detail
`default_nettype none // Disable implicit nets. Reduces some types of bugs.
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
Vector part select
module top_module(
input [31:0] in,
output [31:0] out );//
assign out = {in[7:0],in[15:8],in[23:16],in[31:24]};
endmodule
Bitwise operators
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 = ~{b,a};
endmodule
Four-input gates
module top_module(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and = in[0]&in[1]&in[2]&in[3];
assign out_or = in[0]|in[1]|in[2]|in[3];
assign out_xor = in[0]^in[1]^in[2]^in[3];
endmodule
Vector concatenation operator
学习位拼接
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
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],2'b11} ;
endmodule
Vector reversal1
学会使用generate语法结构
module top_module(
input [7:0] in,
output [7:0] out
);
generate
genvar i;
for(i=0; i <= 7;i = i+1)begin:geniiii
assign out[7-i] = in[i];
end
endgenerate
endmodule
Replication operator
看到复制运算符的一个常见地方是,将较小的数字符号扩展为较大的数字,同时保留其符号值。这是通过将较小数字的符号位(最高有效位)复制到左侧来完成的。例如,将4'b0101(5)符号扩展至8位会产生8'b00000101(5),而将4'b1101(-3) 符号扩展至8位会产生8'b11111101 (-3)。
module top_module (
input [7:0] in,
output [31:0] out );//
assign out = {{24{in[7]}},in}; //注意括号,要不然报错
endmodule
More replication
module top_module (
input a, b, c, d, e,
output [24:0] out );
assign out = ~{{{5{a}},{5{b}},{5{c}},{5{d}},{5{e}}}^{{5{a,b,c,d,e}}}};
endmodule